2. Kubernetes 证书体系:CA根证书、服务端证书、客户端证书、kubeconfig文件中的证书、证书有效期与轮换触发条件

Kubernetes 集群的安全通信建立在 双向 TLS(mTLS) 证书体系之上。理解证书的层级结构、存储位置和生命周期,是制定调度器证书轮换与节点排空策略的前提。本节将拆解证书体系的五个核心要素。

2.1 证书体系分层架构

Kubernetes 采用 单根 CA(Certificate Authority) 或 双 CA 架构。生产环境推荐双 CA 架构:一个用于集群内部组件通信,另一个用于客户端认证(如 kubelet 与 API Server 之间的 TLS 引导)。

Kubernetes 证书体系分层架构 根 CA 证书(Cluster CA) 中间 CA(可选,用于隔离) 服务端证书 API Server 证书 kubelet 服务端证书 etcd 服务端证书 客户端证书 kube-controller-manager kube-scheduler kubelet 客户端证书 kubeconfig 文件中的证书(用户/管理员/组件)

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 证书轮换的三种触发模式

  1. 时间触发(Time-based):证书到期前 N 天自动触发轮换。kubeadm 默认在证书到期前 90 天发出告警。
  2. 事件触发(Event-based):集群升级、节点重启、CA 根证书变更等事件触发证书重新签发。
  3. 手动触发(Manual):运维人员通过 kubeadm certs renew 命令手动轮换指定证书。
证书轮换触发条件与决策流程 时间触发(到期前 N 天) 事件触发(升级/重启) 手动触发(kubeadm renew) 检查证书剩余有效期 执行证书轮换 → 重启组件

2.6 证书轮换对节点排空的影响

💡 最佳实践: 在节点排空操作前,务必执行以下证书检查清单:

  1. 使用 kubeadm certs check-expiration 检查所有组件证书有效期。
  2. 确认 kube-scheduler 证书剩余有效期 > 30 天(避免排空期间证书过期)。
  3. 如果证书即将到期,先执行 kubeadm certs renew scheduler 并重启 scheduler Pod。
  4. 验证调度器恢复健康:kubectl get pods -n kube-system | grep scheduler 状态为 Running。