k8s证书理论知识之/etc/kubernetes/pki/ 和/var/lib/kubelet/pki/的区别
注:本文件由deepseek生成,由博主整理
一.提取关键点:证书超时检查
kubeadm certs check-expiration
命令来检查 /etc/kubernetes/pki/
下证书的过期时间
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep -A 2 Validity 命令来检查/var/lib/kubelet/pki/ 下的证书过期时间
二.理论讲解
这是一个非常核心且重要的问题,理解了这两个目录的区别,就对 Kubernetes 的证书体系有了大半的了解。
简单来说,这两个目录存放的证书角色、用途和管理方式完全不同。你可以这样记忆:
/etc/kubernetes/pki/
:是集群的“身份证总局”,存放着签发所有证书的根证书(CA) 和核心服务(如 API Server) 的身份证书。/var/lib/kubelet/pki/
:是每个工作节点的“个人身份证夹”,存放着该节点上 kubelet 进程用于身份认证的客户端证书。
下面我们用一张图来更直观地展示它们的核心区别:
代码
📁 /etc/kubernetes/pki/
- 集群的证书权威中心(CA)
这个目录是控制平面(Control Plane)节点的核心密钥库,包含了整个集群的信任根基。
包含的文件示例:
ca.crt
和ca.key
:集群的根证书和私钥。这是最重要的文件,整个集群的证书体系都基于它建立。如果它丢失或泄露,集群的安全性将受到致命打击。apiserver.crt
和apiserver.key
:API Server 的服务端证书,用于对外提供 HTTPS 服务。apiserver-kubelet-client.crt
和apiserver-kubelet-client.key
:API Server 访问 kubelet 时使用的客户端证书。front-proxy-ca.crt
:用于前端代理的 CA 证书。sa.pub
和sa.key
:用于签署 ServiceAccount tokens 的密钥对(注意,它们不是证书)。etcd/
目录:包含 etcd 集群相关的证书(etcd/server.crt
,etcd/peer.crt
,etcd/healthcheck-client.crt
等)。
核心特点:
集群级别:所有节点都信任这里的 CA 证书。
手动管理:通常通过
kubeadm
工具进行创建和更新(如kubeadm init
,kubeadm certs renew
)。不会自动轮换:这里的证书(除了 SA 密钥)有固定有效期(通常为 1 年),需要管理员手动干预更新。
位置固定:只在 Master 节点上存在(或在高可用集群的多个 Master 节点之间同步)。
📁 /var/lib/kubelet/pki/
- Kubelet 的客户端证书库
这个目录存在于集群中的每个节点(包括 Master 和 Worker) 上,是 kubelet 进程维护自己身份的“私人钱包”。
包含的文件示例:
kubelet-client-<timestamp>.pem
或kubelet-client-current.pem
:这是最重要的文件。它是一个符号链接,指向 kubelet 当前使用的客户端证书和私钥(PEM 格式合并)。kubelet 使用这个证书向 API Server 证明自己的身份,从而拥有操作该节点资源的权限。kubelet.crt
和kubelet.key
:kubelet 的服务端证书。当 API Server(或其他组件)需要访问 kubelet 的指标接口或进行 exec/logs 操作时,kubelet 会使用这个证书来提供 TLS 服务。
核心特点:
节点级别:每个节点都有自己的、独一无二的 kubelet 客户端证书。
自动管理:kubelet 会自动处理其客户端证书的申请和轮换。
首次启动:如果该目录为空,kubelet 会向 API Server 发起一个证书签名请求(CSR)。
自动轮换:kubelet 会在证书到期前自动申请新的证书,并更新
kubelet-client-current.pem
的链接指向新证书。这是 Kubernetes 「证书轮换」 功能的核心体现。
无需手动干预:在集群正常工作的情况下,管理员完全不需要手动管理这个目录下的文件。
位置分散:在每个节点上都有。
三.总结与对比表
特性 | /etc/kubernetes/pki/ | /var/lib/kubelet/pki/ |
---|---|---|
角色 | 证书颁发机构(CA) 和核心服务身份 | Kubelet 进程的身份凭证 |
主要内容 | 根证书(ca.crt )、API Server 证书、etcd 证书等 | Kubelet 的客户端证书和服务端证书 |
管理方式 | 手动管理(通过 kubeadm ) | 自动管理(由 kubelet 自动申请和轮换) |
证书轮换 | 手动执行 kubeadm certs renew | 全自动轮换 |
存在范围 | 仅控制平面节点 | 所有节点(Master 和 Worker) |
重要性 | 集群信任根,丢失需重建集群 | 节点身份,丢失可通过重启 kubelet 自动恢复 |
四.💡 实践提示
当你的
kubectl
命令报错x509: certificate has expired or is not yet valid
时,首先检查/etc/kubernetes/pki/
下的证书是否过期,因为这里的手动管理证书是过期的高发区。通常情况下,你不应该手动修改或删除
/var/lib/kubelet/pki/
下的文件。如果怀疑这里的证书有问题,最简单的办法是重启节点上的 kubelet 服务(systemctl restart kubelet
),它会自动处理证书的恢复。定期检查:可以使用
kubeadm certs check-expiration
命令来检查/etc/kubernetes/pki/
下证书的过期时间,做到心中有数,提前规划更新操作。