2. Kubernetes 证书体系:CA根证书、服务端证书、客户端证书、kubeconfig文件中的证书、证书有效期与轮换触发条件
Kubernetes 集群的安全通信建立在 双向 TLS(mTLS) 证书体系之上。理解证书的层级结构、存储位置和生命周期,是制定调度器证书轮换与节点排空策略的前提。本节将拆解证书体系的五个核心要素。
2.1 证书体系分层架构
Kubernetes 采用 单根 CA(Certificate Authority) 或 双 CA 架构。生产环境推荐双 CA 架构:一个用于集群内部组件通信,另一个用于客户端认证(如 kubelet 与 API Server 之间的 TLS 引导)。
2.2 证书类型与用途对比
| 证书类型 | 签发对象 | 典型文件路径 | 验证方向 | 轮换影响范围 |
|---|---|---|---|---|
| CA 根证书 | 集群自身 | /etc/kubernetes/pki/ca.crt |
信任锚点,验证所有下级证书 | 全集群重建信任链 |
| API Server 服务端证书 | API Server | /etc/kubernetes/pki/apiserver.crt |
客户端 → 服务端 | 所有 kubectl / 组件连接中断 |
| kubelet 服务端证书 | kubelet | /var/lib/kubelet/pki/kubelet.crt |
API Server → kubelet | kubectl logs/exec/attach 失败 |
| kube-scheduler 客户端证书 | scheduler | /etc/kubernetes/pki/scheduler.crt |
scheduler → API Server | 调度器无法 watch/list Pod 资源 |
| kubeconfig 内嵌证书 | 用户 / 组件 | ~/.kube/config 或 /etc/kubernetes/scheduler.conf |
双向验证 | 对应用户或组件认证失败 |
2.3 kubeconfig 文件中的证书结构
kubeconfig 文件是 Kubernetes 客户端访问集群的“通行证”。它包含三个关键证书字段:
- certificate-authority-data:CA 根证书的 Base64 编码,用于验证服务端身份。
- client-certificate-data:客户端证书的 Base64 编码,用于向 API Server 证明身份。
- client-key-data:客户端私钥的 Base64 编码,与客户端证书配对使用。
调度器 kubeconfig 示例(scheduler.conf):
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRV... # CA 根证书
server: https://192.168.1.100:6443
name: kubernetes
users:
- name: system:kube-scheduler
user:
client-certificate-data: LS0tLS1CRUdJTiBDRV... # 调度器客户端证书
client-key-data: LS0tLS1CRUdJTiBSU0EgUF... # 调度器客户端私钥
contexts:
- context:
cluster: kubernetes
user: system:kube-scheduler
name: scheduler-context
current-context: scheduler-context
2.4 证书有效期与轮换触发条件
Kubernetes 证书的有效期因组件和部署方式而异。以下是常见的有效期配置及轮换触发条件:
| 证书类型 | 默认有效期 | 轮换触发条件 | 检查命令 |
|---|---|---|---|
| CA 根证书 | 10 年 | 到期前 180 天(kubeadm 自动检查) | kubeadm certs check-expiration |
| API Server 证书 | 1 年 | 到期前 90 天 / 集群升级时 | openssl x509 -in apiserver.crt -noout -dates |
| kubelet 证书 | 1 年 | 到期前 30 天(kubelet 自动轮换) | kubeadm certs check-expiration |
| kube-scheduler 证书 | 1 年 | 到期前 90 天 / 手动触发轮换 | kubeadm certs renew scheduler |
| kubeconfig 内嵌证书 | 1 年 | 证书到期 / API Server CA 变更 | kubectl config view --raw |
⚠️ 关键风险提示: 调度器证书过期后,kube-scheduler 将无法向 API Server 发起 watch 请求,导致 Pod 调度停滞。此时即使节点排空完成,新 Pod 也无法分配到其他节点。因此,调度器证书轮换必须在节点排空 之前 完成。
2.5 证书轮换的三种触发模式
- 时间触发(Time-based):证书到期前 N 天自动触发轮换。kubeadm 默认在证书到期前 90 天发出告警。
- 事件触发(Event-based):集群升级、节点重启、CA 根证书变更等事件触发证书重新签发。
- 手动触发(Manual):运维人员通过
kubeadm certs renew命令手动轮换指定证书。
2.6 证书轮换对节点排空的影响
💡 最佳实践: 在节点排空操作前,务必执行以下证书检查清单:
- 使用
kubeadm certs check-expiration检查所有组件证书有效期。 - 确认 kube-scheduler 证书剩余有效期 > 30 天(避免排空期间证书过期)。
- 如果证书即将到期,先执行
kubeadm certs renew scheduler并重启 scheduler Pod。 - 验证调度器恢复健康:
kubectl get pods -n kube-system | grep scheduler状态为 Running。