本文使用k3s版本:k3s version v1.24.17+k3s1 (026bb0ec)
默认安装情况下,ca证书有效期是10年,普通证书有效期是1年。
普通证书
k3s官网描述:K3s 客户端和服务器证书自颁发日起 365 天内有效。每次启动 K3s 时,已过期或 90 天内过期的证书都会自动更新。
但是:90天内过期的证书可以通过重启k3s没问题,已过期不行,所以已过期的需要手动处理。
# 已过期的错误
Unable to connect to the server: tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2027-05-18T15:17:59+08:00 is after 2027-04-18T07:18:33Z
续签
# 停止 K3s
systemctl stop k3s# 轮换证书
k3s certificate rotate# 启动 K3s
systemctl start k3s# 删除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
systemctl restart k3s
100年过期
vim /etc/systemd/system/k3s.service[Service]
Type=notify
Environment="CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=36500" # 增加环境变量
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s.service.env
CA证书
续签
实测官方文章续签方法只能在证书有效期内正常续签。
100年过期
首先使用脚本生成ca证书(改成相对应的时间),放置在指定位置(/var/lib/rancher/k3s/server/tls),然后在安装k3s。
相关调试命令
查看证书内容,可以看到证书时间
# server
for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
# agent
for i in `ls /var/lib/rancher/k3s/agent/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
修改宿主机时间
sudo date --set="2025-07-18 19:17:41"
参考资料
- https://docs.k3s.io/zh/cli/certificate
另外关于k8s证书相关推荐文章
- https://www.cnblogs.com/orchidzjl/p/17306985.html
- https://www.zhaohuabing.com/post/2020-03-19-pki/
- https://www.zhaohuabing.com/post/2020-05-19-k8s-certificate/