在 Kubernetes 1.24 中,默认的证书有效期是一年。如果证书过期,会导致集群的 Master 和 Node 组件无法正常通信。要解决这个问题,可以按照以下步骤进行证书更新和服务重启:
步骤 1:检查证书状态
运行以下命令检查证书是否已过期:
kubeadm certs check-expiration
这将显示所有证书的到期时间。如果发现证书过期,则需要进行更新。
步骤 2:备份数据
在进行任何更改前,请备份你的集群配置和重要数据:
# 备份 etcd 数据(如果运行在本地)
ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
# 备份 Kubernetes 配置文件
cp -r /etc/kubernetes /backup-path
cp -r ~/.kube /backup-path
步骤 3:更新过期证书
使用 kubeadm 工具更新证书:
kubeadm certs renew all
如果只需要更新特定证书,可以用以下命令替换 all:
• apiserver
• apiserver-kubelet-client
• controller-manager
• scheduler
• front-proxy-client
• etcd-ca (如果 etcd 使用了自签名证书)
更新完成后,再次运行以下命令验证:
kubeadm certs check-expiration
步骤 4:分发新证书到节点
将更新的证书分发到所有的 Worker 节点:
scp -r /etc/kubernetes/pki <node-user>@<node-ip>:/etc/kubernetes/
scp /etc/kubernetes/admin.conf <node-user>@<node-ip>:/etc/kubernetes/
确保节点有正确的权限:
chmod 600 /etc/kubernetes/pki/*
chmod 600 /etc/kubernetes/admin.conf
步骤 5:重启 Master 和 Node 服务
重启 Master 节点:
systemctl restart kubelet
重启所有 Node 节点:
在每个节点上运行以下命令:
systemctl restart kubelet
步骤 6:验证集群状态
运行以下命令确保集群恢复正常:
kubectl get nodes
kubectl get pods -n kube-system
注意事项
1. 如果 kubeadm 无法运行(因证书过期),可以尝试临时跳过证书验证,启动 API Server:
• 修改 /etc/kubernetes/manifests/kube-apiserver.yaml,添加参数:
- --kubelet-certificate-authority=/dev/null
- --kubelet-client-key=/dev/null
• 保存文件后,Kubernetes 会自动重新加载配置文件。
2. 更新完证书后,记得移除临时参数。
3. 为了避免类似问题,可以修改证书默认有效期:
• 在初始化时,添加 --certificate-renewal-period 参数。
• 或者定期设置 kubeadm certs renew 的计划任务。
如果遇到其他问题,随时告知!