2. Kubernetes 证书体系概述:CA证书、服务端证书、客户端证书、kubelet证书的作用与生命周期

Kubernetes 集群的安全通信完全建立在 双向 TLS(mTLS) 证书体系之上。理解各类证书的角色、签发关系与生命周期,是诊断“证书轮换导致 kubelet 心跳上报失败”这类故障的前提。本节从 PKI 信任链出发,逐一拆解 CA 证书、服务端证书、客户端证书以及 kubelet 专用证书的作用与生命周期。

2.1 证书体系架构总览

Kubernetes 采用两级 PKI 架构:根 CA 自签名为信任锚点,组件证书 由根 CA 或中间 CA 签发。所有组件之间的通信均需验证对端证书的合法性,确保集群内无中间人攻击风险。

Kubernetes 证书体系架构图 集群根 CA(自签名) 中间 CA(可选) 服务端证书 kube-apiserver kube-controller-manager 客户端证书 kube-scheduler kube-controller-manager kubelet 证书 kubelet 服务端证书 kubelet 客户端证书 说明: 1. 根 CA 自签名,是集群信任的锚点;中间 CA 可选,用于隔离不同组件证书的签发。 2. 每个组件同时持有服务端证书(用于接收请求)和客户端证书(用于发起请求)。

2.2 各类证书的作用与生命周期

下表汇总了 Kubernetes 集群中核心证书的类型、用途、默认有效期及签发方式,帮助运维人员快速建立证书全景认知。

证书类型 持有组件 核心作用 默认有效期 签发方式
根 CA 证书 所有节点信任存储 签发所有组件证书,作为信任锚点 10 年(kubeadm 默认) 自签名
kube-apiserver 服务端证书 kube-apiserver 加密 API 请求,验证 API Server 身份 1 年 CA 签发
kube-controller-manager 客户端证书 kube-controller-manager 向 API Server 发起请求时证明身份 1 年 CA 签发
kube-scheduler 客户端证书 kube-scheduler 向 API Server 发起请求时证明身份 1 年 CA 签发
kubelet 服务端证书 kubelet kube-apiserver 访问 kubelet 时验证 kubelet 身份 1 年(可自动轮换) CA 签发 / kubelet TLS 启动
kubelet 客户端证书 kubelet kubelet 向 API Server 发起心跳、上报状态时证明身份 1 年(可自动轮换) CA 签发 / kubelet TLS 启动
kube-proxy 客户端证书 kube-proxy 向 API Server 发起请求时证明身份 1 年 CA 签发
关键认知: kubelet 是集群中唯一同时持有 服务端证书 和 客户端证书 的工作节点组件。服务端证书用于响应 API Server 的请求(如 kubectl exec、kubectl logs),客户端证书用于主动向 API Server 发起心跳上报。两者任一过期或轮换失败,都会导致节点状态异常。

2.3 kubelet 证书的独特性与生命周期管理

kubelet 证书在 Kubernetes 证书体系中最为特殊,因为它直接关系到节点心跳上报和节点状态维护。kubelet 证书的生命周期管理包含以下关键阶段:

  1. 初始签发: 节点加入集群时,kubelet 通过 TLS 引导(TLS Bootstrapping)向 API Server 发起 CSR,由集群 CA 签发初始证书,有效期通常为 1 年。
  2. 自动轮换(推荐): kubelet 内置证书轮换控制器,在证书剩余有效期不足 80% 时自动发起 CSR 续期。轮换后的新证书会覆盖旧证书文件,kubelet 自动重载。
  3. 手动轮换: 当自动轮换关闭或 CA 证书变更时,运维人员需手动删除旧证书并重启 kubelet,触发重新签发。
  4. 证书过期: 若轮换失败或未配置自动轮换,证书到期后 kubelet 心跳上报将被 API Server 拒绝,节点状态变为 NotReady。
kubelet 证书生命周期流程图 ① 初始签发 TLS 引导 / CSR ② 正常运行 心跳上报正常 ③ 自动轮换 剩余 < 80% 有效期 ④ 轮换成功 新证书生效 ⑤ 轮换失败 CSR 被拒绝 / 网络异常 ⑥ 证书过期 心跳上报失败 ⑦ 手动恢复 删除证书 / 重启 kubelet 故障触发路径: 自动轮换失败(CSR 被拒绝、CA 不可用、网络中断)→ 证书过期 → kubelet 心跳上报被 API Server 拒绝 → 节点状态变为 NotReady。

2.4 证书轮换的关键配置参数

kubelet 证书自动轮换由以下核心参数控制,运维人员需确保这些配置正确:

参数名 所属组件 默认值 作用说明
--rotate-certificates kubelet true 启用 kubelet 客户端证书自动轮换
--rotate-server-certificates kubelet false 启用 kubelet 服务端证书自动轮换(需手动开启)
--cert-dir kubelet /var/lib/kubelet/pki kubelet 证书和私钥存储目录
ClusterSigningDuration kube-controller-manager 8760h(1年) CA 签发证书的有效期
ClusterSigningCertFile kube-controller-manager /etc/kubernetes/pki/ca.crt CA 证书文件路径
ClusterSigningKeyFile kube-controller-manager /etc/kubernetes/pki/ca.key CA 私钥文件路径
常见陷阱: 很多运维人员只关注 kubelet 客户端证书的自动轮换,却忽略了 --rotate-server-certificates 默认关闭。当 kubelet 服务端证书过期时,kubectl exec、kubectl logs 等操作会失败,但节点心跳上报可能仍然正常,造成“部分功能异常”的隐蔽故障。

2.5 证书文件路径速查表

以下为 kubeadm 部署集群的默认证书路径,运维人员在排查证书相关故障时应优先检查这些文件:

文件路径 所属组件 证书类型
/etc/kubernetes/pki/ca.crt 所有组件 根 CA 证书(公钥)
/etc/kubernetes/pki/ca.key 控制平面节点 根 CA 私钥
/etc/kubernetes/pki/apiserver.crt kube-apiserver API Server 服务端证书
/etc/kubernetes/pki/apiserver.key kube-apiserver API Server 服务端私钥
/var/lib/kubelet/pki/kubelet-client-current.pem kubelet kubelet 客户端证书(符号链接)
/var/lib/kubelet/pki/kubelet-server-current.pem kubelet kubelet 服务端证书(符号链接)
/var/lib/kubelet/pki/kubelet.crt kubelet kubelet 旧版证书(自动轮换前)
排查要点: 当怀疑证书轮换导致心跳上报失败时,应首先检查 /var/lib/kubelet/pki/ 目录下的证书文件是否存在、是否过期,以及符号链接 kubelet-client-current.pem 是否指向有效的证书文件。使用 openssl x509 -in <证书文件> -text -noout | grep -E "Not Before|Not After" 可快速查看证书有效期。