一切福田,不離方寸,從心而覓,感無不通。

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

Kubernetes/K8s上生产环境中,90%的人都会遇到的一个故障,K8s集群突然有一天执行kubectl命令时,报错提示509证书过期。返回如下报错信息:

这是什么导致的呢?该怎么进行解决呢?

我们了解到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年,是完全足够用的。主要升级的也是客户端证书。
它提供一个命令,也是可以直接对这些客户端证书进行升级,不过在升级之前,我们先将一些数据给备份一下,以免在升级的过程中,产生一些额外的问题,好方便进行去恢复。

  1. 首先把/etc/kubernetes/pki这个目录进行备份。

  1. 然后再将etcd的数据目录备份一下。

使用kubeadm certs renew all将所有的证书升级,续期一年。

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

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

from:https://blog.csdn.net/sinat_28521487/article/details/137067236