輪替使用者叢集憑證授權單位

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 輪替

  1. 開始輪替:

    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。這項指令也會回報狀態 (TrueFalse),指出 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 輸出內容。