4. 证书生命周期管理核心概念
在 Kubernetes 集群中,证书不是“配好就完事”的静态文件,而是一个有明确生命周期的动态凭据。理解生命周期,才能回答一个关键问题:什么时候该让系统自动处理,什么时候必须人工介入。本节围绕签发、续期、轮换、吊销、过期、宽限期六个阶段展开,并讨论自动化与人工干预的边界。
一、六个阶段各自解决什么问题
签发(Issuance)是证书生命的起点:由 CA(证书颁发机构)根据 CSR(证书签名请求)签发证书,确定主体、SAN、有效期、密钥用途等。在 Kubernetes 中,签发者可能是集群内置的 kubernetes.io/kube-apiserver-client、外部 CA(如 Vault、cert-manager 对接的 ACME/私有 CA),也可能是自建 CA。
续期(Renewal)是在证书尚未过期前,用同一主体重新签发一张新证书,通常保持私钥不变或重新生成密钥。续期的触发点一般设在有效期的 1/3 或 1/2 处,例如 90 天有效期的证书在剩余 30 天时续期。
轮换(Rotation)比续期更彻底:不仅换证书,还换私钥,甚至更换 CA。轮换常用于密钥泄露、CA 更替、合规要求或算法升级(如 RSA 2048 换 ECDSA P-256)。轮换需要保证新旧凭据在切换窗口内都能被接受,否则会造成服务中断。
吊销(Revocation)是在证书到期前主动使其失效,常见于私钥泄露、人员离职、节点下线。吊销依赖 CRL(证书吊销列表)或 OCSP(在线证书状态协议),但 Kubernetes 组件对 CRL/OCSP 的支持有限,因此吊销更多是“标记失效 + 尽快轮换”的组合动作。
过期(Expiration)是证书超过 notAfter 时间后自然失效。过期不会自动恢复,必须重新签发。过期是集群中最常见的证书故障之一,典型表现是 x509: certificate has expired or is not yet valid。
宽限期(Grace Period)是过期或轮换前后的容错窗口。例如 kubelet 证书轮换时,旧证书在过期后仍可短暂使用,给组件留出重新加载新证书的时间。宽限期不是“无限延期”,而是有限的时间缓冲。
二、宽限期与轮换窗口的配合
宽限期和轮换窗口经常被混淆。轮换窗口是“新旧凭据同时被接受”的时间段,目的是让所有组件完成切换;宽限期是“旧凭据过期后仍被容忍”的时间段,目的是防止因时钟偏差或加载延迟导致瞬间中断。两者可以重叠,但语义不同。
以 kubelet 客户端证书为例:默认有效期 1 年,kubelet 在证书剩余 20% 左右时自动发起续期。如果续期失败,旧证书过期后 kubelet 将无法与 API Server 通信,节点变为 NotReady。此时宽限期并不能拯救它,因为 kubelet 没有可用的新证书。因此宽限期必须配合“提前续期 + 失败告警”才有意义。
三、自动化与人工干预的权衡
自动化的优势是及时、一致、可重复。Kubernetes 内置的证书轮换、cert-manager 的自动续期、kubeadm 的证书管理都属于这一类。但自动化并非万能,以下场景通常需要人工介入:
- CA 根证书轮换:涉及所有组件信任链,必须规划切换顺序和回滚方案。
- 吊销与安全事件:需要确认影响范围、决定是否立即轮换、通知相关方。
- 外部 CA 或硬件签名:签发流程可能涉及审批、审计或 HSM 操作,无法完全自动。
- 跨集群或跨环境证书:信任关系复杂,自动续期可能引入不一致。
一个实用的原则是:常规续期尽量自动化,根 CA 和吊销相关操作保留人工审批。自动化负责“按时换”,人工负责“判断该不该换、换的范围有多大”。
四、一个可参考的证书生命周期检查清单
以下清单可用于日常巡检或故障排查,字段和阈值可根据集群实际情况调整。示例中的天数为合理假设,不代表任何特定集群的实测值。
| 检查项 | 示例阈值/条件 | 观察方式 | 异常处理 |
|---|---|---|---|
| API Server 服务端证书剩余有效期 | < 30 天 | openssl x509 -in apiserver.crt -noout -enddate |
触发续期或轮换 |
| kubelet 客户端证书剩余有效期 | < 20% 总有效期 | 查看 kubelet 日志中的轮换记录 | 检查 kubelet 与 API Server 连通性 |
| CA 根证书剩余有效期 | < 180 天 | 检查 CA 证书 notAfter | 制定根 CA 轮换计划 |
| 是否存在已吊销但仍在使用的证书 | CRL/OCSP 标记为 revoked | 审计日志 + 证书序列号比对 | 立即轮换并排查泄露原因 |
| 自动续期任务是否成功 | 最近一次续期失败 | cert-manager CertificateRequest 状态 | 人工介入排查签发链 |
五、从概念到操作:一次续期的典型判断过程
假设某集群 API Server 证书有效期为 365 天,当前剩余 28 天。运维人员首先确认证书主体和 SAN 是否仍然正确,然后检查是否由 kubeadm 管理。如果是,执行 kubeadm certs renew apiserver 并重启 kube-apiserver 静态 Pod;如果不是,则用原 CSR 模板重新签发并替换证书文件,最后通过 openssl s_client -connect <apiserver>:6443 验证新证书已生效。整个过程的关键不是命令本身,而是判断“该续期还是该轮换”:如果私钥没有泄露风险,续期即可;如果存在安全疑虑,应直接轮换并更换私钥。
证书生命周期管理的本质,是在“及时性”和“可控性”之间找到平衡。自动化解决及时性,人工干预解决可控性。理解签发、续期、轮换、吊销、过期、宽限期各自的语义和边界,才能在故障发生前做出正确判断。