4

超稳攻略!Rancher 2.3手动轮换证书,保护集群安全!

 3 years ago
source link: https://segmentfault.com/a/1190000038346346
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文转自 Rancher Labs

前 言

Rancher 2.3正式发布已经一年,第一批使用Rancher 2.3的用户可能会遇到Rancher Server证书过期,但是没有自动轮换的情况。这会导致Rancher Server无法启动,并且日志出现报错:

MreIfqU.jpg!mobile

请注意:

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,并且添加下游集群,操作步骤可以参考官网:

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

rqaMFnn.jpg!mobile

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 已经无法访问:

MF7rQzV.jpg!mobile

并且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

N7na6j.jpg!mobile

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

  • 集群状态为 Active

nUBbieb.jpg!mobile

  • 检查集群 Pod 的运行状况

uEvMBfb.jpg!mobile

后 记

从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...


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK