排解 GKE 備份 的權限錯誤

本頁面說明使用 GKE 備份 時可能遇到的權限錯誤、執行動作時應注意的事項,以及如何解決錯誤。

錯誤 100010101:無法備份 PersistentVolumeClaim - 租戶專案缺少 IAM 繫結

嘗試備份 PersistentVolumeClaim 時,如果由於租戶專案缺少 Identity and Access Management 繫結而失敗,就會發生錯誤 100010101,並顯示「Failed to backup PersistentVolumeClaim - Missing IAM binding for tenant project」錯誤訊息。

GKE 備份會建立 GKE 叢集永久磁碟的快照。快照會位於您的 Cloud de Confiance by S3NS 專案 (也稱為消費者專案) 中,並在管理的租戶專案中建立快照。 Cloud de Confiance by S3NS 租戶專案位於 google.com 機構內,與您自己的機構分開。

租戶專案中的服務代理需要特定權限,才能使用客戶自行管理的加密金鑰 (CMEK),為叢集 PersistentVolumeClaim 參照的 Persistent Disk 加密。這項權限會加密及解密快照資料。如果服務代理程式在磁碟的 CMEK 上沒有 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,備份作業就會失敗。service-TENANT_PROJECT_NUMBER@compute-system.s3ns-system.iam.gserviceaccount.com

如要解決這項錯誤,請按照下列指示操作:

  1. 確認您具備足夠的 IAM 權限,可在 Cloud de Confiance 控制台中修改 Cloud Key Management Service 金鑰的 IAM 政策,例如 roles/cloudkms.adminroles/owner

  2. 使用備份作業失敗時 status reason 訊息中的 TENANT_PROJECT_NUMBER 值,找出租戶專案的 Compute Engine 服務代理人。例如:service-TENANT_PROJECT_NUMBER@compute-system.s3ns-system.iam.gserviceaccount.com

  3. 找出用於加密 Persistent Disk 的下列 CMEK 資訊:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:金鑰所在位置。 Cloud de Confiance by S3NS 例如 globalus-central1

  4. 如要將 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色授予租戶專案的 Compute Engine 服務代理人,請使用 Google Cloud CLI 執行 gcloud kms keys add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-TENANT_PROJECT_NUMBER@compute-system.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。 例如 globalus-central1

    • TENANT_PROJECT_NUMBER:從備份作業失敗的 status reason 訊息中取得的租戶專案編號。

    如果指令執行成功,輸出內容如下所示:

    - members:
    - serviceAccount:service-987654321098@compute-system.s3ns-system.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  5. 重新測試備份作業。如果作業仍未成功,請聯絡 Cloud Customer Care 團隊,尋求進一步協助。

錯誤 100010104:無法備份 PersistentVolumeClaim - 建立快照時違反組織政策限制

如果嘗試備份 PersistentVolumeClaim 時,因違反建立快照期間的機構政策限制而失敗,就會發生錯誤 100010104,並顯示「Failed to backup PersistentVolumeClaim - Org policy constraint violation while creating snapshot」錯誤訊息。

GKE 備份會建立 GKE 叢集永久磁碟的快照。快照會位於 Cloud de Confiance by S3NS 專案 (也稱為消費者專案) 中,並在 Cloud de Confiance by S3NS管理的租戶專案中建立。租戶專案位於 google.com 機構內,與您自己的機構分開。

機構政策會規定您可以在何處建立儲存空間資源。Constraint constraints/compute.storageResourceUseRestrictions violated 這項錯誤表示資源或快照違反政策,因為是在不屬於允許的機構結構的租戶專案中建立。由於租戶專案位於 Google 的機構內,因此超出您定義的政策範圍,導致備份失敗。

