UDCA-Pod-Fehler

Symptom

Nach dem Upgrade von Apigee Hybrid wird bei den Pods des Universal Data Collection Agent (UDCA) und des Connect-Agents ein Berechtigungsfehler ausgegeben.

Fehlermeldungen

Ihr UDCA-Pod gibt diesen Fehler in den Logs aus:

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

Außerdem gibt Ihr MART-Pod (Management API for Runtime) diesen Fehler in Bezug auf den Connect-Agent aus:

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

Allgemeine Diagnoseschritte

Rufen Sie das Apigee Hybrid-Must-Gather-Skript aus Ihrem Cluster und die Datei overrides.yaml für den Cluster ab.

Mögliche Ursachen

Ursache Beschreibung
Falsche Anmeldedaten Möglicherweise haben Sie in der Datei overrides.yaml die falschen Anmeldedaten eingegeben.
SA-Dateien im falschen Verzeichnis Ihre Dienstkontodateien befinden sich möglicherweise außerhalb des Verzeichnisses $APIGEE_HELM_CHARTS_HOME.

Ursache 1: Falsche Anmeldedaten

Die in Ihrer overrides.yaml-Datei für UDCA-, MART- und Connect Agent-Pods verwendeten serviceAccountPath oder serviceAccountRef sind falsch. Das kann daran liegen, dass die Datei overrides.yaml durch Automatisierung oder benutzerdefinierte Skripts generiert wurde, z. B. mit Terraform.

Diagnose

  1. Prüfen Sie die IAM-Rollen und -Berechtigungen, die den von Ihnen verwendeten Dienstkonten zugewiesen sind.

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

    Wobei:

    • SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Dienstkontos.
    • PROJECT_ID ist das Google Cloud-Projekt, das mit dem Dienstkonto verknüpft ist.
  2. Prüfen Sie die Datei overrides.yaml, um sicherzustellen, dass das referenzierte Dienstkonto mit dem in der IAM-Richtlinie und den IAM-Rollen des Projekts verwendeten Dienstkonto übereinstimmt.

Beispiel

Hier ist ein Beispiel für eine funktionierende IAM-Richtlinie für das Dienstkonto für eine Nicht-Produktionsumgebung:

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

Beispielausgabe:

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

Beispiel für die Validierung von Rollen:

gcloud projects get-iam-policy org-example

Beispielausgabe:

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

Führen Sie für die Produktion dieselben Befehle für das Produktionsdienstkonto für apigee-udca aus und prüfen Sie, ob die IAM-Rollen mit dem Abschnitt Installation übereinstimmen.

Lösung

Wenn die in Ihrer overrides.yaml verwendete Dienstkontodatei nicht mit dem richtigen Dienstkonto in der IAM-Bindung und den Rollen des Projekts übereinstimmt, sollten Sie das Dienstkonto löschen und neu erstellen und die in der overrides.yaml verwendete Dienstkontodatei korrigieren.

Ursache 2: Dienstkontodateien im falschen Verzeichnis

Dieses Problem tritt auf, wenn die Helm-Diagramme eingerichtet und das Dienstkonto erstellt werden.

Diagnose

Prüfen Sie den Speicherort der Datei mit den Anmeldedaten für Ihr Dienstkonto, um sicherzustellen, dass sie sich im richtigen Helm-Diagrammverzeichnis befindet. Die JSON-Datei des Dienstkontos sollte sich in den folgenden Verzeichnissen befinden:

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

Beispiel

Prüfen Sie beispielsweise die Helm-Diagrammverzeichnisse, indem Sie das Verzeichnis apigee-datastore auflisten, und gehen Sie für die Verzeichnisse apigee-org, apigee-env und apigee-telemetry genauso vor.

Beispielbefehl:

Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden:

pwd

Beispielausgabe:

/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

Lösung

Kopieren Sie die Dienstkontodatei in die vier Verzeichnisse (apigee-datastore, apigee-telemetry, apigee-org und apigee-env), wie im obigen Beispielbaum gezeigt, und führen Sie die Helm-Diagramme dann noch einmal aus.

Dienstkonto einrichten