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.crtca.key集群的根证书和私钥。这是最重要的文件,整个集群的证书体系都基于它建立。如果它丢失或泄露,集群的安全性将受到致命打击。

  • apiserver.crtapiserver.key:API Server 的服务端证书,用于对外提供 HTTPS 服务。

  • apiserver-kubelet-client.crtapiserver-kubelet-client.key:API Server 访问 kubelet 时使用的客户端证书。

  • front-proxy-ca.crt:用于前端代理的 CA 证书。

  • sa.pubsa.key:用于签署 ServiceAccount tokens 的密钥对(注意,它们不是证书)。

  • etcd/ 目录 :包含 etcd 集群相关的证书(etcd/server.crt, etcd/peer.crt, etcd/healthcheck-client.crt 等)。

核心特点:

  1. 集群级别:所有节点都信任这里的 CA 证书。

  2. 手动管理 :通常通过 kubeadm 工具进行创建和更新(如 kubeadm init, kubeadm certs renew)。

  3. 不会自动轮换:这里的证书(除了 SA 密钥)有固定有效期(通常为 1 年),需要管理员手动干预更新。

  4. 位置固定:只在 Master 节点上存在(或在高可用集群的多个 Master 节点之间同步)。


📁 /var/lib/kubelet/pki/ - Kubelet 的客户端证书库

这个目录存在于集群中的每个节点(包括 Master 和 Worker) 上,是 kubelet 进程维护自己身份的"私人钱包"。

包含的文件示例:

  • kubelet-client-<timestamp>.pemkubelet-client-current.pem :这是最重要的文件 。它是一个符号链接,指向 kubelet 当前使用的客户端证书和私钥(PEM 格式合并)。kubelet 使用这个证书向 API Server 证明自己的身份,从而拥有操作该节点资源的权限。

  • kubelet.crtkubelet.key :kubelet 的服务端证书。当 API Server(或其他组件)需要访问 kubelet 的指标接口或进行 exec/logs 操作时,kubelet 会使用这个证书来提供 TLS 服务。

核心特点:

  1. 节点级别:每个节点都有自己的、独一无二的 kubelet 客户端证书。

  2. 自动管理 :kubelet 会自动处理其客户端证书的申请和轮换

    • 首次启动:如果该目录为空,kubelet 会向 API Server 发起一个证书签名请求(CSR)。

    • 自动轮换 :kubelet 会在证书到期前自动申请新的证书,并更新 kubelet-client-current.pem 的链接指向新证书。这是 Kubernetes 「证书轮换」 功能的核心体现。

  3. 无需手动干预:在集群正常工作的情况下,管理员完全不需要手动管理这个目录下的文件。

  4. 位置分散:在每个节点上都有。


三.总结与对比表

特性 /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/ 下证书的过期时间,做到心中有数,提前规划更新操作。

相关推荐
Nazi63 小时前
sealos部署k8s
运维·kubernetes·k8s
To_再飞行3 小时前
K8s访问控制(一)
云原生·容器·kubernetes
虚伪的空想家3 小时前
K8S的Pod为什么可以解析访问集群之外的域名地址
云原生·容器·kubernetes·dns·域名解析·pod·coredns
❀͜͡傀儡师3 小时前
二进制安装Kubernetes(k8s)v1.34.0
云原生·容器·kubernetes
Zs05093 小时前
k8s基础练习环境搭建
云原生·容器·kubernetes
栗子~~3 小时前
Kubernetes(k8s) po 配置持久化挂载(nfs)
云原生·容器·kubernetes
努力打怪升级3 小时前
容器学习day05_k8s(二)
学习·容器·kubernetes
哈里谢顿4 小时前
Kubernetes Cluster(K8s 集群)介绍
kubernetes
哈里谢顿4 小时前
Kubernetes 部署 OpenStack 详细指南
kubernetes