证书轮换的必要性

在 Kubernetes 声明式管理集群中,证书是控制面组件之间、组件与 kube-apiserver 之间、以及 kubelet 与 apiserver 之间身份认证与通信加密的基石。证书轮换并非可选的运维操作,而是保障集群长期稳定运行、满足安全合规要求的强制性任务。以下从四个核心维度阐述证书轮换的必要性。

一、证书过期风险

Kubernetes 集群默认签发的证书(如 kubelet 证书、apiserver 证书、etcd 证书)通常具有固定的有效期(常见为 1 年)。证书过期后,依赖该证书的组件将无法建立 TLS 连接,直接导致服务中断。

证书类型 默认有效期 过期影响范围
kubelet 服务端证书 1 年 kubelet 无法注册到集群,节点状态变为 NotReady
apiserver 证书 1 年 kubectl、kubelet、调度器、控制器均无法连接 apiserver
etcd 证书 1 年 etcd 集群通信中断,控制面数据不可读写
kubeconfig 用户证书 1 年 运维人员无法通过 kubectl 管理集群
⚠️ 典型事故场景:某生产集群因 kubelet 证书批量过期,导致 30% 节点在 24 小时内陆续进入 NotReady 状态,业务 Pod 被驱逐,核心服务中断 2 小时。事后排查发现证书轮换策略缺失,且未设置证书过期告警。

二、安全合规要求

企业级集群必须满足行业安全标准(如 PCI DSS、SOC 2、ISO 27001、等保 2.0)。这些标准对证书管理有明确要求:

  • 证书有效期限制:多数合规框架要求证书有效期不超过 1 年,部分要求不超过 90 天。
  • 密钥轮换周期:私钥必须定期轮换,防止密钥泄露后长期有效。
  • 证书吊销能力:当证书泄露或组件退役时,必须能立即吊销证书。
  • 审计日志:证书的签发、轮换、吊销操作必须记录在审计日志中。
💡 合规实践:在 K8s 集群中,建议将证书有效期设置为 90 天,并配合自动轮换机制。对于金融、医疗等强合规行业,证书有效期应缩短至 30 天,并使用硬件安全模块(HSM)保护私钥。

三、集群稳定性影响

证书过期对集群稳定性的破坏是渐进式且灾难性的。下图展示了证书过期后集群状态的变化路径:

证书过期对集群稳定性的影响路径 证书过期事件 kubelet 证书过期 apiserver 证书过期 节点 NotReady 控制面不可用 Pod 驱逐 / 服务中断 etcd 读写失败 集群整体不可用

从图中可以看出,证书过期并非单一组件故障,而是会沿着控制面依赖链逐级扩散,最终导致集群整体不可用。更隐蔽的风险在于:

  • 证书过期前无预警:K8s 默认不会在证书过期前主动告警,运维人员往往在故障发生后才发现。
  • 证书批量过期:同一批次签发的证书会在相近时间点过期,造成大规模故障。
  • 证书轮换期间服务中断:手动轮换证书时,如果操作顺序错误或证书不匹配,会导致更长的恢复时间。

四、证书轮换策略

为了规避上述风险,必须制定并实施证书轮换策略。一个完整的证书轮换策略包含以下要素:

策略维度 推荐做法 说明
轮换周期 90 天(强合规场景 30 天) 短周期降低泄露风险,但需配合自动化工具
轮换方式 自动轮换(kubelet 证书轮换 + cert-manager) 减少人工操作失误,支持证书自动续期
轮换窗口 业务低峰期 + 灰度分批 避免一次性轮换所有证书导致集群抖动
证书备份 轮换前备份旧证书和私钥 用于回滚场景,防止新证书不兼容
监控告警 证书过期前 30 天、7 天、1 天分级告警 通过 Prometheus + cert_exporter 实现
回滚预案 保留上一版本证书,支持快速回切 轮换失败时能在 5 分钟内恢复
📌 关键原则:证书轮换策略的核心是“自动化 + 可回滚 + 可观测”。手动轮换证书在 10 节点以下集群尚可接受,但在 50 节点以上的生产集群中,必须使用 cert-manager、kubelet 证书轮换控制器等自动化工具。

下图展示了推荐的证书轮换自动化流程:

证书自动轮换流程 证书过期检测 签发新证书 部署新证书 验证证书有效性 重启依赖组件 监控证书状态 轮换完成

在实际操作中,证书轮换策略还需要考虑以下细节:

  • kubelet 证书轮换:K8s 1.8+ 支持 kubelet 证书自动轮换,需在 kubelet 配置中启用 RotateKubeletServerCertificate 和 RotateKubeletClientCertificate 特性。
  • 控制面证书轮换:使用 kubeadm 部署的集群可通过 kubeadm certs renew 命令轮换,但需注意 kubeconfig 文件也需要同步更新。
  • 证书存储安全:私钥必须加密存储,推荐使用 Kubernetes Secrets 或外部密钥管理服务(如 HashiCorp Vault)。
  • 证书吊销列表(CRL):对于高安全环境,应配置 CRL 分发点,支持证书即时吊销。
✅ 最佳实践:在集群初始化时即部署 cert-manager,配置 Certificate 资源对象,设置 renewBefore 为有效期剩余 30 天时自动续期。同时配置 Prometheus 告警规则,监控 certmanager_certificate_expiry_seconds 指标,确保证书过期前有足够时间响应。