本文轉自Rancher Labsnode
Rancher 2.3正式發佈已經一年,第一批使用Rancher 2.3的用戶可能會遇到Rancher Server證書過時,可是沒有自動輪換的狀況。這會致使Rancher Server沒法啓動,而且日誌出現報錯:git
請注意:github
Rancher Server沒法啓動不會影響下游集羣,下游集羣依然能夠經過kubeconfig去操做。docker
請注意:api
Rancher Server沒法啓動不會影響下游集羣,下游集羣依然能夠經過kubeconfig去操做。瀏覽器
以上狀況只會在docker run啓動或使用小於k3s v1.19用做local集羣的Rancher上纔會發生。以上狀況只會在
docker run
啓動或使用小於k3s v1.19用做local集羣的Rancher上纔會發生。bash
爲了讓你們更好的理解這個問題,下面將以手動修改系統時間的形式來重現這個問題。服務器
當前時間:2020年10月30日 星期五 10時37分59秒 CST
less
一、啓動Rancher v2.3.1,而且添加下游集羣,操做步驟能夠參考官網:rest
二、啓動Rancher 以後,從瀏覽器上查看到的過時時間:2021年10月30日 星期六 中國標準時間 10:29:35
三、查看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/advanced/_index
實際上因爲K3s的bug致使在證書已過時或剩餘的時間少於90天時重啓Rancher,沒有將K3s證書輪換,因此纔會出現上述問題。
不過無需擔憂,在後續的K3s v1.19版本中已經解決了這一問題,請參考:
https://github.com/rancher/k3s/commit/a2471a1f8a2aa26902f8e3b29624dc9c809024d2