Rancher证书过期查看解决
1. rancher证书过期
1.1 现象
Rancher UI 无法访问
Rancher Server 日志报错:x509: certificate has expired or is not yet valid
查看rancher日志:docker logs --since="2022-07-07" --tail=500 rancher
Rancher Server 反复重启(如果你在启动 rancher 时加了 --restart 参数)
1.2 原因
Rancher 官网明确指出 Rancher v2.3 以上的版本 会自动检查证书有效期,如果发现证书即将过期,将会自动生成新的证书,那为什么会出现上述的情况呢,其实这是 K3s 的一个 bug 引起的:
- 1)Rancher Server 内置了一个 K3s 集群作为 local 集群,也就是说通过
docker run ... rancher/rancher:version
启动的 Rancher,在容器里其实已经内置了一个 K3s 用来支撑 Rancher 的运行。这里再简单说下 K3s 的证书逻辑,K3s 证书有效期默认也是一年,如果证书已经过期或剩余的时间不足 90 天,则在 K3s 重启时轮换证书。但在 K3s v1.19.1 之前的版本中,由于 BUG(https://github.com/k3s-io/k3s/issues/1621),导致K3s无法自动轮转证书。 - 2)Rancher v2.3+ 和 v2.4+ 内置的 K3s 版本分别是
1.17.x
和1.18.x
,所以说由于内置的 k3s 影响到了 Rancher Server 的证书轮转,因为当 Rancher 证书过期后,会自动重启 Rancher Server 的重启,然后触发内置 K3s 的更新,此时,K3s 证书更新失败,所以,Rancher Server 就无法启动。
2. 查看证书过期时间
2.1 查看docker中的rancher服务
2.2 根据容器id或者名称进入容器内部
2.3 执行命令:for i in $(ls /var/lib/rancher/k3s/server/tls/*.crt);do openssl x509 -enddate -noout -in $i; done
完整命令如下:
[root@wmsdevelapp ~]# docker ps -a | grep rancher 2f47e58c1f2a [registry.saas.hand-china.com/tools/rancher-openvpn](http://registry.saas.hand-china.com/tools/rancher-openvpn) "/usr/local/bin/entr…" 3 days ago Up 3 days k8s_openvpn_openvpn-746967fbcd-v5lqv_mesuat_5d5d34f5-c01d-4324-b6c5-442492f34a5a_0 ac666873b7ab rancher/rancher:v2.5.11 "entrypoint.sh" 2 months ago Up 24 hours 0.0.0.0:1080->80/tcp, 0.0.0.0:10443->443/tcp rancher [root@wmsdevelapp ~]# docker exec -it rancher /bin/sh sh-4.4# for i in $(ls /var/lib/rancher/k3s/server/tls/*.crt);do openssl x509 -enddate -noout -in $i; done notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 21 07:13:44 2032 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 24 07:13:44 2023 GMT notAfter=Mar 21 07:13:44 2032 GMT notAfter=Mar 21 07:13:44 2032 GMT notAfter=Mar 24 09:34:28 2023 GMT sh-4.4#
3. rancher证书过期解决方案
3.1 rancher 版本:v2.3+
3.1.1 已过期解决
[root@localhost ~]# docker ps -a | grep rancher # 查看rancher服务 17a1d1cf97fc [harbor.jettech.com/rancher/rancher:v2.3.6](http://harbor.jettech.com/rancher/rancher:v2.3.6) "entrypoint.sh" About an hour ago Up About an hour 0.0.0.0:80->80/tcp, 0.0.0.0:8443->443/tcp heuristic_shannon [root@localhost ~]# docker exec -it 17a1d1cf97fc bash # 进入容器内部 root@17a1d1cf97fc:/var/lib/rancher# ls k3s management-state root@17a1d1cf97fc:/var/lib/rancher# cp -r k3s/server/tls k3s/server/tls_bak # 备份证书 root@17a1d1cf97fc:/var/lib/rancher# rm -f k3s/server/tls/*.crt # 删除之前的证书 exit root@17a1d1cf97fc:/var/lib/rancher# docker restart 17a1d1cf97fc #重启容器会重新生成新的证书
3.1.2 未过期即将过期解决
直接去rancher上更新证书,步骤见下图:
可以根据情况选择更新所有应用证书还是更新指定服务证书:
3.2 rancher 版本:v2.4 +
3.2.1 exec 进入到 rancher 服务内部
kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system rm -f /var/lib/rancher/k3s/server/tls/dynamic-cert.json
3.2.2 重启 rancher-server
docker restart rancher_id
3.2.3 执行以下命令刷新参数
curl --insecure -sfL https://server-url/v3
本文来自博客园,作者:风光小磊,转载请注明原文链接:https://www.cnblogs.com/lei-z/p/16453563.html