Erreur de pod UDCA

Problème constaté

Après la mise à niveau d'Apigee Hybrid, vos pods Universal Data Collection Agent (UDCA) et Connect Agent génèrent une erreur d'autorisation.

Messages d'erreur

Votre pod UDCA génère l'erreur suivante dans les journaux :

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

De plus, votre pod API Management pour les données d'exécution (MART) génère l'erreur suivante concernant l'agent Connect :

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

Étapes de diagnostic courantes

Collectez le script must-gather Apigee hybrid à partir de votre cluster et le fichier overrides.yaml pour le cluster.

Causes possibles

Cause Description
Identifiants incorrects Vous avez peut-être saisi les mauvais identifiants dans le fichier overrides.yaml.
Fichiers SA situés dans le mauvais répertoire Vos fichiers de compte de service peuvent se trouver en dehors du répertoire $APIGEE_HELM_CHARTS_HOME.

Cause 1 : Identifiants incorrects

Les serviceAccountPath ou serviceAccountRef utilisés dans votre fichier overrides.yaml pour les pods UDCA, MART et Connect Agent sont incorrects. Cela peut être dû au fait que le fichier overrides.yaml a été généré par le biais d'une automatisation ou de scripts personnalisés, par exemple à l'aide de Terraform.

Diagnostic

  1. Vérifiez les rôles et autorisations IAM attribués aux comptes de service que vous utilisez.

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

    Où :

    • SERVICE_ACCOUNT_EMAIL est l'adresse e-mail du compte de service.
    • PROJECT_ID correspond au projet Google Cloud associé au compte de service.
  2. Examinez votre fichier overrides.yaml pour vous assurer que le compte de service référencé correspond à celui utilisé dans la stratégie et les rôles IAM du projet.

Exemple

Voici un exemple de stratégie IAM fonctionnelle pour le compte de service d'une configuration non destinée à la production :

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

Exemple de résultat :

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

Exemple de validation des rôles :

gcloud projects get-iam-policy org-example

Exemple de résultat :

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

Pour la production, exécutez les mêmes commandes sur le compte de service de production pour apigee-udca et recherchez les rôles IAM correspondant à la section Installation.

Solution

Si le fichier de compte de service utilisé dans votre overrides.yaml ne correspond pas au compte de service approprié dans les liaisons et rôles IAM du projet, vous devez supprimer et recréer le compte de service, puis corriger le fichier de compte de service utilisé dans le overrides.yaml.

Cause 2 : Fichiers SA situés dans le mauvais répertoire

Ce problème se produit lors de la configuration des graphiques Helm et de la création du compte de service.

Diagnostic

Vérifiez l'emplacement de votre fichier d'identifiants de compte de service pour vous assurer qu'il se trouve dans le répertoire de chart Helm approprié. Le fichier JSON du compte de service doit se trouver dans les répertoires suivants :

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

Exemple

Par exemple, vérifiez les répertoires de charts Helm en listant le répertoire apigee-datastore, puis faites de même pour les répertoires apigee-org, apigee-env et apigee-telemetry.

Exemple de commande :

Assurez-vous de vous trouver dans le bon répertoire :

pwd

Exemple de résultat :

/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

Solution

Copiez le fichier du compte de service dans les quatre répertoires (apigee-datastore, apigee-telemetry, apigee-org et apigee-env) en suivant l'exemple d'arborescence ci-dessus, puis réexécutez les graphiques Helm.

Configurer un compte de service