Errore del pod UDCA

Sintomo

Dopo l'upgrade di Apigee Hybrid, i pod Universal Data Collection Agent (UDCA) e Connect Agent generano un errore relativo a un problema di autorizzazione.

Messaggi di errore

Il pod UDCA genera questo errore nei log:

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

Inoltre, il pod Management API for Runtime (MART) genera questo errore relativo all'agente Connect:

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

Passaggi comuni di diagnostica

Raccogli lo script Apigee hybrid must-gather dal cluster e il file overrides.yaml per il cluster.

Cause possibili

Causa Descrizione
Credenziali non corrette Potresti aver inserito le credenziali errate nel file overrides.yaml.
File SA nella directory sbagliata I file dell'account di servizio potrebbero trovarsi al di fuori della directory $APIGEE_HELM_CHARTS_HOME.

Causa 1: credenziali non corrette

L'elemento serviceAccountPath o serviceAccountRef utilizzato nel file overrides.yaml per i pod UDCA, MART e Connect Agent non è corretto. Ciò potrebbe essere dovuto al fatto che il file overrides.yaml è stato generato tramite automazione o script personalizzati, ad esempio utilizzando Terraform.

Diagnosi

  1. Verifica i ruoli e le autorizzazioni IAM assegnati ai service account che utilizzi.

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

    Dove:

    • SERVICE_ACCOUNT_EMAIL è l'indirizzo email del account di servizio.
    • PROJECT_ID è il progetto Google Cloud associato al account di servizio.
  2. Esamina il file overrides.yaml per assicurarti che il account di servizio a cui viene fatto riferimento corrisponda a quello utilizzato nei ruoli e nei criteri IAM del progetto.

Esempio

Un esempio di criterio IAM funzionante per il account di servizio per una configurazione non di produzione:

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

Esempio di output:

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

Esempio di convalida dei ruoli:

gcloud projects get-iam-policy org-example

Esempio di output:

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

Per la produzione, esegui gli stessi comandi sul account di servizio di produzione per apigee-udca e verifica i ruoli IAM che corrispondono alla sezione Installazione.

Risoluzione

Se il file del account di servizio utilizzato in overrides.yaml non corrisponde al account di servizio corretto nel binding e nei ruoli IAM del progetto, devi eliminare e ricreare il account di servizio e correggere il file del account di servizio utilizzato in overrides.yaml.

Causa 2: file SA nella directory errata

Questo problema si verifica durante la configurazione dei grafici Helm e la creazione del service account.

Diagnosi

Controlla la posizione del file delle credenziali del account di servizio per assicurarti che si trovi nella directory del grafico Helm corretta. Il file JSON dell'account di servizio deve trovarsi nelle seguenti directory:

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

Esempio

Ad esempio, controlla le directory dei grafici Helm elencando la directory apigee-datastore e fai lo stesso per le directory apigee-org, apigee-env e apigee-telemetry.

Comando di esempio:

Assicurati di trovarti nella directory corretta:

pwd

Esempio di output:

/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

Risoluzione

Copia il file del service account nelle quattro directory (apigee-datastore, apigee-telemetry, apigee-org e apigee-env) come indicato nella posizione dell'albero di esempio sopra, poi esegui di nuovo i grafici Helm.

Configurazione del service account