Google Distributed Cloud 會使用憑證和私密金鑰,驗證及加密使用者叢集中系統元件之間的連線。管理員叢集會為每個使用者叢集建立一組新的憑證授權單位 (CA),並使用 CA 憑證為系統元件核發額外的葉狀憑證。管理員叢集會將公開 CA 憑證和葉子憑證金鑰組分配給系統元件,建立安全通訊。
使用者叢集 CA 輪替功能可讓您觸發使用者叢集中的核心系統憑證輪替。輪替期間,管理員叢集會將使用者叢集的核心系統 CA 替換為新產生的 CA,並將新的公開 CA 憑證和分葉憑證金鑰組發布至使用者叢集系統元件。輪替作業會逐步進行,因此系統元件在輪替期間仍可繼續通訊。但請注意,工作負載和節點會在輪替期間重新啟動。
每個使用者叢集都有三個由管理員叢集管理的系統 CA:
- etcd CA 可確保 API 伺服器與 etcd 副本之間的通訊安全,以及 etcd 副本之間的流量安全。這個 CA 是自行簽署。
- 叢集 CA 可保護 API 伺服器與所有內部 Kubernetes API 用戶端 (kubelet、控制器、排程器) 之間的通訊。這個 CA 是自行簽署。
- 前端 Proxy CA 可保護與匯總 API 的通訊。這個 CA 是自行簽署。
此外,您可能使用機構 CA 簽署透過 authentication.sni 選項設定的憑證。這個 CA 和 SNI 憑證用於向叢集外部的用戶端提供 Kubernetes API。您需要管理這個 CA,並手動產生 SNI 憑證。這個 CA 和 SNI 憑證都不會受到使用者叢集 CA 輪替功能的影響。
限制
請注意,進階叢集有下列限制:
- 1.31 版:進階叢集不支援 CA 輪替。
- 1.32 以上版本:進階叢集支援 CA 輪替,但有部分細微差異,請參閱本文相關說明。
CA 憑證輪替僅限於上述 etcd、叢集和前端 Proxy CA。
CA 憑證輪換僅限於 Google Distributed Cloud 自動核發的憑證。即使憑證是由系統 CA 簽署,系統也不會更新管理員手動核發的憑證。
CA 輪替會多次重新啟動 API 伺服器、其他控制層程序,以及叢集中的每個節點。CA 輪替的每個階段都與叢集升級類似。雖然使用者叢集在 CA 輪替期間仍可運作,但工作負載會重新啟動及重新排程。如果使用者叢集沒有高可用性控制層,控制層也會短暫停機。
CA 輪替後,您必須更新使用者叢集 kubeconfig 檔案和驗證設定檔。這是因為舊叢集憑證已遭撤銷,且 kubeconfig 檔案中的憑證已失效。
CA 輪替作業一旦開始,就無法暫停或復原。
視使用者叢集的大小而定,CA 輪替可能需要相當長的時間才能完成。
執行 CA 輪換作業
開始輪替:
gkectl update credentials certificate-authorities rotate \ --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG更改下列內容:
USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑
ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑
指令的行為會因是否啟用進階叢集而有所不同:
未啟用
如果叢集未啟用進階叢集,指令會以非同步方式啟動 CA 輪替,然後結束。您不需要在 CA 輪替的整個過程中觀看指令輸出內容。您可以執行 gkectl update credentials certificate-authorities status 指令,定期查看進度。
如果 CA 輪替作業順利開始,您會看到類似下列內容的訊息:
successfully started the CA rotation with CAVersion 2, use gkectl update credentials certificate-authorities status command to view the current state of CA rotation
如果 CA 輪替作業已在進行中,您會看到類似下列內容的錯誤訊息:
Exit with error: admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request: requests must not modify CAVersion when cluster is not ready: ready condition is not true: ClusterCreateOrUpdate: Creating or updating user cluster control plane workloads
如要查看輪換狀態,請按照下列步驟操作:
gkectl update credentials certificate-authorities status \
--config USER_CLUSTER_CONFIG \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
上述指令會回報 CAVersion,這是系統自動遞增的整數,用於區分輪替前後使用的 CA。這個指令也會回報狀態 (True 或 False),指出 CA 輪替是否完成,並顯示訊息說明系統各元件目前使用的 CAVersion。
如果 CA 輪替作業已完成,您會看到類似下列內容的訊息:
State of CARotation with CAVersion 2 is - status: True, reason: CARotationCompleted, message: Control plane has CA bundle [2], certs from CA 2, CA 2 is CSR signer. Data plane has CA bundle [2], CA 2 was CSR signer at last restart.
如果 CA 輪替作業仍在進行中,畫面會顯示類似如下的訊息:
State of CARotation with CAVersion 2 is - status: False, reason: CARotationProgressed, message: Control plane has CA bundle [1 2], certs from CA 2, CA 1 is CSR signer. Data plane has CA bundle [1 2], CA 1 was CSR signer at last restart.
更新使用者叢集憑證
如果叢集未啟用進階叢集,您必須從管理員叢集取得新的使用者叢集 kubeconfig 檔案。這是因為 CA 輪替會撤銷舊 kubeconfig 檔案所依據的 CA。
取得新的 kubeconfig 檔案:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret admin \
-n USER_CLUSTER_NAME -o jsonpath='{.data.admin\.conf}' \
| base64 --decode > USER_CLUSTER_NAME-kubeconfig
已啟用
如果啟用進階叢集,gkectl update credentials
certificate-authorities rotate 指令會同步執行。指令輸出會將狀態訊息輸出至管理員工作站,顯示 CA 輪替進度。
CA 輪替成功後,指令會結束,並自動產生新的 kubeconfig 檔案。指令輸出內容會提供新 kubeconfig 檔案的名稱,大致如下:
Beginning CA rotation with generated CA ... Successfully rotated CA for user cluster "USER_CLUSTER_NAME". The kubeconfig file "/home/ubuntu"/USER_CLUSTER_NAME-kubeconfig" has been updated.
新的 kubeconfig 位於與您在指令中指定的管理員叢集 kubeconfig 相同的目錄。新 kubeconfig 的名稱為 USER_CLUSTER_NAME-kubeconfig。
發布新的 kubeconfig 檔案
將新的 kubeconfig 檔案提供給所有使用 kubeconfig 檔案與叢集互動的使用者。
更新驗證設定檔
CA 輪替完成後,必須更新並重新發布驗證設定檔。詳情請參閱「管理使用者身分」。
控制層憑證輪替
如果不進行輪替,使用者叢集 CA 和控制層憑證都會在叢集建立日期起十年後到期 (1.36.100 之前的版本,這些憑證會在五年後到期)。每次升級使用者叢集後,系統會在十小時內自動輪替使用者叢集的控制層憑證,但不會自動輪替 CA。也就是說,除了定期升級版本外,您還必須每十年至少執行一次 CA 輪替 (1.36.100 之前的版本為五年)。
為避免使用者叢集無法使用,控制層憑證會在使用者叢集升級後的十小時內輪替。發生這種情況時,使用者叢集的 CA 輪替狀態會顯示訊息。
如要查看控制層憑證輪替時,使用者叢集升級至哪個版本,請按照下列步驟操作:
gkectl update credentials certificate-authorities status \ --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
升級後,這項資訊會在 10 小時內顯示在 message 欄位結尾。例如:
Last Leaf Certificates Rotation Version: 1.16.0-gke.0.
排解 CA 輪替問題
gkectl diagnose 指令支援根據使用者叢集檢查已完成的 CA 輪替預期狀態。如需在使用者叢集上執行 gkectl diagnose 的操作說明,請參閱「診斷叢集問題」。如果 CA 輪替發生問題,請與 Google 支援團隊聯絡,並提供 gkectl diagnose 輸出內容。