聯絡。
本頁說明叢集管理員和安全防護工程師如何輪替為 GKE 控制層授權設定的憑證授權單位 (CA) 和服務帳戶簽署金鑰。
您必須熟悉下列概念:
規劃憑證輪替
本頁說明如何輪替控制層中的下列憑證元件:
- 叢集根 CA、匯總根 CA、etcd API 根 CA 和 etcd 對等互連根 CA。
- Kubernetes ServiceAccount 簽署和驗證金鑰。
您也可以輪替用於加密控制平面開機磁碟、etcd 磁碟和 etcd 內部備份的客戶管理加密金鑰,以供災難復原使用。 Google Cloud 詳情請參閱「輪替 etcd 和控制層開機磁碟加密金鑰」。
輪替憑證可避免 CA 過期、降低金鑰版本遭盜用的風險,並符合貴機構的安全性做法。如要規劃特定 GKE 控制層授權資源的輪替頻率,請考量下列事項:
- 根據預設,憑證授權單位服務 (CA 服務) 中由根 CA 簽署的 GKE 憑證,會在建立日期後一年失效。
- Cloud Key Management Service (Cloud KMS) 中的金鑰不會過期。只有在貴機構有金鑰輪替需求時,才需要手動輪替金鑰。為盡量減少執行中工作負載的中斷情形,請勿為這些金鑰設定自動金鑰輪替。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
現有叢集使用自行管理的 CA 和服務帳戶金鑰
找出下列 Google Cloud 專案的專案 ID:
- 金鑰專案:包含 Cloud KMS 和 CA Service 資源的專案。
- 叢集專案:包含 GKE 叢集的專案。
如要在這個頁面執行驗證工作,請確認已啟用下列資料存取稽核記錄:
- Cloud Key Management Service (KMS) API:
DATA_READ
- 憑證授權單位服務:
ADMIN_READ
如要啟用這些記錄類型,請參閱「啟用資料存取稽核記錄」。
- Cloud Key Management Service (KMS) API:
必要角色和權限
如要取得輪替客戶管理 CA 和金鑰所需的權限,請要求管理員授予下列 IAM 角色:
-
管理金鑰或金鑰版本:
金鑰專案的 Cloud KMS 管理員 (
roles/cloudkms.admin
) -
管理根 CA:
金鑰專案的CA 服務管理員 (
roles/privateca.admin
) -
設定叢集以使用新憑證:
叢集專案的 Kubernetes Engine 叢集管理員 (
roles/container.clusterAdmin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
限制
用於服務帳戶簽署和驗證的非對稱 Cloud KMS 金鑰,不支援自動金鑰輪替。
輪替服務帳戶簽署和驗證金鑰
設定 GKE 控制平面授權時,請將服務帳戶簽署金鑰和服務帳戶驗證金鑰新增至叢集。GKE 會使用這些金鑰簽署及驗證 Kubernetes ServiceAccount 的不記名權杖。輪替期間,您會將新金鑰新增至服務帳戶驗證金鑰清單,等待變更傳播,然後以新金鑰取代服務帳戶簽署金鑰。
如要輪替服務帳戶金鑰,請按照下列步驟操作:
取得服務帳戶簽署金鑰原始金鑰版本的完整資源名稱:
gcloud container clusters describe CLUSTER_NAME \ --project=CLUSTER_PROJECT_ID \ --location=CONTROL_PLANE_LOCATION \ --format="value(userManagedKeysConfig.serviceAccountSigningKeys)"
更改下列內容:
CLUSTER_NAME
:叢集名稱。CONTROL_PLANE_LOCATION
:叢集位置。CLUSTER_PROJECT_ID
:叢集專案的專案 ID。
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/ORIGINAL_SIGNING_KEY_VERSION
在這個輸出內容中,
SIGNING_KEY_NAME
是金鑰的名稱,ORIGINAL_SIGNING_KEY_VERSION
則是原始簽署金鑰版本的編號。為服務帳戶簽署金鑰建立新的金鑰版本:
gcloud kms keys versions create \ --key=SIGNING_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
更改下列內容:
SIGNING_KEY_NAME
:服務帳戶簽署金鑰的名稱。KEYRING_NAME
:金鑰所屬金鑰環的名稱。CONTROL_PLANE_LOCATION
:金鑰環的 Google Cloud 位置。KEY_PROJECT_ID
:主要專案的專案 ID。
取得新金鑰版本的完整資源名稱:
gcloud kms keys versions list \ --key=SIGNING_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1q
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/NEW_SIGNING_KEY_VERSION
在這個輸出內容中,
SIGNING_KEY_NAME
是金鑰的名稱,NEW_SIGNING_KEY_VERSION
則是新簽署金鑰版本的編號。將新金鑰版本新增至叢集的服務帳戶驗證金鑰集:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-verification-keys=ORIGINAL_KEY_VERSION_PATH,NEW_KEY_VERSION_PATH
更改下列內容:
ORIGINAL_KEY_VERSION_PATH
:原始簽署金鑰版本的完整資源名稱,來自本節第一個步驟的輸出內容。例如:projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/1
。NEW_KEY_VERSION_PATH
:上一步輸出內容中新簽署金鑰版本的完整資源名稱。例如:projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/2
。
叢集更新作業完成後,新的金鑰版本路徑最多可能需要 10 分鐘,才會傳播至 Kubernetes API 伺服器和每個 GKE API 端點。
如要確認新金鑰版本路徑已完全傳播,請執行下列操作:
從 GKE API 取得叢集簽署金鑰的公開元件,做為 JSON Web Key Set (JWKS):
curl https://container.googleapis.com/v1/projects/CLUSTER_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/clusters/CLUSTER_NAME/jwks
輸出結果會與下列內容相似:
{ "keys": [ { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY1_ID", "n": "KEY1_MODULUS", "e": "KEY1_EXPONENT" }, { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY2_ID", "n": "KEY2_MODULUS", "e": "KEY2_EXPONENT" } ] }
這項輸出內容必須有兩個金鑰項目,表示兩個金鑰版本都可在 GKE API 中使用。如果只看到一個金鑰項目,請等待 10 分鐘,然後重試該指令。
連線至叢集,以便執行
kubectl
指令:gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
從 Kubernetes API 伺服器取得叢集簽署金鑰的公開元件,做為 JWKS:
kubectl get --raw /openid/v1/jwks | jq
輸出結果會與下列內容相似:
{ "keys": [ { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY1_ID", "n": "KEY1_MODULUS", "e": "KEY1_EXPONENT" }, { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY2_ID", "n": "KEY2_MODULUS", "e": "KEY2_EXPONENT" } ] }
這項輸出內容必須有兩個主要項目,表示 Kubernetes API 伺服器提供這兩個主要版本。如果只看到一個金鑰項目,請等待 10 分鐘,然後重試該指令。
更新叢集,將新版金鑰做為服務帳戶簽署金鑰:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-signing-key=NEW_KEY_VERSION_PATH
確認新服務帳戶權杖使用新版金鑰:
建立 ServiceAccount:
kubectl create serviceaccount test-sa-1
為 ServiceAccount 建立權杖:
kubectl create token test-sa-1
從 Logging 擷取最近簽署的摘要:
export SIGNED_DIGEST=$(gcloud logging read \ 'resource.type="gke_cluster" '\ 'AND resource.labels.cluster_name="' CLUSTER_NAME '" '\ 'AND protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT" '\ 'AND protoPayload.metadata.subject="system:serviceaccount:default:test-sa-1"' \ --freshness=1h \ --bucket=_Required \ --location=global \ --view=_AllLogs \ --order=DESC \ --limit=1 \ --format="value(protoPayload.metadata.toBeSignedDigest)")
- 確認系統正在使用新的簽署金鑰版本:
gcloud logging read \ 'resource.type="cloudkms_cryptokeyversion" '\ 'AND protoPayload.methodName="AsymmetricSign" '\ 'AND protoPayload.request.digest.sha256="'${SIGNED_DIGEST}'"' \ --freshness=1h \ --bucket=_Default \ --location=global \ --view=_AllLogs \ --order=DESC \ --limit=1 \ --format="value(protoPayload.resourceName)" ``` The output is the resource path of the new signing key version.
等待叢集中使用原始服務帳戶簽署金鑰版本的每個權杖到期。根據預設,權杖生命週期為一小時, 可設定的上限為 24 小時。如要檢查叢集中設定的權杖生命週期,請執行下列指令:
kubectl get pods -A -o json | jq -r '.items[]?.spec?.volumes[]?.projected?.sources[]?.serviceAccountToken?.expirationSeconds | select(. != null)' | sort -nr | head -n 1
請等待上一步輸出內容中設定的權杖存留時間結束。這段時間過後,叢集中的所有繫結權杖都會使用新的服務帳戶簽署金鑰版本。
從叢集的驗證金鑰清單中移除原始金鑰版本:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-verification-keys=NEW_KEY_VERSION_PATH
選用:停用原始金鑰版本。確認原始金鑰版本未在使用中,且叢集運作正常後,即可刪除該金鑰版本。
除非您是為了回應重大事件而輪替金鑰,否則建議您等待幾天,再刪除原始金鑰版本。詳情請參閱「刪除及還原金鑰版本」。
完成這些步驟後,叢集中的所有新舊服務帳戶權杖都會以新版金鑰簽署。API 伺服器會拒絕使用原始金鑰版本的持有人權杖提出的任何要求,因為叢集設定中沒有原始金鑰版本。
輪替 GKE 控制層授權單位 CA
以下各節說明如何輪替叢集用於 GKE 控制平面授權的根 CA。
為 CA 建立新金鑰版本
為叢集根 CA 金鑰建立新的金鑰版本:
gcloud kms keys versions create \ --key=CLUSTER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
更改下列內容:
CLUSTER_CA_KEY_NAME
:叢集根 CA 金鑰的叢集名稱。KEYRING_NAME
:金鑰所屬金鑰環的名稱。CONTROL_PLANE_LOCATION
:金鑰環的 Google Cloud 位置。這與叢集位置相同。KEY_PROJECT_ID
:主要專案的專案 ID。
為匯總根 CA 金鑰建立新金鑰版本:
gcloud kms keys versions create \ --key=AGGREGATION_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
AGGREGATION_CA_KEY_NAME
替換為叢集的匯總根 CA 金鑰名稱。為 etcd API 根 CA 金鑰建立新的金鑰版本:
gcloud kms keys versions create \ --key=ETCD_API_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ETCD_API_CA_KEY_NAME
替換為叢集的 etcd API 根 CA 金鑰名稱。為 etcd 對等互連根 CA 金鑰建立新金鑰版本:
gcloud kms keys versions create \ --key=ETCD_PEER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ETCD_PEER_CA_KEY_NAME
替換為叢集的 etcd 對等互連根 CA 金鑰名稱。
建立新的根 CA
取得新叢集根 CA 金鑰版本的完整資源名稱:
gcloud kms keys versions list \ --key=CLUSTER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1q
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/CLUSTER_CA_KEY_NAME/cryptoKeyVersions/VERSION
在這個輸出內容中,
VERSION
是新金鑰版本的編號。在叢集 CA 集區中建立新的叢集根 CA:
gcloud privateca roots create CLUSTER_ROOT_CA_NAME \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=CLUSTER_CA_KEY_PATH \ --subject="CN=cluster-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID
更改下列內容:
CLUSTER_ROOT_CA_NAME
:新根 CA 的名稱。CLUSTER_CA_POOL_NAME
:叢集 CA 集區的名稱。CLUSTER_CA_KEY_PATH
:上一步輸出內容中新金鑰版本的完整資源名稱。ORGANIZATION
:貴機構名稱。
取得新匯總根 CA 金鑰版本的完整資源名稱:
gcloud kms keys versions list \ --key=AGGREGATION_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1q
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/AGGREGATION_CA_KEY_NAME/cryptoKeyVersions/VERSION
在匯總 CA 集區中建立新的匯總根 CA:
gcloud privateca roots create AGGREGATION_ROOT_CA_NAME \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=AGGREGATION_CA_KEY_PATH \ --subject="CN=aggregation-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID
更改下列內容:
AGGREGATION_ROOT_CA_NAME
:新匯總根 CA 的名稱。AGGREGATION_CA_POOL_NAME
:匯總 CA 集區的名稱。AGGREGATION_CA_KEY_PATH
:上一步輸出內容中新金鑰版本的完整資源名稱。
取得新 etcd API 根 CA 金鑰版本的完整資源名稱:
gcloud kms keys versions list \ --key=ETCD_API_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1q
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_API_CA_KEY_NAME/cryptoKeyVersions/VERSION
在 etcd API CA 集區中建立新的 etcd API 根 CA:
gcloud privateca roots create ETCD_API_ROOT_CA_NAME \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=ETCD_API_CA_KEY_PATH \ --subject="CN=etcd-api-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID
更改下列內容:
ETCD_API_ROOT_CA_NAME
:新 etcd API 根 CA 的名稱。ETCD_API_CA_POOL_NAME
:etcd API CA 集區的名稱。ETCD_API_CA_KEY_PATH
:上一步輸出內容中新金鑰版本的完整資源名稱。
取得新 etcd 對等互連根 CA 金鑰版本的完整資源名稱:
gcloud kms keys versions list \ --key=ETCD_PEER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1q
輸出結果會與下列內容相似:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_PEER_CA_KEY_NAME/cryptoKeyVersions/VERSION
在 etcd 對等互連 CA 集區中建立新的 etcd 對等互連根 CA:
gcloud privateca roots create ETCD_PEER_ROOT_CA_NAME \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=ETCD_PEER_CA_KEY_PATH \ --subject="CN=etcd-peer-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID
更改下列內容:
ETCD_PEER_ROOT_CA_NAME
:新 etcd 對等互連根 CA 的名稱。ETCD_PEER_CA_POOL_NAME
:etcd 對等互連 CA 集區的名稱。ETCD_PEER_CA_KEY_PATH
:上一步輸出內容中新金鑰版本的完整資源名稱。
繼續操作前,請按照「重新啟動控制層和節點」一節的說明,將根 CA 變更傳播至叢集信任套件。
以新的根 CA 取代原始根 CA
重新啟動控制層和節點後,請按照下列步驟操作:
啟用新的叢集根 CA:
gcloud privateca roots enable CLUSTER_ROOT_CA_NAME \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
啟用新的匯總根 CA:
gcloud privateca roots enable AGGREGATION_ROOT_CA_NAME \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
啟用新的 etcd API 根 CA:
gcloud privateca roots enable ETCD_API_ROOT_CA_NAME \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
啟用新的 etcd 對等互連根 CA:
gcloud privateca roots enable ETCD_PEER_ROOT_CA_NAME \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
停用原始叢集根 CA:
gcloud privateca roots disable ORIGINAL_CLUSTER_ROOT_CA \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ORIGINAL_CLUSTER_ROOT_CA
替換為要輪替的原始叢集根 CA 名稱。停用原始匯總根 CA:
gcloud privateca roots disable ORIGINAL_AGGREGATION_ROOT_CA \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ORIGINAL_AGGREGATION_ROOT_CA
替換為要輪替的原始匯總根 CA 名稱。停用原始 etcd API 根 CA:
gcloud privateca roots disable ORIGINAL_ETCD_API_ROOT_CA \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ORIGINAL_ETCD_API_ROOT_CA
替換為要輪替的原始 etcd API 根 CA 名稱。停用原始 etcd 對等互連根 CA:
gcloud privateca roots disable ORIGINAL_ETCD_PEER_ROOT_CA \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID
將
ORIGINAL_ETCD_PEER_ROOT_CA
替換為要輪替的原始 etcd 對等互連根 CA 名稱。此時,叢集中的所有新憑證都會由新的根 CA 核發。如要為每個節點上的
kubelet
簽發新憑證,請重新啟動控制層和節點。由於kubelet
憑證的效期很長,因此必須執行這個步驟。
如果叢集連續多天保持正常狀態,即可刪除原始根 CA,詳情請參閱下一節。
刪除原始根 CA
本節說明如何刪除原始根 CA。請先確認下列事項,再按照這些步驟操作:
- 以新的根 CA 取代原始根 CA 後,叢集仍維持健康狀態多日。
- 您已將原始根 CA 核發的所有憑證換成新憑證。
如要刪除原始根 CA,請使用 gcloud privateca roots delete
指令,如以下步驟所述。在這些指令中,即使 CA 具有未撤銷或未過期的憑證,--ignore-active-certificates
旗標也會在寬限期過後刪除 CA。
刪除原始叢集根 CA:
gcloud privateca roots delete ORIGINAL_CLUSTER_ROOT_CA \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificates
將
ORIGINAL_CLUSTER_ROOT_CA
替換為要輪替的原始叢集根 CA 名稱。刪除原始匯總根 CA:
gcloud privateca roots delete ORIGINAL_AGGREGATION_ROOT_CA \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificates
將
ORIGINAL_AGGREGATION_ROOT_CA
替換為要輪替的原始匯總根 CA 名稱。刪除原始 etcd API 根 CA:
gcloud privateca roots delete ORIGINAL_ETCD_API_ROOT_CA \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificates
將
ORIGINAL_ETCD_API_ROOT_CA
替換為要輪替的原始 etcd API 根 CA 名稱。刪除原始 etcd 對等互連根 CA:
gcloud privateca roots delete ORIGINAL_ETCD_PEER_ROOT_CA \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificates
將
ORIGINAL_ETCD_PEER_ROOT_CA
替換為要輪替的原始 etcd 對等互連根 CA 名稱。選用:將根 CA 的變更傳播至叢集信任組合。 如需操作說明,請參閱「重新啟動控制層和節點」一節。如果略過這個步驟,系統會在下次升級控制層和節點版本時,移除原始根 CA。
重新啟動控制層和節點
變更叢集的根 CA 設定 (例如啟用/停用根 CA 或撤銷憑證) 時,必須將這些變更傳播至叢集的信任組合。如要將變更傳播至叢集的信任憑證組合,請重新啟動控制層和節點 (在某些情況下)。
將叢集控制層升級至目前使用的版本。
找出控制層已使用的 GKE 版本:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --format="value(currentMasterVersion)"
更改下列內容:
CLUSTER_NAME
:GKE 叢集名稱。CLUSTER_VERSION
:叢集目前執行的 GKE 版本。CLUSTER_PROJECT_ID
:叢集專案的專案 ID。
升級控制層:
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --project=CLUSTER_PROJECT_ID
如果您使用 Kubernetes CertificateSigningRequests 手動產生憑證,請重新核發所有憑證,並將新憑證提供給 API 用戶端。
如要進行叢集根 CA 輪替,請將每個節點集區升級至目前使用的版本,藉此觸發節點重建作業。
找出節點集區使用的 GKE 版本:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --format="value(version)"
將
NODE_POOL_NAME
替換為要升級的節點集區名稱。升級節點集區:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --project=CLUSTER_PROJECT_ID
如果您在 CA 輪替期間執行本節中的步驟,請繼續進行輪替的下一個階段,也就是這個頁面上的下列其中一節: