1. 程式人生 > >超穩攻略!Rancher 2.3手動輪換證書,保護叢集安全!

超穩攻略!Rancher 2.3手動輪換證書,保護叢集安全!

本文轉自[Rancher Labs](https://mp.weixin.qq.com/s/BFRmMVU4sUo3e-wnKHSP_A "Rancher Labs") ## 前 言 Rancher 2.3正式釋出已經一年,第一批使用Rancher 2.3的使用者可能會遇到Rancher Server證書過期,但是沒有自動輪換的情況。這會導致Rancher Server無法啟動,並且日誌出現報錯: ![](https://oscimg.oschina.net/oscnet/up-6857b7f99459b78a8c933f7870e02206380.JPEG) 請注意: 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/rancher2/installation/other-installation-methods/single-node-docker/_index/ - https://docs.rancher.cn/docs/rancher2/cluster-provisioning/_index 2、啟動Rancher 之後,從瀏覽器上檢視到的過期時間:`2021年10月30日 星期六 中國標準時間 10:29:35` ![](https://oscimg.oschina.net/oscnet/up-83809021626c82a2bcbd4986d564a94d89f.JPEG) 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 已經無法訪問: ![](https://oscimg.oschina.net/oscnet/up-5ccd36b423b8cc7736c8c9d146e399f4f98.JPEG) 並且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` ![](https://oscimg.oschina.net/oscnet/up-f035f99e5a29291f9e2d2323f72bbe6b0ab.JPEG) 4、確認下游叢集不受影響 - 叢集狀態為`Active` ![](https://oscimg.oschina.net/oscnet/up-8559fbf6e8b842ebc4d39c0cd027c263efd.JPEG) - 檢查叢集 Pod 的執行狀況 ![](https://oscimg.oschina.net/oscnet/up-eaa5e25bb27ea760564c4e212671639120b.JPEG) ## 後 記 從Rancher 2.3開始,Rancher Server容器中內建了K3s作為local叢集來支撐Rancher Server執行。 而K3s內部自動簽發的證書有效期是1年,正常情況下如果證書已過期或剩餘的時間少於90天,則在重新啟動K3s時將輪換證書。參考官方文件: https://docs.rancher.cn/docs/k3s/advanced/_index 實際上由於K3s的bug導致在證書已過期或剩餘的時間少於90天時重啟Rancher,沒有將K3s證書輪換,所以才會出現上述問題。 不過無需擔心,在後續的K3s v1.19版本中已經解決了這一問題,請參考: https://github.com/rancher/k3s/commit/a2471a1f8a2aa26902f8e3b29624dc9c