2. Kubernetes 证书体系概述:CA证书、服务端证书、客户端证书、kubelet证书的作用与生命周期
Kubernetes 集群的安全通信完全建立在 双向 TLS(mTLS) 证书体系之上。理解各类证书的角色、签发关系与生命周期,是诊断“证书轮换导致 kubelet 心跳上报失败”这类故障的前提。本节从 PKI 信任链出发,逐一拆解 CA 证书、服务端证书、客户端证书以及 kubelet 专用证书的作用与生命周期。
2.1 证书体系架构总览
Kubernetes 采用两级 PKI 架构:根 CA 自签名为信任锚点,组件证书 由根 CA 或中间 CA 签发。所有组件之间的通信均需验证对端证书的合法性,确保集群内无中间人攻击风险。
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 证书的生命周期管理包含以下关键阶段:
- 初始签发: 节点加入集群时,kubelet 通过 TLS 引导(TLS Bootstrapping)向 API Server 发起 CSR,由集群 CA 签发初始证书,有效期通常为 1 年。
- 自动轮换(推荐): kubelet 内置证书轮换控制器,在证书剩余有效期不足 80% 时自动发起 CSR 续期。轮换后的新证书会覆盖旧证书文件,kubelet 自动重载。
- 手动轮换: 当自动轮换关闭或 CA 证书变更时,运维人员需手动删除旧证书并重启 kubelet,触发重新签发。
- 证书过期: 若轮换失败或未配置自动轮换,证书到期后 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" 可快速查看证书有效期。