k3s证书过期后更新

问题描述

执行任何 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、调整到当前的时间