3. 证书生命周期管理:有效期、签发机构、序列号与 SAN 配置
Kubernetes 集群的 TLS 证书是保障控制面通信安全的核心组件。证书生命周期管理不仅涉及证书的创建与轮换,更要求运维人员能够快速解读证书的四个关键属性:有效期、签发机构(CA)、序列号以及 SAN(Subject Alternative Name)。本节将逐一拆解这些属性在排障中的实际意义,并提供标准化的检查方法。
3.1 证书核心属性速查表
以下表格总结了四个核心属性的定义、常见问题及排障切入点:
| 属性 | 定义 | 常见问题 | 排障切入点 |
|---|---|---|---|
| 有效期 | 证书的生效时间(Not Before)与过期时间(Not After) | 证书过期导致 API Server 拒绝连接;kubelet 无法注册 | 检查剩余天数,对比集群时间同步状态 |
| 签发机构(CA) | 签发该证书的证书颁发机构(Issuer) | 自建 CA 与集群 CA 不匹配;中间 CA 链缺失 | 验证 Issuer 字段是否与集群根 CA 一致 |
| 序列号 | CA 分配给证书的唯一数字标识(Serial Number) | 证书轮换后序列号未更新;CRL 吊销检查失败 | 对比新旧证书序列号,确认轮换生效 |
| SAN 配置 | 证书允许的 DNS 名称、IP 地址或通配符域名 | 客户端访问 IP 不在 SAN 列表中;组件间 TLS 握手失败 | 检查 SAN 是否包含所有控制面端点与 Service IP |
3.2 有效期管理:时间窗口与轮换策略
Kubernetes 证书的有效期通常分为两类:
- 控制面证书(如 kube-apiserver、kube-controller-manager):默认 1 年,kubeadm 自 v1.20 起默认 1 年。
- kubelet 客户端证书:默认 1 年,可通过
--rotate-certificates启用自动轮换。
排障提示: 使用
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates 快速查看证书的 notBefore 和 notAfter。若剩余时间不足 30 天,应触发轮换流程。
证书轮换策略建议:
- 提前 90 天:通过监控告警(如 Prometheus + cert-manager)检查证书剩余有效期。
- 提前 30 天:执行手动或自动轮换,避免集群重启窗口冲突。
- 过期后:kube-apiserver 将拒绝所有使用过期证书的请求,导致集群完全不可用。
3.3 签发机构(CA)验证:信任链完整性
Kubernetes 集群通常使用自建 CA 签发所有组件证书。排障时需确认:
- Issuer 字段:所有证书的签发者必须指向同一个根 CA(如
kubernetes-ca)。 - CA 证书链:kubeconfig 中的
certificate-authority-data必须与签发证书的 CA 匹配。
常见错误: 使用不同 CA 签发 kube-apiserver 和 kubelet 证书,导致双向 TLS 验证失败。检查命令:
openssl verify -CAfile /etc/kubernetes/pki/ca.crt /etc/kubernetes/pki/apiserver.crt。
3.4 序列号:轮换生效的唯一标识
序列号是 CA 分配给每个证书的唯一数字。在证书轮换作业中,序列号用于:
- 确认轮换已执行:对比新旧证书的序列号,若相同则说明轮换未生效。
- 吊销检查:通过 CRL(证书吊销列表)或 OCSP 检查序列号是否被吊销。
查看序列号命令:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -serial
# 输出示例:serial=3A1B2C3D4E5F6A7B
3.5 SAN 配置:网络可达性的核心
SAN(Subject Alternative Name)定义了证书可以被哪些 DNS 名称或 IP 地址使用。Kubernetes 控制面证书必须包含以下 SAN:
- API Server 的 DNS 名称:如
kubernetes.default.svc.cluster.local、master-node。 - API Server 的 IP 地址:包括控制面节点 IP、Service Cluster IP(通常为
10.96.0.1)。 - 负载均衡器地址:如果使用外部负载均衡,需包含其 DNS 或 IP。
排障案例: 某集群 kubelet 无法连接 API Server,错误日志显示
x509: certificate is valid for 10.96.0.1, not 192.168.1.100。检查发现 apiserver 证书 SAN 缺少控制面节点 IP,重新签发后恢复。
查看 SAN 配置命令:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep -A 10 "Subject Alternative Name"
# 输出示例:
# X509v3 Subject Alternative Name:
# DNS:kubernetes, DNS:kubernetes.default.svc.cluster.local, DNS:master-node
# IP Address:10.96.0.1, IP Address:192.168.1.100
3.6 证书生命周期管理流程(SVG 图)
下图展示了证书从签发、验证、轮换到吊销的完整生命周期,以及各阶段的关键检查点:
3.7 证书属性检查清单(SVG 图)
以下结构图总结了证书排障时需逐一核对的属性及其关联关系:
3.8 常见排障场景与应对
| 场景 | 错误日志 | 根因 | 解决方案 |
|---|---|---|---|
| 证书过期 | x509: certificate has expired or is not yet valid |
证书 Not After 时间已过 | 重新签发证书并重启组件 |
| CA 不匹配 | x509: certificate signed by unknown authority |
签发 CA 与信任 CA 不一致 | 更新 kubeconfig 中的 CA 数据 |
| SAN 缺失 | x509: certificate is valid for A, not B |
访问地址不在 SAN 列表中 | 重新签发包含正确 SAN 的证书 |
| 序列号重复 | tls: serial number mismatch |
轮换后未更新证书文件 | 确认新证书序列号与旧证书不同 |
最佳实践: 在证书轮换作业中,建议使用
kubeadm certs renew 或 cert-manager 自动管理证书生命周期。每次轮换后,使用上述检查命令验证有效期、序列号和 SAN 配置,确保轮换生效且无遗漏。