k8s的kubelet证书过期重生成 - Fri, Dec 4, 2020
k8s的kubelet证书过期重生成
k8s的kubelet证书过期重生成
注意: Kubernetes证书默认有效期为1年。从Kubernetes 1.15开始,证书管理命令已从
kubeadm alpha移至正式命令。
1. 检查证书状态
# 检查证书有效期(新版本)
kubeadm certs check-expiration
# 旧版本使用
kubeadm alpha certs check-expiration
输出示例:
CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
admin.conf Nov 30, 2021 20:10 UTC 361d no
apiserver Nov 30, 2021 20:09 UTC 361d no
apiserver-etcd-client Nov 30, 2021 20:09 UTC 361d no
apiserver-kubelet-client Nov 30, 2021 20:09 UTC 361d no
controller-manager.conf Nov 30, 2021 20:09 UTC 361d no
etcd-healthcheck-client Nov 30, 2021 05:42 UTC 361d no
etcd-peer Nov 30, 2021 05:42 UTC 361d no
etcd-server Nov 30, 2021 05:42 UTC 361d no
front-proxy-client Nov 30, 2021 20:09 UTC 361d no
scheduler.conf Nov 30, 2021 20:09 UTC 361d no
2. 更新控制平面证书
# 新版本(Kubernetes 1.15+)
kubeadm certs renew all
# 旧版本
kubeadm alpha certs renew all
3. 更新kubelet证书
证书更新后,kubelet证书可能不会自动更新。需要手动处理:
3.1 检查kubelet状态
systemctl status kubelet
如果kubelet无法启动,查看详细日志:
journalctl -xefu kubelet
错误示例:
bootstrap.go:264] Part of the existing bootstrap client certificate is expired: 2020-04-11 02:01:22 +0000 UTC
3.2 重新生成kubelet配置
# 方法1:使用kubeadm生成新配置
cd /etc/kubernetes/
kubeadm kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
# 方法2:删除旧的证书和配置,让kubelet自动重新生成
rm -f /var/lib/kubelet/pki/*
rm -f /etc/kubernetes/kubelet.conf
systemctl restart kubelet
3.3 重启kubelet
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
4. 更新kubectl配置
# 更新admin配置
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5. 最佳实践
- 设置证书自动更新:在kubeadm配置中启用自动证书轮换
- 监控证书过期时间:定期检查证书状态
- 备份证书:在更新前备份
/etc/kubernetes/pki目录 - 使用外部CA:对于生产环境,考虑使用外部CA管理证书