排解 Backup for GKE 的權限錯誤

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

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

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

Backup for GKE 會建立 GKE 叢集永久磁碟的快照。快照會存放在您的 Google Cloud 專案 (也稱為消費端專案) 中,並在管理的租戶專案中建立快照。 Google Cloud 租戶專案位於 google.com 機構內,與您自己的機構分開。

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

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

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

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

  3. 找出用於加密永久磁碟的下列 CMEK 資訊:

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

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

    • 位置:金鑰所在位置。 Google Cloud 例如 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.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

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

    如果指令執行成功,輸出內容會與下列內容類似:

    - members:
    - serviceAccount:service-987654321098@compute-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」錯誤訊息。

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

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

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

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

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

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

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

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

嘗試備份 PersistentVolumeClaim 時,如果 Backup for GKE 服務代理程式缺少身分與存取權管理繫結,就會發生錯誤 100010106,並顯示 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent 錯誤訊息。

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

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

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

    • 使用 Google Cloud 控制台中的 Google Cloud 專案資訊主頁。

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

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

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

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

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

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

    • 位置:CMEK 所在的 Google Cloud 位置BackupPlan。例如 globalus-central1

  3. 如要授予 Backup for 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.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。

  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.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.iam.gserviceaccount.com 格式) 是 GKE 叢集與 Google Cloud服務互動的必要條件。備份計畫使用客戶自行管理的加密金鑰 (CMEK)。這個服務代理程式需要使用您的 CMEK 加密及解密備份資料的權限。如果備份方案在 CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,從叢集啟動的備份作業就會失敗,並顯示 permission denied 錯誤。

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

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

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

    • 使用 Google Cloud 控制台中的 Google Cloud 專案資訊主頁。

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

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

      PROJECT_ID 替換為您的專案 ID。

  3. 找出下列 CMEK 資訊:

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

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

    • 位置:金鑰所在位置。 Google Cloud 例如 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.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

    • PROJECT_NUMBER:專案名稱。

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

     - members:
     - serviceAccount:service-123456789012@container-engine-robot.iam.gserviceaccount.com
     role: roles/cloudkms.cryptoKeyEncrypterDecrypter
     ```
    
  5. 重新嘗試 Backup for GKE 作業。如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,以取得進一步協助。

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

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

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

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

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

    kubectl get pvc --all-namespaces -o wide
    
  2. 執行 kubectl describe pv 指令,判斷由 Backup for 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 團隊聯絡。

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

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

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

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

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

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

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

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

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

  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 的原因,或是無法解決已識別的問題,可以在備份計畫中啟用寬鬆模式。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

後續步驟