K8S上生产环境后,90%都会遇到这个故障
原创 didiplus 攻城狮成长日记 2024-03-26 21:30 广东 听全文在Kubernetes/K8s
上生产环境中,90%的人都会遇到的一个故障,K8s集群突然有一天执行kubectl
命令时,报错提示509
证书过期。返回如下报错信息:
Unable to connect to the server: x509: certificate has expired or is not yet valid
这是什么导致的呢?该怎么进行解决呢?
我们了解到kubectl
,它实在上是读取kube/config
这个文件,向API Server
发起请求。也就是kubectl
的任何操作,都是携带这个文件向API Server
获取数据后显示到你当前的终端。
那这个提示就意味kube/config
这个文件中的证书与API Server
它的证书过期了。如果你使用kubeadm
搭建的集群,它所有的证书默认存储在/etc/kubernetes/pki
。这里面主要是k8s的证书和etcd
使用的证书。这些证书默认有效期是1年。一旦过期,k8s集群就无法提供服务。
那为什么只有一年呢?
这是因为K8S
官方,他希望你每年更新一次K8S
的版本,来保持最新版本。同时它的证书实际也会给你延期。
那这种每年更新一次版本,来去更新证书,在生产环境中显然不太合适的。这种操作会增加集群不稳定或者出现其他问题的风险。
当然kubeadm
也提供了一个命令方式,可以自动的给你续签这些所有的证书。
我们可以通过kubeadm certs check-expiration
来去查看当前集群证书的一个有效期,因为本身这证书就是kubeadm
在搭建集群中自动生成的,所以,它管理证书也是通过kubeadm
这个命令进行管理它的一个续期。
通过这个命令可以查看当前所有证书它的一个有效期,可以看到证书的有效期剩余342天。下面是它的根证书,默认是10年,也就是「根证书它是非常重要的」。
客户端证书过期了,可以通过根证书可以生成。而这根证书一旦发生变化,它的影响范围就比较大了,所以,kubeadm
它的根证书默认是10年,是完全足够用的。主要升级的也是客户端证书。
它提供一个命令,也是可以直接对这些客户端证书进行升级,不过在升级之前,我们先将一些数据给备份一下,以免在升级的过程中,产生一些额外的问题,好方便进行去恢复。
- 首先把
/etc/kubernetes/pki
这个目录进行备份。
cp /etc/kubernetes/pki /etc/kubernetes/pki.bk -r
- 然后再将etcd的数据目录备份一下。
cp /var/lib/etcd /var/lib/etcd.bk -r
使用kubeadm certs renew all
将所有的证书升级,续期一年。
执行完之后,根据提示重启相关组件,由于该K8S集群使用kubeadm部署,只需要执行如下命令即可实现重启K8S相关组件。
mv /etc/kubernetes/manifests/*.yaml /home
sleep 20
mv /home/*.yaml /etc/kubernetes/manifests/
等待k8s集群启动成功后,再次查看证书时间,如下:
通过上述结果可以看到证书的有效期变成了一年。
云原生30 云原生 · 目录 上一篇避免业务中断,K8s节点故障排查攻略,速来围观!下一篇提升K8S故障排除效率:详解Pod内抓包的高效策略! 素材来源官方媒体/网络新闻 阅读 3770 喜欢此内容的人还喜欢 轻松搞定!Python脚本实现华为设备配置自动备份 攻城狮成长日记 不看的原因
- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
- Summer wind 广东3月30日 回复 怎么才是364天,不是在342天的基础上加上一年吗,那这样岂不是要一年一年的去重新生成证书。会中断业务吗 置顶 攻城狮成长日记 (作者)3月30日 回复 客户端证书有效期是一年的。可以通过修改源码调整这个证书的有效期的
人划线
标签:kubernetes,etc,证书,故障,集群,90%,kubeadm,K8S From: https://www.cnblogs.com/cheyunhua/p/18163539