本文转自Rancher Labs

前 言

Rancher 2.3正式公布曾经一年,第一批应用Rancher 2.3的用户可能会遇到Rancher Server证书过期,然而没有主动轮换的状况。这会导致Rancher Server无奈启动,并且日志呈现报错:

请留神:

Rancher Server无奈启动不会影响上游集群,上游集群仍然能够通过kubeconfig去操作。

请留神:

Rancher Server无奈启动不会影响上游集群,上游集群仍然能够通过kubeconfig去操作。

以上状况只会在docker run启动或应用小于k3s v1.19用作local集群的Rancher上才会产生。以上状况只会在docker run启动或应用小于k3s v1.19用作local集群的Rancher上才会产生。

重现问题

为了让大家更好的了解这个问题,上面将以手动批改零碎工夫的模式来重现这个问题。

以后工夫:2020年10月30日 星期五 10时37分59秒 CST

1、启动Rancher v2.3.1,并且增加上游集群,操作步骤能够参考官网:

  • https://docs.rancher.cn/docs/...
  • https://docs.rancher.cn/docs/...

2、启动Rancher 之后,从浏览器上查看到的过期工夫:2021年10月30日 星期六 中国规范工夫 10:29:35

3、查看Rancher Server容器内的K3s证书过期工夫为 Oct 30 02:28:49 2021 GMT

root@rancher1:~# docker exec -it rancher_server_id bashroot@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.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/client-auth-proxy.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/client-ca.crtnotAfter=Oct 28 02:28:49 2030 GMT/var/lib/rancher/k3s/server/tls/client-controller.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/client-kube-proxy.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/client-scheduler.crtnotAfter=Oct 30 02:28:49 2021 GMT/var/lib/rancher/k3s/server/tls/request-header-ca.crtnotAfter=Oct 28 02:28:49 2030 GMT/var/lib/rancher/k3s/server/tls/server-ca.crtnotAfter=Oct 28 02:28:49 2030 GMT/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crtnotAfter=Oct 30 02:28:49 2021 GMT

4、将服务器工夫调整为证书过期后5天的日期,比方:20211105

root@rancher1:~# timedatectl set-ntp noroot@rancher1:~# date -s 20211105Fri Nov  5 00:00:00 CST 2021root@rancher1:~# dateFri Nov  5 00:00:00 CST 2021

此时,Rancher UI 曾经无法访问:

并且Rancher 容器因为内置的K3s证书过期而一直重启。

手动轮换证书

以上景象是因为Rancher Server内置的K3s证书过期,导致K3s无奈启动,从而导致Rancher Server容器无奈启动。

为了能够持续操作Rancher Server容器,须要将零碎工夫调整到K3s证书过期之前。

root@rancher1:~# date -s 20211025Mon Oct 25 00:00:00 CST 2021
如果启动Rancher时未加--restart=unless-stopped参数,须要手动启动Rancher Server。

接下来咱们就能够进入到容器内手动删除K3s证书,而后重启Rancher,重启胜利后将从新生成K3s证书。

root@rancher1:~# docker exec -it rancher_server_id bashroot@25c228f6a4c8:/var/lib/rancher# rm -rf /var/lib/rancher/k3s/server/tls/*.crtroot@25c228f6a4c8:/var/lib/rancher# exitexitroot@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

验 证

1、将服务器工夫再次调整为证书过期后5天的日期,比方:20211105

root@rancher1:~# date -s 20211105Fri Nov  5 00:00:00 CST 2021

证书更新之后,咱们须要确认K3s证书是否更新胜利,还须要查看上游集群是否会有影响。

2、确认K3s证书曾经更新

root@rancher1:~# docker exec -it rancher_server_id bashroot@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.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/client-auth-proxy.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/client-ca.crtnotAfter=Oct 22 16:00:54 2031 GMT/var/lib/rancher/k3s/server/tls/client-controller.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/client-kube-proxy.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/client-scheduler.crtnotAfter=Oct 24 16:00:54 2022 GMT/var/lib/rancher/k3s/server/tls/request-header-ca.crtnotAfter=Oct 22 16:00:54 2031 GMT/var/lib/rancher/k3s/server/tls/server-ca.crtnotAfter=Oct 22 16:00:54 2031 GMT/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crtnotAfter=Oct 24 16:00:54 2022 GMT

K3s证书过期工夫曾经从Oct 30 02:28:49 2021 GMT更新到了Oct 24 16:00:54 2022 GMT

3、确认浏览器证书曾经更新

浏览器上的证书过期曾经从2021年10月30日 星期六 中国规范工夫 10:29:35更新到了2022年10月25日 星期二 中国规范工夫 00:01:34

4、确认上游集群不受影响

  • 集群状态为Active

  • 查看集群 Pod 的运行状况

后 记

从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版本中曾经解决了这一问题,请参考:

https://github.com/rancher/k3...