
Let’s Encrypt的免费证书真是慈善行为,可惜周期只有90天,所以每隔一两个月就要申请证书续期,还要把证书再安装导入一遍,真是麻烦。一不小心逾期,网站就会崩出不安全的提示,实在是受不了。
cert-manager是kubernetes环境下的证书管理工具,可以为多个域名自动申请、安装证书,到期后能够自动续期,让免费证书的使用变得非常轻松自在。
首先,你应该已经安装好了ingress-nginx控制器,并在域名服务器上给你的网站分配了域名。
安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
然后,新建和保存staging-issuer.yaml文件
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
spec:
acme:
# The ACME server URL
server: https://acme-staging-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-staging
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
ingressClassName: nginx
以上代码的目的,是申请let’s encrypt 的临时发行。其中email需要改为你的邮件地址。
然后运行
kubectl apply -f ./staging-issuer.yaml
如果运行正常,说明证书临时发行没有问题,接下来就可以注册正式发行。
新建并保存production-issuer.yaml
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
ingressClassName: nginx
注意把email改为自己的邮件地址
然后
kubectl apply -f ./production-issuer.yaml
完成正式发行注册。
接下来部署ingress并申请证书,新建和保存文件ingress-tls.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kuard
annotations:
cert-manager.io/issuer: "letsencrypt-staging"
spec:
ingressClassName: nginx
tls:
- hosts:
- example.example.com
secretName: quickstart-example-tls
rules:
- host: example.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kuard
port:
number: 80
其中hosts和host都要改为你的网站域名,name改为你想要的ingress名字,secretname改成你想要的secret名字,service 下面的name改为ingress后台实际映射的其他service名字。
然后
kubectl apply -f ./ingress-tls.yaml
部署ingress,在这个过程中,cert-manager会自动向let’s encrypt给你的网站申请一个证书,并安装到ingress中。
接下来,可以检查一下证书的部署情况
kubectl get certificate
kubectl describe certificate 证书名称
最后,用https访问你的网站,检查一下是不是搞定了。
参考: