UDCA Pod 錯誤

問題

升級 Apigee Hybrid 後,通用資料收集代理程式 (UDCA) 和 Connect 代理程式 Pod 會擲回權限問題錯誤。

錯誤訊息

UDCA Pod 會在記錄中擲回這項錯誤:

Permission 'apigee.runtimeconfigs.get' denied on resource 
'organizations/org-example/runtimeConfig' (or it may not 
exist)\\\",\\n  \\\"status\\\": \\\"PERMISSION_DENIED\\

此外,您的 Management API for Runtime (MART) Pod 會針對 Connect Agent 擲回這項錯誤:

Permission 'apigeeconnect.endpoints.connect' denied on resource 
'//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' 
(or it may not exist).

常見的診斷步驟

從叢集收集 Apigee 混合式 must-gather 指令碼,以及叢集的 overrides.yaml 檔案。

可能原因

原因 說明
憑證不正確 您可能在 overrides.yaml 檔案中輸入了錯誤的憑證。
SA 檔案位於錯誤的目錄 您的服務帳戶 (SA) 檔案可能位於 $APIGEE_HELM_CHARTS_HOME 目錄外。

原因 1:憑證不正確

您在 UDCA、MART 和 Connect Agent Pod 的 overrides.yaml 檔案中使用的 serviceAccountPathserviceAccountRef 不正確。這可能是因為 overrides.yaml 檔案是透過自動化或自訂指令碼產生,例如使用 Terraform。

診斷

  1. 確認指派給所用服務帳戶的 IAM 角色和權限。

    gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
    gcloud projects get-iam-policy PROJECT_ID
    

    其中:

    • SERVICE_ACCOUNT_EMAIL 是服務帳戶的電子郵件地址。
    • PROJECT_ID 是與服務帳戶相關聯的 Google Cloud 專案。
  2. 檢查 overrides.yaml 檔案,確認參照的服務帳戶與專案 IAM 政策和角色中使用的服務帳戶相符。

範例

以下是服務帳戶適用的身分與存取權管理政策範例,適用於非正式環境設定:

gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com

輸出內容範例:

bindings:
- members:
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-backup-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-default]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-guardrails-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-connect-agent-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-mart-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-metrics-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-runtime-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-synchronizer-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-udca-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-watcher-org-example-sa]
  role: roles/iam.workloadIdentityUser
etag: BwYw33-1N8s=
version: 1

以下是驗證角色的範例:

gcloud projects get-iam-policy org-example

輸出內容範例:

bindings:
- members:
  - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com
  role: roles/apigee.analyticsAgent
- members:
  - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com
  role: roles/apigee.runtimeAgent
- members:
  - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com
  role: roles/apigee.synchronizerManager
- members:
  - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com
  role: roles/apigeeconnect.Agent
- members:
  - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com
  role: roles/storage.objectAdmin

在正式環境中,針對 apigee-udca 的正式服務帳戶執行相同指令,並檢查與安裝章節相符的 IAM 角色。

解決方法

如果 overrides.yaml 中使用的服務帳戶檔案與專案 IAM 繫結和角色中的正確服務帳戶不符,請刪除並重新建立服務帳戶,然後修正 overrides.yaml 中使用的服務帳戶檔案。

原因 2:SA 檔案位於錯誤的目錄

設定 Helm 圖表並建立服務帳戶時,就會發生這個問題。

診斷

檢查服務帳戶憑證檔案的位置,確認檔案位於正確的 Helm 圖表目錄中。服務帳戶 JSON 檔案應位於下列目錄:

  • $APIGEE_HELM_CHARTS_HOME/apigee-datastore
  • $APIGEE_HELM_CHARTS_HOME/apigee-telemetry
  • $APIGEE_HELM_CHARTS_HOME/apigee-org
  • $APIGEE_HELM_CHARTS_HOME/apigee-env

範例

舉例來說,列出 apigee-datastore 目錄即可檢查 Helm 圖表目錄,並對 apigee-orgapigee-envapigee-telemetry 目錄執行相同操作。

指令範例:

確認您位於正確的目錄:

pwd

輸出內容範例:

/usr/local/home/example/Hybrid/helm-charts
├── apigee-datastore
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-env
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-ingress-manager
│   └── templates
├── apigee-operator
│   ├── etc
│   │   ├── crds
│   │   │   ├── crd
│   │   │   │   ├── bases
│   │   │   │   └── patches
│   │   │   └── default
│   │   ├── examples
│   │   │   └── helmfiles
│   │   └── tools
│   │       └── service-accounts
│   │           ├── org-example-apigee-cassandra.json
│   │           ├── org-example-apigee-logger.json
│   │           ├── org-example-apigee-mart.json
│   │           ├── org-example-apigee-metrics.json
│   │           ├── org-example-apigee-runtime.json
│   │           ├── org-example-apigee-synchronizer.json
│   │           ├── org-example-apigee-udca.json
│   │           └── org-example-apigee-watcher.json
│   └── templates
├── apigee-org
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-redis
│   └── templates
├── apigee-telemetry
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-virtualhost
│   ├── certs
│   └── templates
└── cluster-check
29 directories, 12 files

解決方法

按照上述範例樹狀結構位置,將服務帳戶檔案複製到四個目錄 (apigee-datastoreapigee-telemetryapigee-orgapigee-env),然後重新執行 Helm 圖表。

服務帳戶設定