Errore del pod UDCA

Sintomo

Dopo l'upgrade di Apigee Hybrid, i pod dell'agente di raccolta dei dati universale (UDCA) e dell'agente di connessione generano un errore relativo alle autorizzazioni.

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 dell'API di gestione per il runtime (MART) genera questo errore relativo all'agente di connessione:

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

Passaggi comuni per la diagnosi

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

Cause possibili

Causa Descrizione
Credenziali non corrette Potresti aver inserito le credenziali sbagliate nel file overrides.yaml.
File SA che si trovano nella directory sbagliata I file del service account (SA) potrebbero trovarsi al di fuori della directory $APIGEE_HELM_CHARTS_HOME.

Causa 1: credenziali errate

Il valore 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 nelle policy IAM del progetto.

Esempio

Esempio di policy 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 corrispondenti alla sezione Installazione.

Risoluzione

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

Causa 2: i file SA si trovano nella directory sbagliata

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 del 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 essere 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 nell'esempio di posizione dell'albero riportato sopra, quindi esegui nuovamente i grafici Helm.

Configurazione del service account