在K8s中使用cert-manager ACME工作流:新证颁发后旧证是否吊销?能否控制?
关于cert-manager ACME工作流中旧证书吊销的问题
1. 默认行为:不会自动吊销旧证书
cert-manager在默认配置下,当新证书颁发完成后,不会主动吊销旧的未过期证书。原因在于ACME协议本身并不强制要求吊销未过期证书,而cert-manager的设计优先保证服务可用性——旧证书只要还在有效期内,就可以继续被应用使用,避免因吊销操作可能带来的服务中断风险。
2. 手动触发旧证书吊销的方式
如果你需要主动吊销旧证书,有两种可行方法:
- 使用cert-manager CLI:针对目标Certificate资源执行吊销命令:
该命令会向ACME服务器(如Let's Encrypt)发送吊销请求,同时标记对应证书资源为已吊销状态。kubectl cert-manager revoke <certificate-name> --namespace <namespace> - 添加资源注解触发:给目标Certificate添加
cert-manager.io/revoke: "true"注解,cert-manager检测到后会自动启动吊销流程:
吊销完成后建议移除该注解,防止重复触发操作。apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-cert namespace: default annotations: cert-manager.io/revoke: "true" spec: # 原有证书配置内容
3. 实现自动吊销的自定义方案
目前cert-manager没有内置配置支持"新证书颁发后自动吊销旧证书"的逻辑,但可以通过自定义方式实现类似效果:
- 编写自定义Kubernetes控制器:监听Certificate资源的状态变化,当检测到新证书颁发成功(通过
status.conditions中Ready状态为True、且status.notAfter更新为新时间),自动触发旧证书的吊销操作。 - 结合Job与定时任务:定期扫描集群内的Certificate资源,对比证书序列号或有效期,找出已被替换的旧证书,批量执行吊销命令。
注意:频繁触发吊销请求可能会触发ACME服务商的速率限制(比如Let's Encrypt的吊销请求频次限制),操作前需确认服务商的相关规则。
内容的提问来源于stack exchange,提问作者Olafs Aploks
相关产品推荐
相关产品推荐

