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 等)。

核心特点:

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

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

相关推荐
小楼昨夜又东风1264 小时前
一文理清K8s PVC挂载完整流程
容器·rpc·kubernetes
阿里云云原生5 小时前
AgentLoop 审计:如何让企业级 Dify 应用的风险看得见、查得清
云原生·agent
Coisinier5 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
小猿姐5 小时前
KubeBlocks Enterprise v2.3 发布!
redis·kubernetes·aiops
阿里云云原生7 小时前
云栖实录丨云监控 2.0 让 Agent 看懂系统,也能看懂 Agent
云原生
东风微鸣9 小时前
如何发现 K8s 集群里的无用资源?
云原生·容器·kubernetes
恒拓高科WorkPlus9 小时前
私有化IM技术选型:商业平台、开源IM和IM PaaS怎么选?
云原生·开源·paas
flytalei9 小时前
从YAML到Nginx服务访问:动手理解 Kubernetes Pod、Deployment 与 Service
运维·nginx·kubernetes
木雷坞10 小时前
Docker Compose部署Docmost:数据库、附件持久化与首次协作
数据库·docker·容器
cg.family10 小时前
K8S:scale 与 delete pod 核心区别
运维·docker·容器