0

K8S上生产环境后,90%都会遇到这个故障

 1 month ago
source link: https://www.51cto.com/article/784748.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

K8S上生产环境后,90%都会遇到这个故障

作者:didiplus 2024-03-27 14:54:21
在Kubernetes/K8s上生产环境中,90%的人都会遇到的一个故障,K8s集群突然有一天执行kubectl命令时,报错提示509证书过期。

在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获取数据后显示到你当前的终端。

083eb743364a0b96596711ea6526e322519adc.webp

那这个提示就意味kube/config这个文件中的证书与API Server它的证书过期了。如果你使用kubeadm搭建的集群,它所有的证书默认存储在/etc/kubernetes/pki。这里面主要是k8s的证书和etcd使用的证书。这些证书默认有效期是1年。一旦过期,k8s集群就无法提供服务。

e10ff4d86c9ec61e55e575a191b4997b799afb.webp

那为什么只有一年呢?

这是因为K8S官方,他希望你每年更新一次K8S的版本,来保持最新版本。同时它的证书实际也会给你延期。

那这种每年更新一次版本,来去更新证书,在生产环境中显然不太合适的。这种操作会增加集群不稳定或者出现其他问题的风险。

当然kubeadm也提供了一个命令方式,可以自动的给你续签这些所有的证书。

我们可以通过kubeadm certs check-expiration来去查看当前集群证书的一个有效期,因为本身这证书就是kubeadm在搭建集群中自动生成的,所以,它管理证书也是通过kubeadm这个命令进行管理它的一个续期。

e48342289001d823746769160a9a6f8fcfb1c0.webp

通过这个命令可以查看当前所有证书它的一个有效期,可以看到证书的有效期剩余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将所有的证书升级,续期一年。

93ad2c2064193dacc19995b5df2b2837dc5c3c.webp

执行完之后,根据提示重启相关组件,由于该K8S集群使用kubeadm部署,只需要执行如下命令即可实现重启K8S相关组件。

mv /etc/kubernetes/manifests/*.yaml /home
sleep 20
mv /home/*.yaml /etc/kubernetes/manifests/

等待k8s集群启动成功后,再次查看证书时间,如下:

图片

通过上述结果可以看到证书的有效期变成了一年。

责任编辑:赵宁宁 来源: 攻城狮成长日记

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK