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 輪替功能不會影響這個 CA 或 SNI 憑證。
限制
請注意,進階叢集有下列限制:
- 1.31 版:進階叢集不支援 CA 輪替。
- 1.32 以上版本:進階叢集支援 CA 輪替,但本文會視情況說明一些細微差異。
CA 憑證輪替僅限於先前提及的 etcd、叢集和前端 Proxy CA。
CA 憑證輪替僅限於由 Google Distributed Cloud 自動核發的憑證。即使憑證是由系統 CA 簽署,系統也不會更新管理員手動核發的憑證。
CA 輪替會多次重新啟動 API 伺服器、其他控制層程序,以及叢集中的每個節點。叢集根憑證授權單位輪替的每個階段,都與叢集升級的進度類似。雖然使用者叢集在 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 和控制平面憑證都會在叢集建立五年後過期。使用者叢集的控制層憑證會在每次升級後 10 小時內自動輪替,但 CA 不會自動輪替。也就是說,除了定期升級版本外,您也必須至少每五年執行一次 CA 輪替。
為避免使用者叢集無法使用,控制層憑證會在使用者叢集升級後十小時內輪替。發生這種情況時,使用者叢集的 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
輸出內容。