本頁說明如何為 Google Kubernetes Engine (GKE) 叢集中的控制層執行 IP 輪替。
閱讀本頁面之前,請先熟悉憑證輪替。 建議您執行憑證輪替,包括 IP 輪替。不過,如果無法執行完整的憑證輪替,您可能需要執行獨立的 IP 輪替。
本頁面適用於負責維護 GKE 叢集生命週期的安全專家。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
執行 IP 輪替
IP 輪替程序有多個步驟:
- 啟動 IP 輪替時,控制層除了原本的 IP 位址之外,也會開始為新的 IP 位址提供服務。
- GKE 會重建節點集區,以使用新的 IP 位址,並遵守維護作業可用性。您也可以手動重建節點集區,方法是將節點集區版本升級至節點已執行的相同 GKE 版本。
- 啟動輪替之後,您必須更新叢集的 API 用戶端 (例如使用
kubectl
指令列介面的開發機器),開始透過新的 IP 位址與控制層通訊。 - 完成輪替後,控制層會停止透過先前的 IP 位址提供流量。
啟動 IP 位址輪替時,GKE 會為您重新建立節點,並遵守維護可用性。在Google Cloud Next 等重大活動期間,GKE 可能會暫停自動重新建立節點,避免服務中斷。如要進一步瞭解維護作業可用性如何影響 IP 位址輪替,以及叢集在輪替步驟期間會發生哪些類型的中斷,請參閱手動變更表格中 IP 位址輪替的資料列,瞭解如何使用節點升級策略並遵守維護政策,重新建立節點。GKE 必須有可用資源,才能更新節點。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。
如果未在啟動 IP 位址輪替後的七天內完成輪替作業,GKE 會嘗試為您完成輪替作業。如果叢集中的任何節點仍使用先前的 IP 位址,自動完成作業就會失敗,但 GKE 會持續嘗試完成作業,直到節點重新建立,作業才能完成。
啟動輪替後,您應手動追蹤並完成 IP 位址輪替。您隨時可以覆寫維護作業的可用性,並手動觸發特定步驟,確保憑證輪替作業完成。請勿依賴自動完成功能,這項功能會盡可能完成作業。
啟動輪替
如要啟動 IP 輪替,請執行下列指令:
gcloud container clusters update CLUSTER_NAME \ --start-ip-rotation
將
CLUSTER_NAME
替換為叢集名稱。輸出結果會與下列內容相似:
This will start an IP Rotation on cluster CLUSTER_NAME. The master will be updated to serve on a new IP address in addition to the current IP address. Google Kubernetes Engine will then schedule recreation of all nodes to point to the new IP address. If maintenance window is used, nodes are not recreated until a maintenance window occurs. See documentation on how to manually update nodes. This operation is long-running and will block other operations on the cluster (including delete) until it has run to completion. Do you want to continue (Y/n)?
這個指令會設定控制層提供兩個 IP 位址的服務,為原本位址和新位址兩個 IP 位址提供服務。
確認旋轉方向,並將 Shell 保持開啟,直到作業完成為止。
重新建立節點
重新設定 API 伺服器,以透過新的 IP 位址提供服務後,GKE 會自動更新節點,以使用新的 IP 位址。GKE 會將所有節點升級至最接近的支援節點版本,並重新建立節點。詳情請參閱「節點集區升級」。
根據預設,GKE 會在您啟動作業七天後,自動完成 IP 位址輪替。如果叢集有作用中的維護期間或排除項目,導致 GKE 無法在這七天內重新建立部分節點,IP 位址輪替作業一開始會無法完成。不過,GKE 會持續嘗試重建節點並完成輪替,直到維護可用性允許 GKE 繼續作業為止。
如果您使用維護排除項目或維護期間,可能會導致輪替失敗,請手動升級叢集,強制重新建立節點:
gcloud container clusters upgrade CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=VERSION
將
VERSION
替換為叢集已使用的相同 GKE 版本。詳情請參閱「自動維護作業會遵守 GKE 維護政策」。
查看節點集區重建進度
如要監控輪替作業,請執行下列指令:
gcloud container operations list \ --filter="operationType=UPGRADE_NODES AND status=RUNNING" \ --format="value(name)"
此指令會傳回節點升級作業的「作業 ID」。
如要對作業進行輪詢,請將作業 ID 傳送至下列指令:
gcloud container operations wait OPERATION_ID
系統會逐一重建節點集區,每個集區都有各自的作業。如果您有多個節點集區,請按照這些操作說明輪詢每個作業。
更新 API 用戶端
啟動 IP 輪替後,您必須更新叢集外的所有 API 用戶端 (例如開發人員機器上的 kubectl
),以指向新的 IP 位址。
如要更新 API 用戶端,請對每個用戶端執行下列指令:
gcloud container clusters get-credentials CLUSTER_NAME
更新硬式編碼 IP 位址和防火牆規則
如果您在環境中將控制層的 IP 位址硬式編碼,或是防火牆規則以控制層的 IP 位址為目標,請將位址更新為新的 IP 位址。如果您完成輪替,但未更新應用程式和防火牆規則中的 IP 位址,當 GKE 停止透過先前的控制平面 IP 位址提供服務時,這些資源可能會發生中斷情形。
完成輪替
更新叢集外部的 API 用戶端後,請完成輪替,將控制平面設成只使用新 IP 位址提供服務。
若要完成輪替,請執行下列指令:
gcloud container clusters update CLUSTER_NAME \
--complete-ip-rotation
輸出結果會與下列內容相似:
This will complete the in-progress IP Rotation on cluster CLUSTER_NAME.
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project PROJECT_ID --region COMPUTE_REGION
CLUSTER_NAME`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.
如果 IP 位址輪替作業無法完成,並傳回類似下列的錯誤訊息,請參閱「錯誤 400:節點集區需要重新建立」:
ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.
如果未在啟動 IP 位址輪替後的七天內完成輪替作業,GKE 會嘗試為您完成輪替作業。如果叢集中的任何節點仍使用先前的 IP 位址 (可能是因為維護可用性和相關限制導致節點無法重新建立),自動完成作業就會失敗,但 GKE 會持續嘗試完成作業,直到節點重新建立,作業才能完成。