
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
参考:



