文档中心
K8s鑷姩鏇存柊闃块噷浜慡SL璇佷功5姝ュ疄鐜伴浂鍋滄満瀹夊叏鍗囩骇
时间 : 2025-09-27 16:22:43浏览量 : 2
为什么需要自动更新SSL证书?

想象一下,你的网站就像一家24小时营业的便利店。SSL证书就是店门的电子锁,保护着顾客的交易安全。如果这个"电子锁"过期了,顾客(用户)就无法正常进出(访问),店铺(K8s服务)就会被迫关门(服务中断)。2025年某电商平台就曾因证书过期导致2小时服务瘫痪,损失超千万。
传统手动更新方式存在三大痛点:
1. 容易遗忘:证书有效期通常1年,管理员可能错过更新时间
2. 操作复杂:需登录阿里云控制台下载新证书,再到每个K8s集群更新
3. 风险高:手动操作容易出错,可能导致服务中断
解决方案架构全景图
我们的自动化方案就像给K8s集群装上了"智能管家",包含五个核心组件:
1. Cert-Manager:证书管家,负责整个生命周期管理
2. Aliyun DNS插件:域名验证专家
3. K8s Secret:保险柜,安全存储证书
4. Ingress控制器:交通警察,引导流量使用新证书
5. 监控告警系统:安全哨兵,异常时立即报警
```
[阿里云SSL] → [Cert-Manager] → [K8s Secret] → [Ingress] → [终端用户]
详细实施步骤
步骤1:安装Cert-Manager(证书管家)
```bash
helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.11.0 \
--set installCRDs=true
这就像在小区里安装了一个智能快递柜系统。`installCRDs=true`表示同时安装快递柜的使用说明书(自定义资源定义)。
步骤2:配置阿里云访问密钥
创建Secret存储阿里云API密钥:
```yaml
apiVersion: v1
kind: Secret
metadata:
name: alicloud-dns-secret
namespace: cert-manager
type: Opaque
data:
access-key: BASE64编码的AK
secret-key: BASE64编码的SK
注意点:
- AK/SK需要DNS解析权限(AliyunDNSFullAccess)
- BASE64编码方法:`echo -n "实际内容" | base64`
- Secret名称后面会引用
步骤3:创建ClusterIssuer(证书签发机构)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- dns01:
webhook:
groupName: acme.yourcompany.com
solverName: alidns
config:
regionId: cn-hangzhou
accessKeySecretRef:
name: alicloud-dns-secret
key: access-key
secretKeySecretRef:
key: secret-key
关键参数说明:
- `server`: Let's Encrypt生产环境地址(测试用staging地址不同)
- `email`: CA机构联系邮箱(到期提醒会发到这里)
- `regionId`: DNS解析所在区域(如杭州cn-hangzhou)
步骤4:为Ingress配置自动签发
假设已有如下Ingress资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
name: my-app-ingress
tls:
- hosts:
- www.example.com
secretName: example-com-tls
只需添加注解即可启用自动化:
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
acme.cert-manager.io/http01-edit-in-place: "true"
步骤5:验证与监控
检查证书状态:
```bash
kubectl get certificate -A -w
看到READY=True且ISSUED状态表示成功。
建议添加Prometheus监控:
```yaml
- job_name:'cert_manager'
static_configs:
- targets:[cert-manager-service.cert-manager.svc.cluster.local]
K8s SSL自动化最佳实践
A/B测试模式下的双证书记录
对于关键业务可以采用双证书记录策略:
tls:
- hosts:[www.example.com]
secretName:"example-com-tls-a"
- hosts:[www.example.com]
secretName:"example-com-tls-b"
通过设置不同的renewBefore时间(如30天和15天),确保始终有一个有效证书。
HPA与证书更新的协同设计
当配置HPA自动扩缩容时:
1. Pod数量变化不能影响DNS验证过程。
2. Solution方案是在solvers配置中添加podTemplate字段。
3. Example示例:
```yaml
solvers:- dns01:{ podTemplate:{ spec:{ nodeSelector:{...} } } }
```
Troubleshooting常见问题排查指南
问题现象 |可能原因 |解决方案
||
Certificate pending状态超过5分钟| DNS解析未生效|检查阿里云解析记录是否自动添加_acme-challenge记录
报错"invalid API key" |RAM权限不足|确保AK有AliyunDNSFullAccess权限并检查Secret中的base64编码是否正确
新Pod无法启动|旧证书未及时清除|执行kubectl delete secret old-certificate-secret
某金融客户实际案例:因Region配置错误导致自动续期失败。原配置为`cn-hangzhou`但实际DNS在`ap-southeast-1`。修正后增加多Region备份方案。
SSL自动化进阶技巧
ECC vs RSA性能优化
对于高并发场景推荐ECC证书:
spec.keyAlgorithm:"ECDSA"
spec.keySize:"256"
实测结果:
RSA2048握手时间≈300ms, ECDSA≈120ms
OCSP装订配置
在Ingress中启用OCSP Stapling提升性能:
annotations:
Nginx Ingress特有配置
nginx.org/ssl-stapling:"true"
nginx.org/ssl-stapling-verify:"true"
Security注意事项
1. AK/SK必须限制为最小权限原则。
2. Cert-Manager的webhook需要独立SA并限制RBAC权限。
3. Audit Log建议记录所有Certificate资源的变更事件。
某游戏公司曾发生因过度授权导致AK泄露事件。事后他们采用Vault动态生成临时凭证的方案替代长期AK。
TAG:k8s自动更新阿里云ssl证书,weblogic安装ssl证书,网站安装ssl证书,服务器配置ssl证书,web认证服务器搭建,如何安装web服务器组件iis,web服务器怎么安装,webservice ssl,web服务器安装步骤,web服务器安装与配置步骤