輪替管理叢集 CA 憑證

Google Distributed Cloud 會使用憑證和私密金鑰,驗證管理叢集中 Kubernetes 系統元件之間的通訊。建立管理員叢集時,系統會建立新的憑證授權單位 (CA) 憑證,並使用這些根憑證為 Kubernetes 系統元件核發額外的葉憑證。

本指南僅適用於管理員叢集 CA 憑證輪替。如要瞭解使用者叢集,請參閱「輪替使用者叢集 CA 憑證」。

管理叢集中的 Kubernetes 系統會使用三種 CA 憑證:

  • etcd CA 憑證可確保 Kubernetes API 伺服器與 etcd 副本之間的通訊安全,以及 etcd 副本之間的通訊安全。這個憑證是自行簽署的憑證。

  • 叢集 CA 憑證可確保 Kubernetes API 伺服器與所有內部 Kubernetes API 用戶端 (例如 kubelet、控制器管理工具和排程器) 之間的通訊安全無虞。這個憑證是自行簽署。

  • 前端 Proxy CA 憑證可確保與匯總 API 的通訊安全。這個憑證是自行簽署。

您可以使用 gkectl 觸發憑證輪替。輪替期間,gkectl 會以新產生的憑證,取代管理員叢集的核心系統 CA 憑證。然後將新的 CA 憑證、葉子憑證和私密金鑰,發布至管理叢集系統元件。輪替作業會逐步進行,因此系統元件在輪替期間仍可繼續通訊。但請注意,輪替期間會重新啟動工作負載和節點。

如果沒有輪替,CA 憑證和控制層憑證會在叢集建立五年後失效。叢集升級期間,控制層憑證會自動輪替,但 CA 不會自動輪替。也就是說,除了定期升級版本外,您也必須至少每五年執行一次 CA 輪替。

限制

  • 請注意,進階叢集有下列限制:

    • 1.31 版:進階叢集不支援 CA 輪替。
    • 1.32 以上版本:進階叢集支援 CA 輪替,但本文件會視情況註明一些細微差異。
  • CA 憑證輪替僅限於先前提及的 etcd、叢集和前端 Proxy 憑證。

  • CA 憑證輪替僅限於由 Google Distributed Cloud 自動核發的憑證。即使憑證是由系統 CA 簽署,系統也不會更新管理員手動核發的憑證。

  • CA 憑證輪替會多次重新啟動 Kubernetes API 伺服器、其他控制層程序,以及管理員叢集中的每個節點。輪替的每個階段都與叢集升級的進展類似。雖然在憑證輪替期間,管理員叢集和由管理員叢集管理的使用者叢集仍會保持運作,但管理員叢集中的工作負載會重新啟動並重新排程。管理員叢集控制層和使用者叢集控制層也可能會短暫停機。

  • 您必須在憑證輪替期間更新管理員叢集 kubeconfig 檔案,輪替完成後也必須再次更新。這是因為舊叢集憑證已遭撤銷,且 kubeconfig 檔案中的憑證將無法再運作。

  • 啟動 CA 憑證輪替後,就無法復原。

  • 視叢集大小而定,CA 憑證輪替作業可能需要相當長的時間才能完成。

  • 如果憑證輪替程序中斷,可以重新執行相同指令,繼續完成程序。不過,請務必確保一次只執行一個旋轉指令。

啟動輪替

如要啟動憑證輪替,請執行下列指令:

gkectl update credentials certificate-authorities rotate \
    --admin-cluster \
    --config ADMIN_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

更改下列內容:

  • ADMIN_CLUSTER_CONFIG:管理員叢集設定檔的路徑

  • ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑

指令的行為會因是否啟用進階叢集而異:

未啟用

gkectl update credentials certificate-authorities rotate 指令會啟動並執行輪替作業的前半段。然後,指令會暫停,讓您執行下一個指令來更新 kubeconfig 檔案。

更新 kubeconfig 檔案

gkectl update credentials certificate-authorities rotate 指令暫停時,請更新管理員叢集的 kubeconfig 檔案。這會在 kubeconfig 檔案中放置新的用戶端憑證和新的 CA 憑證。舊的用戶端憑證會從 kubeconfig 檔案中移除,舊的 CA 憑證則會保留在 kubeconfig 檔案中。

gkectl update credentials certificate-authorities update-kubeconfig \
  --admin-cluster \
  --config ADMIN_CLUSTER_CONFIG \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG

繼續輪替

執行下列指令,完成程序的後半部分。gkectl 驗證更新後的 kubeconfig 檔案位於目前目錄中後,指令才會繼續執行。

gkectl update credentials certificate-authorities rotate \
  --admin-cluster \
  --complete \
  --config ADMIN_CLUSTER_CONFIG \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG

輪替完成後,系統會回報目前的 CA 版本。

再次更新 kubeconfig 檔案

第二次輪替完成後,請再次更新 kubeconfig 檔案。這會從 kubeconfig 檔案中移除舊的 CA 憑證。

gkectl update credentials certificate-authorities update-kubeconfig \
  --admin-cluster \
  --config ADMIN_CLUSTER_CONFIG \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG

已啟用

如果啟用進階叢集,gkectl update credentials certificate-authorities rotate 指令會同步執行。指令會將狀態訊息輸出至管理員工作站,顯示 CA 輪替進度。

CA 成功輪替後,指令會結束,並自動產生新的 kubeconfig 檔案。您在指令中指定的 kubeconfig 檔案會替換為新檔案。指令會輸出類似以下的結果:

Beginning CA rotation with generated CA
...
Successfully rotated CA for admin cluster. The kubeconfig file
"/home/ubuntu/kubeconfig" has been updated.
Done rotating certificate-authorities

發布新的 kubeconfig 檔案

將新的管理員叢集 kubeconfig 檔案發布給所有叢集使用者。