Cert manager自动签发/更新证书
Cert manager使用的是免費證書Let's Encrypt,并支持在證書過期時自動更新。
本文?Cert manager使用版本:v0.12.0
官方文檔:https://cert-manager.io/docs
添加helm源
注意stable/cert-manager已經(jīng)過時不再維護了,轉(zhuǎn)到jetstack/cert-manager。
helm repo add jetstack https://charts.jetstack.io?更新源
helm repo update創(chuàng)建CRDs
kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
kubectl create -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
安裝
這里設(shè)置了兩個默認值
--set ingressShim.defaultIssuerName=letsencrypt-prod
--set ingressShim.defaultIssuerKind=ClusterIssuer
--set ingressShim.defaultIssuerGroup=cert-manager.io
用于在后續(xù)創(chuàng)建Ingress時,配合annotations
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
實現(xiàn)自動創(chuàng)建證書。
helm install --name cert-manager --namespace cert-manager --set ingressShim.defaultIssuerName=letsencrypt-prod --set ingressShim.defaultIssuerKind=ClusterIssuer --set ingressShim.defaultIssuerGroup=cert-manager.io jetstack/cert-manager查看安裝是否完成
[root@k8s-master cert]# kubectl get pod -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5cd477f7bb-fxpvf 1/1 Running 0 22m
cert-manager-cainjector-df4dc78cd-l527b 1/1 Running 0 22m
cert-manager-webhook-5f78ff89bc-ggvqt 1/1 Running 0 22m
[root@k8s-master cert]# kubectl get crd | grep cert-manager
certificaterequests.cert-manager.io 2020-01-07T01:38:32Z
certificates.cert-manager.io 2020-01-07T01:38:32Z
challenges.acme.cert-manager.io 2020-01-07T01:38:32Z
clusterissuers.cert-manager.io 2020-01-07T01:38:32Z
issuers.cert-manager.io 2020-01-07T01:38:32Z
orders.acme.cert-manager.io 2020-01-07T01:38:32Z
創(chuàng)建默認簽發(fā)機構(gòu)(官方文檔)
剛剛安裝時已經(jīng)指定了默認簽發(fā)類型是ClusterIssuer?,簽發(fā)機構(gòu)名稱是letsencrypt-prod?,但是我們還沒有創(chuàng)建,現(xiàn)在需要創(chuàng)建cluster-issuer.yaml。?
cert-manager 給我們提供了 Issuer 和 ClusterIssuer 這兩種用于創(chuàng)建簽發(fā)機構(gòu)的自定義資源對象,Issuer?只能用來簽發(fā)自己所在 namespace 下的證書,ClusterIssuer?可以簽發(fā)任意 namespace 下的證書.
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: 1154365135@qq.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
上述配置:參考鏈接
- metadata.name 是我們創(chuàng)建的簽發(fā)機構(gòu)的名稱,后面我們創(chuàng)建證書的時候會引用它
- spec.acme.email 是你自己的郵箱,證書快過期的時候會有郵件提醒,不過 cert-manager 會利用 acme 協(xié)議自動給我們重新頒發(fā)證書來續(xù)期
- spec.acme.server 是 acme 協(xié)議的服務端,我們這里用 Let’s Encrypt,這個地址就寫死成這樣就行
- spec.acme.privateKeySecretRef 指示此簽發(fā)機構(gòu)的私鑰將要存儲到哪個 Secret 對象中,名稱不重要
- spec.acme.http01 這里指示簽發(fā)機構(gòu)使用 HTTP-01 的方式進行 acme 協(xié)議 (還可以用 DNS 方式,acme 協(xié)議的目的是證明這臺機器和域名都是屬于你的,然后才準許給你頒發(fā)證書)
配置ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "true"
labels:
app: kubernetes-dashboard
chart: kubernetes-dashboard-1.10.0
heritage: Tiller
release: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
rules:
- host: k8s.deri.com
http:
paths:
- backend:
serviceName: kubernetes-dashboard
servicePort: 443
path: /
tls:
- hosts:
- k8s.deri.com
secretName: deri-com-tls-secret-cc
由于添加了annotations kubernetes.io/tls-acme: "true",tls這個secret會自動創(chuàng)建。
卸載
helm delete --purge cert-manager
kubectl delete -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
Check
[root@master ~]# kubectl get certificate -n gateway
NAME READY SECRET AGE
consul-tls-test True consul-tls-test 19m
[root@master ~]# kubectl get clusterissuer
NAME READY AGE
letsencrypt-prod True 157m
[root@master ~]# kubectl get certificate -n gateway
NAME READY SECRET AGE
consul-tls-test True consul-tls-test 19m
[root@master ~]# kubectl get Order -n gateway
NAME STATE AGE
consul-tls-test-3546184973-1845474898 valid 20m
[root@master ~]# kubectl get CertificateRequest -n gateway
NAME READY AGE
consul-tls-test-3546184973 True 27m
[root@master ~]# kubectl get secret -ngateway
NAME TYPE DATA AGE
consul-tls-test kubernetes.io/tls 3 29m
?
總結(jié)
以上是生活随笔為你收集整理的Cert manager自动签发/更新证书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双塔模型在Airbnb搜索排名中的应用
- 下一篇: 使用 cert-manager 签发免费