本文转自Rancher Labsnode
Rancher 2.3正式发布已经一年,第一批使用Rancher 2.3的用户可能会遇到Rancher Server证书过时,可是没有自动轮换的状况。这会致使Rancher Server没法启动,而且日志出现报错:git
请注意:github
Rancher Server没法启动不会影响下游集群,下游集群依然能够经过kubeconfig去操做。docker
请注意:Rancher Server没法启动不会影响下游集群,下游集群依然能够经过kubeconfig去操做。api
以上状况只会在docker run启动或使用小于k3s v1.19用做local集群的Rancher上才会发生。以上状况只会在
docker run
启动或使用小于k3s v1.19用做local集群的Rancher上才会发生。浏览器
为了让你们更好的理解这个问题,下面将以手动修改系统时间的形式来重现这个问题。bash
当前时间:2020年10月30日 星期五 10时37分59秒 CST
服务器
一、启动Rancher v2.3.1,而且添加下游集群,操做步骤能够参考官网:less
二、启动Rancher 以后,从浏览器上查看到的过时时间:2021年10月30日 星期六 中国标准时间 10:29:35
spa
三、查看Rancher Server容器内的K3s证书过时时间为 Oct 30 02:28:49 2021 GMT
root@rancher1:~# docker exec -it rancher_server_id bash root@25c228f6a4c8:/var/lib/rancher# for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done /var/lib/rancher/k3s/server/tls/client-admin.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/client-auth-proxy.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/client-ca.crt notAfter=Oct 28 02:28:49 2030 GMT /var/lib/rancher/k3s/server/tls/client-controller.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/client-kube-proxy.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/client-scheduler.crt notAfter=Oct 30 02:28:49 2021 GMT /var/lib/rancher/k3s/server/tls/request-header-ca.crt notAfter=Oct 28 02:28:49 2030 GMT /var/lib/rancher/k3s/server/tls/server-ca.crt notAfter=Oct 28 02:28:49 2030 GMT /var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt notAfter=Oct 30 02:28:49 2021 GMT
四、将服务器时间调整为证书过时后5天的日期,好比:20211105
root@rancher1:~# timedatectl set-ntp no root@rancher1:~# date -s 20211105 Fri Nov 5 00:00:00 CST 2021 root@rancher1:~# date Fri Nov 5 00:00:00 CST 2021
此时,Rancher UI 已经没法访问:
而且Rancher 容器因为内置的K3s证书过时而不断重启。
以上现象是由于Rancher Server内置的K3s证书过时,致使K3s没法启动,从而致使Rancher Server容器没法启动。
为了能够继续操做Rancher Server容器,须要将系统时间调整到K3s证书过时以前。
root@rancher1:~# date -s 20211025 Mon Oct 25 00:00:00 CST 2021
若是启动Rancher时未加
--restart=unless-stopped
参数,须要手动启动Rancher Server。
接下来咱们就能够进入到容器内手动删除K3s证书,而后重启Rancher,重启成功后将从新生成K3s证书。
root@rancher1:~# docker exec -it rancher_server_id bash root@25c228f6a4c8:/var/lib/rancher# rm -rf /var/lib/rancher/k3s/server/tls/*.crt root@25c228f6a4c8:/var/lib/rancher# exit exit root@rancher1:~# docker restart rancher_server_id
Rancher Server若是出现如下日志,那么须要再重启一次Rancher Server:
2021/10/24 16:01:00 [INFO] Waiting for server to become available: Get https://localhost:6443/version?timeout=30s: x509: certificate signed by unknown authority
一、将服务器时间再次调整为证书过时后5天的日期,好比:20211105
root@rancher1:~# date -s 20211105 Fri Nov 5 00:00:00 CST 2021
证书更新以后,咱们须要确认K3s证书是否更新成功,还须要检查下游集群是否会有影响。
二、确认K3s证书已经更新
root@rancher1:~# docker exec -it rancher_server_id bash root@25c228f6a4c8:/var/lib/rancher# for i in `ls /var/lib/rancher/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done /var/lib/rancher/k3s/server/tls/client-admin.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/client-auth-proxy.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/client-ca.crt notAfter=Oct 22 16:00:54 2031 GMT /var/lib/rancher/k3s/server/tls/client-controller.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/client-kube-proxy.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/client-scheduler.crt notAfter=Oct 24 16:00:54 2022 GMT /var/lib/rancher/k3s/server/tls/request-header-ca.crt notAfter=Oct 22 16:00:54 2031 GMT /var/lib/rancher/k3s/server/tls/server-ca.crt notAfter=Oct 22 16:00:54 2031 GMT /var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt notAfter=Oct 24 16:00:54 2022 GMT
K3s证书过时时间已经从Oct 30 02:28:49 2021 GMT
更新到了Oct 24 16:00:54 2022 GMT
三、确认浏览器证书已经更新
浏览器上的证书过时已经从2021年10月30日 星期六 中国标准时间 10:29:35
更新到了2022年10月25日 星期二 中国标准时间 00:01:34
四、确认下游集群不受影响
Active
从Rancher 2.3开始,Rancher Server容器中内置了K3s做为local集群来支撑Rancher Server运行。
而K3s内部自动签发的证书有效期是1年,正常状况下若是证书已过时或剩余的时间少于90天,则在从新启动K3s时将轮换证书。参考官方文档:
https://docs.rancher.cn/docs/...
实际上因为K3s的bug致使在证书已过时或剩余的时间少于90天时重启Rancher,没有将K3s证书轮换,因此才会出现上述问题。
不过无需担忧,在后续的K3s v1.19版本中已经解决了这一问题,请参考: