1.安装Cert Manager
curl -sL \ https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml |\ sed -r 's/(image:.*):(v.*)$/-arm:/g' > cert-manager-arm.yaml
kubectl apply -f cert-manager-arm.yaml
我们可以通过 kubectl --namespace cert-manager get pods
来检查安装何时完成,直到所有 Pod 都处于 Running
状态。
这就完成了 cert-manager 的安装。
当然你也可以用helm安装。
2.配置 cert-manager 来使用 Let’s Encrypt
现在,我们需要配置 cert-manager 来通过 Let’s Encrypt 颁发证书。
创建一个名为 letsencrypt-issuer-production.yaml
的文件
踩坑记录:cert-manager 过旧的版本会报错(例如很多老文档里使用的alpha2版本),注意修改
apiVersion: cert-manager.io/v1 # 过旧的版本会报错,注意修改 kind: ClusterIssuer 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: [email protected] # 你的邮箱 # Name of a secret used to store the ACME account private key privateKeySecretRef: name: letsencrypt-prod # Enable the HTTP-01 challenge provider # HTTP-01 最简单,复杂网络环境实用 DNS-01 的方式,即检查DNS记录控制权 solvers: - http01: ingress: class: traefik # 使用的ingress controller
kubectl apply -f letsencrypt-issuer-production.yaml
3.更新网站的Ingress
节选Ingress部分(完整代码可参看 使用 Kubernetes部署博客):
kind: Ingress # 创建 Ingress 资源 apiVersion: networking.k8s.io/v1 metadata: name: &name wordpress # 引用锚点指定的名称 namespace: default annotations: traefik.ingress.kubernetes.io/router.entrypoints: web,websecure # Traefik 路由入口配置 cert-manager.io/cluster-issuer: letsencrypt-prod # (新增) spec: rules: - host: blog.netvps.top # 定义访问 Ingress 的域名 http: paths: - path: / # 匹配路径为/ pathType: Prefix # 路径类型为前缀匹配 backend: service: name: *name # 引用锚点指定的 Service 名称 port: name: http # 引用锚点指定的端口名称 tls: - hosts: - blog.netvps.top secretName: blog-netvps-top-tls # (新增)
- 所做的更改是添加了注解
cert-manager.io/cluster-issuer: letsencrypt-prod
,这告诉 traefik 创建证书时使用哪个发行者。
- 其他唯一增加的是
tls:
块,这告诉 traefik 我们希望在主机 blog.netvps.top 上具有 TLS 功能,并且我们希望 TLS 证书文件存储在机密信息blog-netvps-top-tls
中。
请记住,我们没有创建这些证书!Traefik 将读取这些配置并继续寻找机密信息。当找不到时,它会看到注释说我们想使用 letsencrypt-prod
发行者来获取它。由此,它将提出请求并为我们安装证书到机密信息之中!
kubectl get certificates 检查证书 :
大功告成!
清理证书:
清理证书和我们创建的机密信息:
kubectl delete certificates blog-netvps-top kubectl delete secrets blog-netvps-top-tls
参考: