{{item}}
{{item.title}}
{{items.productName}}
{{items.price}}/年
{{item.title}}
部警SSL证书可实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄露或算改,提高网站可信度和品牌形象,利于SEO排名,为企业带来更多访问量,这也是网络安全法及PCI合规性的必备要求
前往SSL证书集群中运行的应用(如API网关、Web服务、数据库)普遍依赖SSL证书实现加密通信,而证书的有效期通常为 90 天至 1 年。手动更新证书不仅耗时费力,还可能因遗漏导致服务中断 —— 据统计,约 30% 的生产环境故障与证书过期相关。因此,实现SSL证书在K8s集群中的自动化更新,是保障服务连续性与安全性的核心需求。本文将系统介绍主流方案、实施步骤与最佳实践。
K8s环境的动态性与分布式特性,使得证书管理面临独特挑战:
1. 多维度证书需求:集群内存在三类证书需管理 ——
2. 动态扩缩容适配:Pod的创建与销毁具有随机性,证书需跟随Pod生命周期自动挂载,而非静态部署在节点上。
3. 高可用与一致性:证书更新需在不中断服务的前提下完成(如通过滚动更新),且确保所有副本Pod使用相同的有效证书,避免通信异常。
基于K8s的声明式API与控制器模式,主流方案通过 “证书申请→自动签发→动态挂载→过期更新” 的闭环实现自动化,核心工具包括 Cert-Manager (证书生命周期管理)、 Let's Encrypt (免费证书签发)与 Ingress Controller (网关证书绑定)。
方案架构:Cert-Manager + Let's Encrypt + Ingress
1. Cert-Manager:K8s原生的证书管理控制器,通过CRD(自定义资源定义)声明证书需求,自动完成申请、续签、更新等操作。
2. Let's Encrypt:免费的证书颁发机构(CA),支持通过ACME(自动化证书管理环境)协议自动验证域名所有权并签发证书(有效期 90 天)。
3. Ingress Controller(如 Nginx Ingress):作为集群流量入口,将Cert-Manager管理的证书与Ingress规则绑定,实现外部流量的SSL加密。
Cert-Manager需运行在K8s集群中,通过Helm Chart快速部署:
1 # 添加Helm仓库
2 helm repo add jetstack https://charts.jetstack.io
3 helm repo update
4
5 # 安装Cert-Manager(指定CRD自动安装)
6 helm install cert-manager jetstack/cert-manager \
7 --namespace cert-manager \
8 --create-namespace \
9 --version v1.13.1 \
10 --set installCRDs=true
部署完成后,Cert-Manager 会创建 Certificate 、 Issuer 等CRD资源,用于定义证书与签发者。
通过 Issuer 或 ClusterIssuer 资源定义证书签发方式(以Let's Encrypt为例):
1 # letsencrypt-issuer.yaml
2 apiVersion: cert-manager.io/v1
3 kind: ClusterIssuer # ClusterIssuer为集群级资源,所有命名空间可用
4 metadata:
5 name: letsencrypt-prod
5 spec:
6 acme:
8 server: https://acme-v02.api.letsencrypt.org/directory # 生产环境ACME服务器
9 email: admin@example.com # 证书过期通知邮箱
10 privateKeySecretRef:
11 name: letsencrypt-prod-account-key # 存储ACME账户私钥的Secret
12 solvers:
13 - http01: # 通过HTTP-01挑战验证域名所有权(需Ingress支持)
14 ingress:
15 class: nginx # 关联Nginx Ingress Controller
应用配置:
1 kubectl apply -f letsencrypt-issuer.yaml
Let's Encrypt通过HTTP-01挑战验证域名所有权:向 http://<域名>/.well-known/acme-challenge/<随机字符串> 发送请求,Cert-Manager会自动创建临时Ingress规则响应验证,确保域名归当前集群管理。
通过 Certificate 资源声明证书需求,Cert-Manager会自动向Issuer申请证书,并将证书存储在Secret中:
1 # example-com-cert.yaml
2 apiVersion: cert-manager.io/v1
3 kind: Certificate
4 metadata:
5 name: example-com-cert
6 namespace: default # 证书所在命名空间,需与应用一致
7 spec:
8 secretName: example-com-tls # 存储证书的Secret名称(自动创建)
9 issuerRef:
10 name: letsencrypt-prod
11 kind: ClusterIssuer
12 dnsNames:
13 -api.example.com # 需签发证书的域名
14 - www.example.com
15 duration: 2160h # 证书有效期(Let's Encrypt最大90天=2160h)
16 renewBefore: 360h # 过期前5天(360h)自动续签
应用配置后,Cert-Manager会触发证书申请流程:
1 kubectl apply -f example-com-cert.yaml
2
3 # 查看证书状态(Ready为True表示申请成功)
4 kubectl get certificate example-com-cert -o wide
证书申请成功后,Secret example-com-tls 会自动创建,包含:
通过Ingress规则将证书与服务绑定,Ingress Controller会自动从Secret中加载证书,并在证书更新时热重载配置:
1 # example-ingress.yaml
2 apiVersion: networking.k8s.io/v1
3 kind: Ingress
4 metadata:
5 name: example-ingress
6 namespace: default
7 annotations:
8 kubernetes.io/ingress.class: "nginx" # 指定Ingress Controller类型
9 cert-manager.io/cluster-issuer: "letsencrypt-prod" # 可选:直接关联Issuer,简化配置
10 spec:
11 tls:
12 - hosts:
13 -api.example.com
14 - www.example.com
15 secretName: example-com-tls # 关联证书Secret
16 rules:
17 - host:api.example.com
18 http:
19 paths:
20 - path: /
21 pathType: Prefix
22 backend:
23 service:
24 name:api-service
25 port:
26 number: 80
应用Ingress配置后,外部访问 https://api.example.com 时,Ingress Controller会使用 example-com-tls 中的证书进行加密通信。
1 # 应用Deployment示例(挂载证书)
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name:API-deployment
6 spec:
7 replicas: 3
8 template:
9 spec:
10 containers:
11 - name:api-service
12 image:api-image:latest
13 volumeMounts:
14 - name: tls-cert
15 mountPath: /etc/tls
16 readOnly: true
17 volumes:
18 - name: tls-cert
19 secret:
20 secretName: example-com-tls
当Secret更新后,K8s会自动将新证书同步到所有Pod的挂载目录中。对于需要重启才能加载证书的应用,可通过滚动更新触发 Pod 重建:
对于服务间的加密通信(mTLS),需为每个服务签发客户端与服务器证书,可通过Cert-Manager + SPIRE实现:
1. SPIRE:为每个Pod自动分配身份标识(SPIFFE ID),并通过Cert-Manager签发基于身份的证书。
2. 自动注入证书:通过MutatingWebhook在Pod创建时自动挂载证书,并配置Sidecar代理(如Istio)处理TLS握手,证书过期前自动更新并重启Sidecar。
通过Cert-Manager与Let's Encrypt的组合,K8s集群可实现SSL证书从申请到更新的全自动化,彻底解决手动操作的效率与风险问题。核心在于利用K8s的控制器模式,将证书管理转化为声明式配置,让系统按规则自动完成生命周期管理。
Dogssl.com拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!