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 天,应触发轮换流程。

证书轮换策略建议:

  1. 提前 90 天:通过监控告警(如 Prometheus + cert-manager)检查证书剩余有效期。
  2. 提前 30 天:执行手动或自动轮换,避免集群重启窗口冲突。
  3. 过期后: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 图)

下图展示了证书从签发、验证、轮换到吊销的完整生命周期,以及各阶段的关键检查点:

证书生命周期管理流程 证书生命周期管理流程 1. 证书签发 2. 部署与验证 3. 有效期监控 4. 证书轮换 5. 证书吊销 关键检查点: • 签发时:确认 SAN 包含所有控制面端点,序列号唯一 • 监控时:剩余有效期 < 30 天触发告警,检查 CA 链完整性

3.7 证书属性检查清单(SVG 图)

以下结构图总结了证书排障时需逐一核对的属性及其关联关系:

证书属性检查清单 证书属性检查清单 TLS 证书 有效期 签发机构 序列号 SAN 配置 排障检查命令: • 有效期:openssl x509 -in cert.crt -noout -dates • 签发机构:openssl x509 -in cert.crt -noout -issuer • 序列号:openssl x509 -in cert.crt -noout -serial • SAN:openssl x509 -in cert.crt -noout -text | grep -A 10 "Subject Alternative Name"

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 配置,确保轮换生效且无遗漏。