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.x1.18.x,所以说由于内置的 k3s 影响到了 Rancher Server 的证书轮转,因为当 Rancher 证书过期后,会自动重启 Rancher Server 的重启,然后触发内置 K3s 的更新,此时,K3s 证书更新失败,所以,Rancher Server 就无法启动。

2. 查看证书过期时间

2.1 查看docker中的rancher服务

image

2.2 根据容器id或者名称进入容器内部

image

2.3 执行命令:for i in $(ls /var/lib/rancher/k3s/server/tls/*.crt);do openssl x509 -enddate -noout -in $i;  done

image

完整命令如下:
[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上更新证书,步骤见下图:
   image
可以根据情况选择更新所有应用证书还是更新指定服务证书:
 image
 image

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
 
posted @ 2022-07-07 09:44  风光小磊  阅读(3634)  评论(0编辑  收藏  举报