UDCA-Pod-Fehler

Symptom

Nach dem Upgrade von Apigee Hybrid geben Ihre Universal Data Collection Agent- (UDCA) und Connect Agent-Pods einen Berechtigungsfehler aus.

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 wird in Ihrem MART-Pod (Management API for Runtime) dieser Fehler in Bezug auf den Connect-Agent ausgegeben:

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-Script aus Ihrem Cluster und die Datei overrides.yaml für den Cluster ab.

Mögliche Ursachen

Ursache Beschreibung
Anmeldedaten falsch 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-Werte sind falsch. Das kann daran liegen, dass die overrides.yaml-Datei durch Automatisierung oder benutzerdefinierte Skripts wie Terraform generiert wurde.

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 Ihre overrides.yaml-Datei, um sicherzustellen, dass das referenzierte Dienstkonto mit dem in der Projekt-IAM-Richtlinie und den Rollen verwendeten Dienstkonto übereinstimmt.

Beispiel

Ein Beispiel für eine funktionierende IAM-Richtlinie für das Dienstkonto für eine Nichtproduktionsumgebung:

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: SA-Dateien im falschen Verzeichnis

Dieses Problem tritt beim Einrichten der Helm-Charts und beim Erstellen des Dienstkontos auf.

Diagnose

Prüfen Sie den Speicherort der Datei mit den Anmeldedaten Ihres Dienstkontos, 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. Wiederholen Sie diesen Vorgang für die Verzeichnisse apigee-org, apigee-env und apigee-telemetry.

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 Beispielbaum oben gezeigt, und führen Sie die Helm-Diagramme noch einmal aus.

Dienstkonto einrichten