You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s集群Cert-Manager证书自动续约未更新TLS Secret问题咨询

问题排查与解决方案

你的理解是否存在偏差

你对Cert-Manager自动更新TLS Secret的基础逻辑认知没有偏差:正常续约流程下,Cert-Manager确实会更新对应Secret中的证书、私钥内容。
需要先说明一个Kubernetes资源的基础特性:你查询到的Secret AGE 字段是资源的创建时间,和内容更新时间无关,就算内容多次修改,AGE也会持续累加。你可以通过以下命令查看证书实际有效期,判断内容是否真的没有更新:

openssl x509 -in <(kubectl get secret service1-certificate -n sandbox -o jsonpath='{.data.tls\.crt}' | base64 -d) -text -noout | grep Not

结合你提供的日志判断,当前确实存在续约流程异常,不是单纯的字段理解误差。

问题根因分析

  1. 版本已知Bug:你使用的Cert-Manager v1.5.3存在短有效期证书续约问题,当证书有效期小于72小时、续约频率较高时,多个Controller协程同时修改Certificate资源会触发乐观锁冲突,该版本的冲突重试逻辑存在缺陷,会导致续约流程中断。
  2. 资源配置拼写错误:日志中存在多处明显的资源名称异常,包括路径斜杠错误sandbox\service2-certificate、名称拼写错误serivce2-certificate、不存在的资源名service-certificate,说明你的Certificate资源配置、Helm部署模板中存在拼写问题,导致Controller无法匹配到正确的资源,重试流程完全失效。

修复方案

  • 升级Cert-Manager版本:至少升级到v1.6.0及以上版本,该版本已修复短有效期证书的乐观锁重试失效问题,升级命令参考:
    helm upgrade cert-manager jetstack/cert-manager --namespace cert-manager --version v1.12.0 --set installCRDs=true
    
  • 修正所有配置拼写错误:检查sandbox命名空间下所有Certificate资源的名称、Helm模板中引用的证书名称,修正拼写错误、路径分隔符错误,确保日志中不再出现不存在的资源名。
  • 手动验证续约流程:修复完成后执行命令手动触发续约,验证流程是否正常:
    # 手动触发续约
    kubectl cert-manager renew service1-certificate -n sandbox
    # 验证证书有效期是否更新
    openssl x509 -in <(kubectl get secret service1-certificate -n sandbox -o jsonpath='{.data.tls\.crt}' | base64 -d) -text -noout | grep Not
    
  • 可选优化:如果业务场景允许,可将证书有效期调整到72小时以上,降低续约频率,进一步减少并发冲突的概率。

内容的提问来源于stack exchange,提问作者Ruchir Bharadwaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:36:03