cert-manager需部署在Linux主机搭建的Kubernetes集群中,通过Helm安装、配置ClusterIssuer对接Let’s Encrypt,并借助Certificate与Ingress资源实现SSL证书自动签发和续期。

在 Linux 环境下部署 cert-manager 实现 SSL 证书自动更新,核心是将其运行在 Kubernetes 集群中,并对接 Let’s Encrypt 完成 ACME 协议验证、签发与续期。它不直接运行在普通 Linux 服务器上,而是作为 K8s 原生控制器工作——所以“Linux 下部署”实际指在 Linux 主机搭建的 K8s 集群(如 k3s、kubeadm、EKS、阿里云 ACK 等)中安装 cert-manager。
确认前提条件
确保以下基础环境已就绪:
- Kubernetes 集群正常运行(v1.20+ 推荐),kubectl 可连通集群
- 有可解析的公网域名(如
dify.example.com),并能指向集群 Ingress Controller 的 LoadBalancer 或 NodePort IP - 80 和 443 端口对外可达(HTTP-01 验证必需);若用 DNS-01,需配置对应 DNS 提供商 API 凭据
- 已安装 Helm v3+(推荐方式)或具备 kubectl 管理权限
通过 Helm 安装 cert-manager(推荐)
这是最稳定、可复现、适合生产的方式:
- 添加官方仓库:
helm repo add jetstack https://charts.jetstack.io - 更新本地索引:
helm repo update - 创建专用命名空间:
kubectl create namespace cert-manager - 安装(以 v1.14.4 为例,建议查最新稳定版):
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.14.4 --set installCRDs=true - 验证安装:
kubectl get pods -n cert-manager,所有 Pod 应为Running状态且READY 1/1
配置 ClusterIssuer 对接 Let's Encrypt
ClusterIssuer 是全局可用的证书签发策略,支持生产(`letsencrypt-prod`)和测试(`letsencrypt-staging`)环境:
保存以下 YAML 为 cluster-issuer.yaml(使用邮箱替换 admin@example.com):
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx # 与你集群中 Ingress Controller 类型一致(如 traefik、alb 等需调整)
执行:kubectl apply -f cluster-issuer.yaml
检查状态:kubectl get clusterissuers.cert-manager.io letsencrypt-prod -o wide,STATUS 应为 Ready。
申请并自动注入证书到 Ingress
以 Nginx Ingress 为例,在应用所在命名空间中创建 Certificate 资源:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: dify-tls
namespace: default
spec:
secretName: dify-tls-secret # 生成后将自动创建此 Secret
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- dify.example.com
- www.dify.example.com
同时确保 Ingress 资源引用该 Secret:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dify-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- dify.example.com
- www.dify.example.com
secretName: dify-tls-secret # 必须与 Certificate.spec.secretName 一致
rules:
- host: dify.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: dify-service
port:
number: 80
cert-manager 会自动完成:DNS 验证 → 向 Let’s Encrypt 申请证书 → 存入 default/dify-tls-secret → Ingress 自动加载新证书。
证书将在到期前约 30 天自动续期,全程无需人工干预。


















