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

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

那这个提示就意味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集群启动成功后,再次查看证书时间,如下:

图片

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

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

2019-09-05 09:10:35

KafkaK8SKubernetes

2021-04-23 08:35:16

k8s故障检测

2022-04-22 13:32:01

K8s容器引擎架构

2024-02-20 16:55:14

K8S云计算

2024-03-18 15:44:48

K8S故障运维

2023-04-30 00:02:40

K8Skubelet数据

2023-11-06 07:16:22

WasmK8s模块

2021-05-07 09:31:33

KindK8s Operator

2023-09-06 08:12:04

k8s云原生

2024-01-05 11:49:30

K8S监控告警

2024-03-12 15:47:12

Kubernetes容器K8S

2024-01-07 19:43:50

K8S节点

2023-12-01 15:58:00

Kubernetes集群DevOps

2023-12-05 08:33:44

滴滴故障k8s

2023-08-03 08:36:30

Service服务架构

2023-05-25 21:38:30

2023-08-04 08:19:02

2020-05-12 10:20:39

K8s kubernetes中间件

2022-09-05 08:26:29

Kubernetes标签

2022-09-27 12:00:58

HadoopK8S开源
点赞
收藏

51CTO技术栈公众号