上一篇 下一篇 分享链接 返回 返回顶部

K8s集群kubelet证书过期节点失联更新指南

发布人: 发布时间:18小时前 阅读量:5

问题现象:节点状态变为NotReady

Kubernetes集群运行一段时间后,部分工作节点突然从集群中失联,通过kubectl get nodes查看节点状态为NotReady,且节点上kubelet日志持续刷新类似错误:

Unable to authenticate as user "system:node:xxx" (get nodes xxx)

这种情况通常与kubelet客户端证书过期有关。Kubelet默认通过TLS Bootstrap机制向API Server申请证书,证书有效期通常为1年。证书过期后,kubelet与API Server的通信认证失败,导致节点失联。

原因分析:证书轮换未生效

K8s从1.8版本起支持证书自动轮换,但需要满足两个条件:

  • kubelet启动参数中启用--rotate-certificates=true
  • 集群部署了CertificateApprover或相关控制器自动批准CSR

若集群关闭了自动轮换,或证书已超过轮换窗口,kubelet无法自行更新证书。常见的诱因还包括:证书文件权限问题、/etc/kubernetes/pki目录被错误修改、或节点时间偏差过大。

处理步骤:手动更新kubelet证书

1. 确认证书过期状态

在故障节点上执行以下命令查看证书有效期:

openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

若输出显示notAfter时间早于当前时间,则证书已过期。

2. 删除旧证书并触发重新申请

备份并删除kubelet客户端证书和私钥:

mv /var/lib/kubelet/pki/kubelet-client-current.pem /var/lib/kubelet/pki/kubelet-client-current.pem.bak$(date +%s)
mv /var/lib/kubelet/pki/kubelet-client-current.key /var/lib/kubelet/pki/kubelet-client-current.key.bak$(date +%s)

重启kubelet服务,使其重新执行Bootstrap流程:

systemctl restart kubelet

3. 批准CSR请求

在控制平面节点查看待批准的CSR(CertificateSigningRequest):

kubectl get csr

找到由该节点发起的Pending状态的CSR,批准它:

kubectl certificate approve 

若有多个节点同时失联,可批量批准所有Pending CSR:

kubectl get csr -o name | xargs -r kubectl certificate approve

4. 验证节点恢复

等待约30秒后,检查节点状态:

kubectl get nodes

节点应变为Ready。同时在新节点上再次检查证书有效期,确认已更新。

预防措施:配置证书自动轮换

  • 确保kubelet配置文件中包含rotateCertificates: true,并设置serverTLSBootstrap: true(如使用kubeadm部署)。
  • 部署RBAC授权,使kubelet有权创建CSR并自动批准system:nodes组的CSR请求。参考官方配置示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: certificate-rotation
rules:
- apiGroups: ["certificates.k8s.io"]
  resources: ["certificatesigningrequests/selfnodeclient"]
  verbs: ["create"]
  • 设置监控告警:巡检/var/lib/kubelet/pki/kubelet-client-current.pem的到期时间,或使用Prometheus的kubelet_certificate_manager_client_ttl_seconds指标。建议在证书到期前30天触发预警。
  • 对于生产环境,建议使用cert-manager或定制控制器统一管理节点证书,避免单点故障。

结语

kubelet证书过期属于K8s集群常见运维事故。通过手动更新可快速恢复节点,但长期应配置自动轮换和监控机制。每次集群升级或网络调整后,也要留意节点证书状态,避免基础组件静默失效。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com