乐趣区

关于kubernetes:超稳攻略Rancher-23手动轮换证书保护集群安全

本文转自 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 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

4、将服务器工夫调整为证书过期后 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

验 证

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

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

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

2、确认 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

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…

退出移动版