UDCA pod 错误

症状

升级 Apigee Hybrid 后,您的通用数据收集代理 (UDCA) 和 Connect Agent 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 代理相关的错误:

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

常见诊断步骤

从集群中收集 Apigee Hybrid Must-Gather 脚本和集群的 overrides.yaml 文件。

可能的原因

原因 说明
凭据不正确 您可能在 overrides.yaml 文件中输入了错误的凭据。
SA 文件位于错误的目录中 您的服务账号 (SA) 文件可能位于 $APIGEE_HELM_CHARTS_HOME 目录之外。

原因 1:凭据不正确

您在 overrides.yaml 文件中为 UDCA、MART 和 Connect Agent pod 使用的 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 政策和角色中使用的服务账号一致。

示例

以下是适用于非生产环境设置的服务账号的有效 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 图表。

服务账号设置