k3s证书过期解决方法(亲测有效)
问题描述
执行任何kubectl
命令时都会报错,比如执行kubectl get node
命令时提示错误信息:Unable to connect to the server: x509: certificate has expired or is not yet valid
解决方法
#### 删掉secret k3s-serving
[root@test-node2-138 ~]# kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving
secret "k3s-serving" deleted
### 删掉系统中的文件dynamic-cert.json
[root@test-node2-138 ~]# rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json
### 删掉目前k3s进程
[root@test-node2-138 ~]# k3s-killall.sh
### 重启k3s进程
[root@test-node2-138 ~]# systemctl restart k3s
其它扩展
-
一般k8s的证书默认是1年到期,所以每年都需要更新一次,如何查看证书的有效期
kubectl --insecure-skip-tls-verify -n kube-system get secrets
这样可以查看到证书已经用了多久,如图:
说明已经用了347天,还有10多天要过期了。更新完后再次查看,时间久会发生变化,如下是刚才更新后的:
-
也可以通过如下方式查看证书时间
[root@test-node2-138 ~]# for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
显示如下:
-
执行任何
kubectl
命令时都会报错,比如执行kubectl get node
命令时提示错误信息:Unable to connect to the server: x509: certificate has expired or is not yet valid
临时解决方法
就是使用
--insecure-skip-tls-verify
参数,比如执行kubectl get node
报错,我们可以使用kubectl --insecure-skip-tls-verify get node
这样就不会报错了。这样只是跳过证书,所以只是一种临时的解决方案。建议还是要更新证书比较安全。