2. K8s 证书体系概述:集群内证书类型与生命周期
Kubernetes 集群的安全通信依赖一套完整的 PKI(公钥基础设施)体系。集群内各组件之间通过 TLS 证书进行身份验证和通信加密。理解证书的类型、用途及生命周期,是进行证书轮换容量规划的前提。
2.1 集群内核心证书类型与用途
K8s 集群主要包含以下 5 类核心证书,分别服务于不同的控制平面组件。下表总结了各证书的签发对象、用途及常见路径:
| 证书名称 | 签发对象 | 核心用途 | 常见路径(kubeadm 部署) |
|---|---|---|---|
| apiserver 证书 | kube-apiserver | 对外提供 HTTPS 服务,验证客户端身份;与 etcd、kubelet 通信时作为服务端证书 | /etc/kubernetes/pki/apiserver.crt |
| kubelet 证书 | kubelet(每个节点) | kubelet 作为服务端时向 apiserver 证明身份;作为客户端时访问 apiserver | /var/lib/kubelet/pki/kubelet-client-current.pem |
| etcd 证书 | etcd 集群成员 | etcd 节点间 peer 通信;etcd 客户端(apiserver)访问 etcd 服务端 | /etc/kubernetes/pki/etcd/server.crt |
| controller-manager 证书 | kube-controller-manager | 以客户端身份访问 apiserver,用于签署 ServiceAccount 令牌等操作 | /etc/kubernetes/pki/controller-manager.conf |
| scheduler 证书 | kube-scheduler | 以客户端身份访问 apiserver,获取 Pod 调度所需资源信息 | /etc/kubernetes/pki/scheduler.conf |
容量规划提示: 证书轮换时,apiserver 和 etcd 证书的重新签发会触发控制平面组件的重启或重载,直接影响 API 可用性和 etcd 租约续期。在规划资源预留时,需为这两个组件的证书轮换分配额外的 CPU 和内存突发容量。
2.2 证书生命周期与默认有效期
K8s 证书的有效期由签发时指定的 --duration 参数决定。不同部署工具和证书类型的默认有效期差异较大,直接影响轮换频率和资源消耗。
- kubeadm 部署(v1.15+): 控制平面证书默认有效期为 1 年(365 天)。kubelet 客户端证书默认有效期为 1 年,但可通过
RotateKubeletClientCertificate特性门控实现自动轮换。 - kops / KubeOne 等工具: 通常默认 1 年,部分工具支持自定义有效期。
- 自建 CA 手动签发: 有效期由管理员指定,常见设置为 1 年、2 年或 5 年。
- etcd 证书: 默认有效期通常与 apiserver 证书一致(1 年),但 etcd 集群的 peer 证书和 client 证书可能使用不同的 CA。
关键风险: 证书过期会导致组件间通信失败。apiserver 证书过期将导致整个 API 不可用;etcd 证书过期会导致 etcd 集群分裂或数据读写失败。务必在证书到期前完成轮换,并预留足够的缓冲时间(建议至少 30 天)。
2.3 证书体系架构关系图
下图展示了 K8s 集群内各组件与证书之间的依赖关系,以及证书轮换时可能影响的服务链路:
2.4 证书轮换的关键时间节点
证书轮换作业的容量规划需要关注以下时间节点,以确保在证书到期前完成操作:
- T - 90 天: 启动证书到期监控告警,检查所有证书的剩余有效期。
- T - 60 天: 制定轮换计划,评估集群负载窗口,预留维护时间槽。
- T - 30 天: 执行非生产环境证书轮换演练,验证自动化脚本和回滚方案。
- T - 7 天: 在生产环境执行证书轮换,优先处理 apiserver 和 etcd 证书。
- T - 0 天: 证书到期,集群可能进入不可用状态。务必在此之前完成轮换。
容量规划要点: 证书轮换期间,apiserver 重启会导致 API 请求排队或超时,建议在低峰期操作并预留 20%-30% 的 API 请求处理能力余量。etcd 证书轮换时,etcd 成员重启会触发 leader 选举,建议预留 1 个额外的 etcd 节点资源以维持 quorum。