cert-manager:Kubernetes 证书管理,自动化到底

cert-manager:Kubernetes 证书管理,自动化到底

文章目录

  • cert-manager:Kubernetes 证书管理,自动化到底
    • 它到底做了什么
    • 典型用法
    • 安装方式
    • 值得注意的点
    • 社区状态

cert-manager:Kubernetes 证书管理,自动化到底

在 Kubernetes 集群里管 TLS 证书,手动操作基本等于定时炸弹。证书过期导致服务中断的事故,运维群里隔三差五就有人发。cert-manager 这个项目,就是专门解决这个问题的。它把证书的申请、续期、分发全部自动化,装上之后基本不用再操心证书的事。

目前这个项目在 GitHub 上有 13,873 个 Star,属于 CNCF 生态里比较成熟的工具。

它到底做了什么

cert-manager 在 Kubernetes 里注册了两个自定义资源:Certificate 和 Issuer。你声明需要什么证书、从哪个签发机构申请,它帮你跑完整个流程。

支持的签发源包括 Let’s Encrypt(ACME 协议)、HashiCorp Vault、CyberArk Certificate Manager,也支持集群内部自签。对大多数团队来说,Let’s Encrypt 免费证书加上自动续期,就已经覆盖了大部分场景。

证书签发之后,cert-manager 会在到期前自动续期。这个时间窗口是可配置的,默认值足够安全。续期完成后,引用证书的 Secret 会自动更新,Ingress 或其他负载均衡器读到新证书,整个过程对业务透明。

典型用法

最常见的场景是给 Kubernetes Ingress 自动申请 TLS 证书。流程大致是这样:

  1. 部署 cert-manager
  2. 创建一个 ClusterIssuer,配置 Let’s Encrypt 的 ACME 服务器
  3. 在 Ingress 的注解里指定使用哪个 Issuer

完成这三步之后,只要 Ingress 创建,cert-manager 就会自动申请对应域名的证书并挂载到 Ingress 上。域名换一个,它就再申请一个。不用手动跑 certbot,不用操心证书文件放在哪里。

内部服务之间的 mTLS 也能用 cert-manager 管理。配合 Venafi 或 Vault 等企业级 CA,可以实现集群内所有服务的证书统一签发和轮换。

安装方式

cert-manager 的安装走的是标准 Helm 流程:

helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true

装完之后,kubectl 就能看到 Certificate、Issuer、ClusterIssuer 这几个资源类型。CRD 的设计比较规范,字段命名和 Kubernetes 原生资源风格一致,学习成本低。

也支持 kubectl apply 直接安装 YAML 清单,不依赖 Helm。两种方式文档里都有说明。

值得注意的点

cert-manager 对 Go 模块的兼容性没有硬性保证。官方明确说了,pkg/ 下的代码可能在小版本甚至补丁版本里发生破坏性变更。如果你要在自己的 Go 项目里 import cert-manager 的代码做二次开发,需要注意锁定版本。

这个限制不影响 Kubernetes API 层面的稳定性。Certificate、Issuer 这些 CRD 遵循 Kubernetes 的弃用策略,不会有突然删字段的情况。

另外,cert-manager 的排查文档比较全。出了问题先看 cert-manager.io 上的 troubleshooting 指南,再到 Kubernetes Slack 的 #cert-manager 频道提问,响应速度还行。

社区状态

cert-manager 基于早期的 kube-lego 项目发展而来,现在是 CNCF 的一部分。有定期的社区会议,Google Group 里会发公告。项目维护比较活跃,Issue 区有人在跟进,PR 审核速度中规中矩。

对于需要在 Kubernetes 里管理 TLS 证书的团队,cert-manager 目前是最成熟的选择。它不花哨,做的事情很明确:把证书管理这件事从运维清单里划掉。

的团队,cert-manager 目前是最成熟的选择。它不花哨,做的事情很明确:把证书管理这件事从运维清单里划掉。