问题描述
执行任何 kubectl
命令时都会报错,比如执行 kubectl get node
命令时提示错误信息: Unable to connect to the server: x509: certificate has expired or is not yet valid
证书有效期查询:
1
| for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
|
官网方法:
下面的命令不能更新 server-ca.crt ,可以轮换的证书:admin、api-server、controller-manager、scheduler、k3s-controller, k3s-server, cloud-controller, etcd, auth-proxy, kubelet,kube-proxy
1 2 3 4 5 6 7 8
| # 停止 K3s systemctl stop k3s
# 轮换证书 k3s certificate rotate
# 启动 K3s systemctl start k3s
|
其它方法:
1 2 3 4 5 6 7 8 9 10 11
| #删掉 secret k3s-serving kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving
#删掉 系统中的文件dynamic-cert.json rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json
#删掉目前k3s 进程,可以不用该步骤 #sudo /usr/local/bin/k3s-killall.sh
#重启 k3s 进程 sudo systemctl restart k3s
|
验证:
- 1、将系统时间设置成证书快到期前1个月,然后重启k3s
- 2、重启后浏览证书时间,发现证书的有效期自动延期1年,server-ca证书延期到10年
- 3、再将时间设置成30年后,使用kubectl命令出现证书错误,但是部署的程序仍可以访问
- 4、证书过期后,使用 systemctl restart k3s 命令,会卡住
- 5、证书过期后,将时间设置成证书过期前的时间,程序恢复正常
长时间证书的简单方法
- 1、将服务器时间调整到30年后
- 2、更新证书
- 3、调整到当前的时间