如要解決這項錯誤,請按照下列指示操作:

  1. 找出實作 constraints/compute.storageResourceUseRestrictions 限制的機構政策。如要進一步瞭解如何使用 Cloud de Confiance 控制台查看組織政策,請參閱「查看組織政策」。

  2. 修改 constraints/compute.storageResourceUseRestrictions 政策,將 GKE 備份 使用的 folders/77620796932 租戶專案資料夾納入許可清單。

  3. 將資料夾新增至允許清單後,請儲存政策變更。

  4. 組織政策更新並傳播後 (通常需要幾分鐘),請重新測試備份作業。備份作業應在不違反儲存空間資源使用限制的情況下進行。如果作業仍未成功,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100010106:無法備份 PersistentVolumeClaim - GKE 備份服務代理人缺少 IAM 繫結

如果嘗試備份 PersistentVolumeClaim 時,因 GKE 備份 服務代理程式缺少 Identity and Access Management 繫結而失敗,就會發生錯誤 100010106,並顯示 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent 錯誤訊息。

GKE 備份需要權限,才能使用 BackupPlan 的客戶自行管理加密金鑰 (CMEK) 加密及解密磁碟區 Persistent Disk。如果「GKE 備份」服務代理在 BackupPlan CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,備份作業就會失敗。

如要解決這項錯誤,請按照下列指示操作:

  1. 找出專案專屬的 Google 代管 GKE 備份服務代理程式。例如:service-PROJECT_NUMBER@gcp-sa-gkebackup.s3ns-system.iam.gserviceaccount.com。您可以透過下列方法找出專案編號:

    • 使用 Cloud de Confiance 控制台中的 Cloud de Confiance by S3NS 專案資訊主頁。

    • 使用 Google Cloud CLI 執行 gcloud projects describe 指令:

      gcloud projects describe PROJECT_ID –format="value(projectNumber)"
      

      PROJECT_ID 替換為專案的專屬名稱。

  2. 找出下列 CMEK 詳細資料:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:您的 BackupPlan CMEK 所在位置。 Cloud de Confiance by S3NS 例如 globalus-central1

  3. 如要授予「GKE 備份」服務代理人 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,請使用 Google Cloud CLI 執行 gcloud kms keys add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。 例如 globalus-central1

    • PROJECT_NUMBER:您的 Cloud de Confiance by S3NS 專案編號。

  4. 確認您對 Cloud Key Management Service 金鑰具有必要的 Identity and Access Management 權限。例如 roles/cloudkms.adminroles/owner

  5. 確認您已獲得權限。在先前 gcloud kms keys add-iam-policy-binding 指令的輸出內容中,尋找類似下列的項目:

    -members:
    -serviceAccount:service-123456789012@gcp-sa-gkebackup.s3ns-system.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  6. 授予必要權限後,請重新測試備份作業。 如果作業未順利完成,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100010107:無法備份 PersistentVolumeClaim - 缺少 IAM 繫結 - 代理程式服務帳戶 (KCP)

當您嘗試執行 Backup for GKE 備份作業,但 Google Kubernetes Engine 叢集服務代理程式無法存取客戶自行管理的加密金鑰 (CMEK) 時,就會發生錯誤 100010107,並顯示 Failed to backup PVC - Missing IAM binding - agent service account (KCP) 訊息。

Google Kubernetes Engine 叢集服務代理程式 (通常採用 service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com 格式) 是 GKE 叢集與 Cloud de Confiance by S3NS服務互動的必要條件。備份方案使用客戶自行管理的加密金鑰 (CMEK)。這項服務代理程式需要使用您的 CMEK 加密及解密備份資料的權限。如果備份方案缺少 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,從叢集啟動的備份作業會失敗,並顯示 permission denied 錯誤。

