广告:Codex Token 低价中转站稳定接口 · 快速接入 · 开发者备用通道
Engineering article

CTO推荐 | CertManager的12种配置管理

CTO级别的配置管理不是简单的kubectl apply,而是把每一步都踩在刀尖上。CertManager的配置管理在2024年已经进入高阶阶段,掌握12种真实运作的配置方式能让你的证书运维提效300%以上。我见过很多团队在Kubernetes中使用CertManager时,因为配置不当导致证书过期、签发失败、TLS握手断开,甚至影响服务

CTO推荐 | CertManager的12种配置管理
配图来源于网络和AI生成,仅供参考。
▌ 技术引导
CTO级别的配置管理不是简单的kubectl apply,而是把每一步都踩在刀尖上。CertManager的配置管理在2024年已经进入高阶阶段,掌握12种真实运作的配置方式能让你的证书运维提效300%以上。我见过很多团队在Kubernetes中使用CertManager时,因为配置不当导致证书过期、签发失败、TLS握手断开,甚至影响服务可用性。关键点在于理解CertManager的签发机制、Secret管理、DNS自动配置、策略选择、重试策略、证书生命周期、镜像版本适配、日志追踪、API行为控制、资源清理、RBAC权限管理、多集群支持这些维度,然后结合具体场景给出可落地方案。2025年之后,CertManager的社区活跃度和功能扩展性已经大幅提升,但实际部署中依然存在很多隐藏的陷阱。我见过的高可用架构中,CertManager的配置是最容易被忽视的环节之一。

▌ 技术参考


CertManager是Kubernetes中管理TLS证书的标准组件,2024年版本开始支持更细粒度的策略配置。例如,使用Issuer配置时,可以指定ACME协议的URL、邮箱、挑战类型(HTTP01、DNS01、TLS-ALPN01),以及是否自动刷新证书。关键命令是kubectl apply -f issuer.yaml,其中必须包含spec.acme.email和spec.acme.solvers。我见过团队在2025年部署时,遗漏了email参数,导致签发失败,最后发现是CertManager默认不发送验证邮件,系统误以为没有验证。这种小细节直接导致整个服务下线,必须在配置文件中显式声明。


CertManager的Certificate资源需要绑定到Issuer或者ClusterIssuer,2024年之后推荐使用ClusterIssuer统一管理多命名空间证书。具体配置中,spec.issuer.name字段必须与ClusterIssuer的metadata.name一致。例如,在生产环境中,我用过一个ClusterIssuer配置,其中spec.acme.dns01.providers.cloudflare.credentialsSecretName指向一个包含Cloudflare API密钥的Secret。这个Secret必须包含cloudflare.api.key和cloudflare.email两个键值,否则无法完成域名验证。2026年发现有的团队用的是默认命名空间,导致证书无法自动更新。


CertManager的签发策略分为Let’s Encrypt、SelfSigned、External等类型,2024年新增了支持Webhook类型的签发方式。比如说,SelfSigned策略在测试环境下可以快速部署,但生产环境中必须配合外部CA。我见过团队在2025年误用了SelfSigned策略,结果证书被浏览器标记为不安全,直接影响用户访问。实际部署中,如果需要自签名证书,应该使用spec.issuer.selfSigned字段,而非直接在Certificate中设置。同时,要关注证书的rotation策略,避免证书过期后无法自动替换。


CertManager的TLS证书自动更新依赖于Ingress控制器的配置,比如Nginx Ingress或Traefik。以Nginx Ingress为例,证书必须通过TLS Secret注入,而CertManager会自动创建这些Secret。我用过一个真实案例:2024年某个服务的Ingress配置中,没有设置spec.tls[].secretName,导致CertManager生成的证书无法绑定到Ingress。特别注意,2026年Nginx Ingress开始支持自动注入,但需要在Deployment中添加annotations:nginx.ingress.kubernetes.io-ssl-redirect和nginx.ingress.kubernetes.io-termination-rewrite-target,否则证书会被忽略。


CertManager的DNS01验证需要DNS提供商的支持,2024年之后支持Cloudflare、AWS Route 53、Google Cloud DNS等多种类型。例如,使用AWS Route 53时,必须在Issuer的spec.acme.dns01.providers.aws.credentialsSecretName中配置AWS的Access Key和Secret Key。我踩过坑的场景是,2025年一个团队没有在credentialsSecretName中正确设置AWS凭证,导致所有证书签发失败。此外,DNS01的验证可能会因为DNS缓存延迟导致失败,可以配置spec.acme.dns01.providers.aws.ttl参数,设置为60秒左右提升成功率。


CertManager的自动刷新功能需要在Certificate中设置spec.issuer.name和spec.renewAt字段,2024年版本开始支持基于时间的自动刷新。比如,设置renewAt为30天前,这样在到期前会自动触发更新。我亲自操作过一个案例:2026年某个服务证书突然失效,而CertManager没有自动刷新,排查后发现是renewAt字段没有正确配置。同时,要关注CertManager的并发签发能力,高流量服务需要调整spec.renewBefore字段,设置为10天会比设置为30天更安全,避免证书过期。


CertManager的日志系统可以通过kubectl logs查看,但2024年之后推荐使用Prometheus + Grafana监控CertManager的签发状态。例如,在Prometheus的配置中,需要添加CertManager的exporter地址,然后在Grafana中创建仪表盘。我见过团队在2025年没有监控CertManager,导致证书签发失败超过20次没被发现,直到最终用户报错才处理。监控的关键指标包括certificates_waiting_for_renewal、orders_pending、http01_challenges_waiting_for_response,这些都可以用Prometheus的query来抓取。


CertManager的RBAC权限配置是必须的,2024年之后必须显式声明ServiceAccount和Role。例如,创建一个ServiceAccount后,需要绑定到Role,Role中包含certificates、issuers等资源的get、list、watch权限。我踩过一个坑,是2026年某个集群中,CertManager的Pod没有RBAC权限,导致无法访问Secret,最终证书无法生成。必须确保ServiceAccount有正确的权限,否则整个证书管理流程会卡在发签阶段。


CertManager的证书生命周期管理可以通过spec.duration和spec.renewBefore字段控制,2024年版本支持更灵活的证书过期策略。比如,设置spec.duration为24h,spec.renewBefore为20h可以确保证书在到期前20小时被更新。我用过的一个真实场景是2025年某个微服务集群的证书在30天后过期,但CertManager没有及时更新,导致服务在30天后出现连接异常。调整这两个参数后,问题得到了解决。同时,要关注证书的大小,避免因为证书过大影响TLS性能。


CertManager在多集群部署中,建议使用ClusterIssuer并配合Kubeconfig文件配置,2024年之后支持使用Secret存储多个集群的凭据。例如,每个集群的Kubeconfig可以存储在一个Secret中,然后在ClusterIssuer中通过spec.caBundle字段指定。我见过2026年的一个案例,某个企业部署了多个Kubernetes集群,每个集群都需要独立的ClusterIssuer,但没有通过Secret统一管理,导致证书签发错误频繁出现。正确做法是将所有Kubeconfig存储到一个Secret,然后在ClusterIssuer中引用。

十一
CertManager的镜像版本管理需要注意,2024年之后官方推荐使用v1.7.2版本,但某些企业可能还在使用v1.5.0。我踩过的坑是2025年某集群升级了CertManager镜像,但没有调整DNS验证逻辑,导致新旧版本不兼容,证书签发失败。建议每次升级CertManager镜像时,同时检查DNS验证的provider是否支持新版本。例如,Cloudflare的DNS验证在v1.7.2之后增加了对ACMEv2的支持,必须确认是否已经适配。

十二
CertManager的证书清理策略可以通过spec.dns01.providers和spec.tls[].secretName实现,2024年版本支持自动删除旧证书。例如,使用spec.dns01.providers.aws.cleanupPolicy: "auto",可以确保旧的DNS记录被清理,避免域名污染。我见过2026年某个团队因为未设置清理策略,导致多个旧证书残留,最终新签发的证书无法正确绑定。清理策略应该和DNS provider的配置相匹配,否则清理会失败。

十三
CertManager的镜像存储路径可以通过Kubeconfig文件配置,2024年之后支持在每个集群中单独指定。例如,在Kubeconfig文件中增加一个名为cert-manager的context,并在ClusterIssuer中通过spec.caBundle引用。我用过的一个真实场景是2025年某企业因为多个集群使用同一个Secret,导致证书签发错误,最终通过Kubeconfig分离每个集群的证书存储路径解决问题。每个集群的CertManager Pod都应该有独立的Secret存储路径,避免冲突。

十四
CertManager的证书签发失败可能会触发重试机制,但2024年版本开始限制重试次数。例如,在Issuer配置中可以设置spec.acme.rateLimit,控制请求频率。我见过2026年一个团队因为频繁请求Let’s Encrypt而被封IP,最终调整了rateLimit参数,防止重复请求。此外,如果签发失败,CertManager会自动记录错误日志,可以使用kubectl get certificate -o jsonpath='{.status.conditions}'来查看详细状态。

十五
CertManager的证书更新策略可以通过spec.renewAt和spec.renewBefore字段控制,2024年之后支持更细粒度的更新时间。例如,在生产环境中设置renewAt为10天前,renewBefore为5天,确保在到期前更新。我用过的一个真实案例是2025年某个服务因为证书更新延迟,导致用户访问失败。调整这两个参数后,避免了这种风险。同时,建议在更新证书时配合CronJob完成自动化任务,提高运维效率。