通过
sealos
安装的k8s集群,虽然kubeadm
证书是100年的,但是kubelet
证书除master1
节点外(sealos
最开始部署在master1
中),其他节点均是一年一续(自动续签),但是发现部分站点的master2
节点的kubelet
证书没有自动续签,具体原因未知,还需探索,如有大佬告知,将不胜感激
一、出现问题
日常巡检时发现大量的pod处于Terminated
状态,查看kubectl get node
;master2
处于NotReady
状态,具体报错(命令journal -xe
查看)如下图红框所示:第二行中找不到文件无需理会,sealos
部署的都没有这个文件,不影响使用。
报错: 404844 bootstrap_go:285} part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: 2024-06-25 06:18:42 +0000 UTC
404744 run.go:74] "command failed " err="failed to run kubelet : unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory,如下入下图:
报错提示.conf
文件过期,以前一直以为证书到期是报错x509: certificate has expired or is not yet valid
,今天学到了,kubelet
证书到期还会提示文件过期。
二、排查进入死胡同
因为最开始不确定是证书到期了,只能和无头苍蝇似的四处乱撞,看到master2
服务器上的pod
都是4年前启动的,这肯定不对,k8s集群才部署了一年,然后查看服务器时间timedatectl
,看到RTC time
与正常时间相差4年,感觉是这个问题,然后hwclock --set --date "北京时间"
修改时间后,kubelet
还是启动报错。然后又开启了漫漫百度路……
三、证书续签
百度到kubelet证书的一种续签方式
即/etc/kubernetes/admin.conf中的client-certificate-data 与 client-key-data
替换/etc/kubernetes/kubelet.conf client-certificate 与 client-key
所有节点替换完成后,重启kubelet
,可以看到 /var/lib/kubelet/pki 文件夹下生成了新的kubelet-client证书
四、总结
按照以上方式改好后,重启kubelet
会生成新的.pem .crt .key
证书(重启kubelet
就会生成新的.crt .key
证书),但是.crt .key
证书无需理会,目前来看不知道有啥用,即使过期很长时间,也不影响使用。
下面这个命令可以看到证书的有效期
openssl x509 -in 证书路径/证书名称 -noout -text | grep Not