如要解決這項錯誤,請按照下列疑難排解說明操作:

  1. 確認您具備適當的權限,可修改 Cloud Key Management Service 金鑰的 IAM 政策。例如 cloudkms.adminroles/owner

  2. 找出 Google Kubernetes Engine 叢集服務代理程式。這項服務代理程式是由 Cloud de Confiance by S3NS 為 GKE 叢集自動建立及管理,例如 service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com。您需要專案編號才能組成完整的服務帳戶。您可以使用下列其中一種方法找出專案編號:

    • 使用 Cloud de Confiance 控制台中的 Cloud de Confiance by S3NS 專案資訊主頁。

    • 使用 Google Cloud CLI 執行 gcloud projects describe 指令:

      gcloud projects describe PROJECT_ID –-format="value(projectNumber)"
      

      PROJECT_ID 替換為專案 ID。

  3. 找出下列 CMEK 資訊:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:金鑰所在位置。 Cloud de Confiance by S3NS 例如 globalus-central1

  4. 在 CMEK 層級授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。Google Kubernetes Engine 服務代理程式需要加密金鑰的權限。如要授予 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,請使用 Google Cloud CLI 執行 gcloud kms key add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。 例如 globalus-central1

    • PROJECT_NUMBER:專案名稱。

    輸出結果會與下列內容相似:

     - members:
     - serviceAccount:service-123456789012@container-engine-robot.s3ns-system.iam.gserviceaccount.com
     role: roles/cloudkms.cryptoKeyEncrypterDecrypter
     ```
    
  5. 重新嘗試執行 GKE 備份 作業。如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100010109:無法備份 PersistentVolumeClaim - DiskSettings 政策不允許目標備份區域

如果DiskSettings存取位置政策不允許目標備份區域,就會發生錯誤 100010109

瞭解錯誤

如果客戶的 DiskSettings 存取位置政策設為 SPECIFIC_REGIONS,且叢集中有部分磁碟位置受到這項政策限制,就會發生這項錯誤。由於這項存取位置政策只允許特定區域做為有效快照建立位置,如果目標儲存位置不在這份清單中,系統就會拒絕備份。發生這種情況時,快照建立作業會失敗,並顯示類似下列的訊息:

No permission to read source disk in us-central1 from target snapshot in us-east1.

疑難排解步驟

  1. 找出來源和目標區域:查看錯誤訊息,找出遭拒的來源磁碟位置 (例如 us-central1) 和目標快照區域 (例如 us-east1)。
  2. 更新 DiskSettings 政策:如要修正問題,您必須更新 DiskSettings,允許叢集中參照的磁碟位置使用目標儲存位置。如要達成這個目標,請使用 Google Cloud CLI,將目標區域新增至存取位置許可清單。

    • 如果是區域磁碟 (例如在 us-central1-a 中新增 us-east1 做為磁碟的允許區域):

      gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --zone=us-central1-a
      
    • 如果是區域磁碟 (例如,將 us-east1 新增為 us-central1 中磁碟的允許區域):

      gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --region=us-central1
      
  3. 重新測試備份作業:更新 DiskSettings 以允許目標備份區域後,請重新嘗試備份作業。

錯誤 100020101:無法備份 PersistentVolumeClaim - PersistentVolumeClaim 繫結至不支援的 PersistentVolume 類型

如果嘗試備份 PersistentVolumeClaim 時發生錯誤 100020101,可能是因為 PersistentVolumeClaim 繫結至不支援的 PersistentVolume 類型。這個錯誤會導致下列錯誤訊息: PersistentVolumeClaims are bound to PersistentVolumes of unsupported types and cannot be backed up.

如果 GKE 備份作業遇到繫結至 PersistentVolumePersistentVolumeClaim,而該 PersistentVolume 使用的磁碟區類型不支援 GKE 備份資料備份,就會發生這個錯誤。GKE 備份主要支援備份 Persistent Disk 磁碟區的資料。如果 PersistentVolumeClaim 繫結至非永久磁碟的 PersistentVolumePersistentVolumeClaim 的資料備份作業就會失敗。

如要解決這項錯誤,請按照下列疑難排解說明操作:

  1. 執行 kubectl get pvc 指令,列出所有 PersistentVolumeClaims 和繫結至這些 PersistentVolumeClaimsPersistentVolumes。請參閱這份清單,找出由不支援的磁碟區類型支援的 PersistentVolumes

    kubectl get pvc --all-namespaces -o wide
    
  2. 執行 kubectl describe pv 指令,判斷由 GKE 備份不支援的磁碟區類型備份的 PersistentVolume 磁碟區類型:

    kubectl describe pv PERSISTENT_VOLUME_NAME
    

    更改下列內容:

    PERSISTENT_VOLUME_NAMEPersistentVolume 的名稱,該名稱在輸出內容中列為資料欄 VOLUME,且具有不支援的磁碟區類型。

    在輸出內容中,使用 SourceDriver 欄位取得磁碟區佈建者詳細資料:

    • 支援的永久磁碟:輸出內容與 Source.Driver: pd.csi.storage.gke.ioSource.Type:GCEPersistentDisk 類似。

    • 針對導致錯誤的不支援類型:輸出內容會是「非永久磁碟」驅動程式,例如 Source.Driver:filestore.csi.storage.gke.io

  3. 請使用下列其中一種方法解決錯誤:

    • 遷移至 Persistent Disk 磁碟區:建議您使用這個方法備份所有資料。如要備份實際磁碟區資料,必須使用永久磁碟,也就是將資料從不支援的磁碟區類型遷移至新的永久磁碟 CSI 磁碟區。如需遷移 Persistent Disk 磁碟區的相關協助,請與 Cloud Customer Care 團隊聯絡。

    • 在 GKE 備份中啟用寬鬆模式:如果不需要備份不受支援的磁碟區資料,建議使用這個方法。如果遷移資料不可行或不必要 (例如磁碟區是由外部服務備份,且您打算在還原作業期間重新附加),可以將 Backup for GKE 備份方案設為允許備份作業以寬鬆模式進行。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

  4. 重新嘗試執行 GKE 備份 作業。根據您選擇的錯誤解決方法,GKE 備份 作業的行為如下:

    • 如果您已遷移至永久磁碟磁碟區,備份作業應會成功備份磁碟區 (包括資料)。

    • 如果啟用寬鬆模式,備份作業應該會成功,但系統不會備份不支援磁碟區的資料。

如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100020104:無法備份 PersistentVolumeClaim - PersistentVolumeClaim 未繫結至 PersistentVolume

嘗試備份 PersistentVolumeClaim 時,如果 PersistentVolumeClaim 未繫結至 PersistentVolume,就會發生錯誤 100020104。錯誤會導致下列錯誤訊息:Failed to backup PVC - PVC Not Bound to a Persistent Volume

當 GKE 備份 作業嘗試備份未成功繫結至 PersistentVolumePersistentVolumeClaim 時,就會發生這個錯誤。PersistentVolumeClaim 必須先繫結至 PersistentVolume,才能供 Pod 等耗用工作負載使用,並由 GKE 備份服務備份。如果 PersistentVolumeClaim 仍處於 Pending 狀態,表示沒有合適的 PersistentVolume 可用,或無法佈建或繫結,導致備份作業失敗。PersistentVolumeClaim 保持未繫結狀態的常見原因,是其相關聯的 StorageClass 使用 WaitForFirstConsumer 繫結模式,但沒有 Pod 或其他工作負載嘗試取用 PersistentVolumeClaim

如要解決這項錯誤,請按照下列疑難排解說明操作:

  1. 如要檢查叢集中所有 PersistentVolumeClaims 的狀態,並找出未繫結的 PersistentVolumeClaim,請執行 kubectl get pvc 指令:

    kubectl get pvc --all-namespaces | grep `Pending`
    
  2. 找出未繫結至 PersistentVolumePersistentVolumeClaim 後,請執行 kubectl describe pvc 指令,擷取未繫結 PersistentVolumeClaim 的相關資訊:

    kubectl describe pvc PVC_NAME -n NAMESPACE_NAME
    

    更改下列內容:

    • PVC_NAME:備份失敗的 PersistentVolumeClaim名稱。

    • NAMESPACE_NAMEPersistentVolumeClaim 所在的命名空間名稱。

    說明顯示後,請使用 StatusEvents 欄位,判斷 PersistentVolumeClaim 是否繫結至 PersistentVolume。如果仍無法判斷 PersistentVolumeClaim 未繫結至 PersistentVolume 的原因,或是無法解決已識別的問題,可以在備份計畫中啟用寬鬆模式。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

後續步驟