k8s证书续期10年
现象
通过 kubeadm 安装 kubernetes 集群时会存在一个证书问题:由 kubeadm 生成的客户端证书在 1 年后到期。
随着 kubernetes 集群的使用,某一天证书过期了,此时 kubernetes 集群将无法正常使用,比如:kubectl 命令执行会产生错误(You must be logged in to the server(unauthorized))、通过 k8s 接口访问资源时出现“证书过期”的错误等。
很明显,这是证书过期导致,只需更新证书即可。
k8s 为什么将客户端证书的有效期设置为 1 年呢?
kubeadm 会在控制面升级的时候更新所有证书。
如果你对此类证书的更新没有特殊要求, 并且定期执行 Kubernetes 版本升级(每次升级之间的间隔时间少于 1 年), 则 kubeadm 将确保你的集群保持最新状态并保持合理的安全性。
最佳的做法是经常升级集群以确保安全。
解决方法
在实际中,如果遇到证书过期,则需手动更新证书,通过 kubeadm certs renew 命令手动更新你的证书。
查看证书过期时间。
在 Master 节点上,执行 kubeadm certs check-expiration 命令,查看证书过期时间。
输出类似以下内容:
备份证书
为防止更新证书等操作失败,关键操作前一定要进行备份。备份 /etc/kubernetes 目录:
cp -r /etc/kubernetes /etc/kubernetes.old # 当升级证书失败时, 可以将此文件夹复原, 即可恢复原有集群
修改时间
将k8s的所以节点的时间修改成未来的时间
date -s "20330508 12:00:00"
更新证书
使用 kubeadm certs renew all 命令来更新所有证书。
更新 ~/.kube/config 文件
mv config config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
sudo chmod 644 $HOME/.kube/config
弹出提示,输入y,回车
将k8s的所以节点的时间修改成现在的时间
date -s "20230508 12:00:00"
重启
重启 kube-apiserver,kube-controller,kube-scheduler,etcd 这4个容器:
docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash
在 Master 节点上,执行 kubeadm certs check-expiration 命令,查看证书过期时间。就会发现证书已经更新了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具