Error de pod de UDCA

Síntoma

Después de actualizar Apigee hybrid, los pods de tu agente general de recogida de datos (UDCA) y de Connect Agent generan un error de problema de permisos.

Mensajes de error

Tu pod de UDCA muestra este error en los registros:

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

Además, tu pod de la API Management for Runtime (MART) muestra este error en relación con el agente de conexión:

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

Pasos de diagnóstico habituales

Recoge la secuencia de comandos Apigee hybrid must-gather de tu clúster y el archivo overrides.yaml del clúster.

Posibles motivos

Causa Descripción
Credenciales incorrectas Es posible que hayas introducido las credenciales incorrectas en el archivo overrides.yaml.
Los archivos de SA se encuentran en un directorio incorrecto Es posible que los archivos de tu cuenta de servicio (SA) se encuentren fuera del directorio $APIGEE_HELM_CHARTS_HOME.

Causa 1: Credenciales incorrectas

Los serviceAccountPath o serviceAccountRef que se usan en el archivo overrides.yaml de los pods de UDCA, MART y Connect Agent son incorrectos. Esto puede deberse a que el archivo overrides.yaml se haya generado mediante automatización o secuencias de comandos personalizadas, como Terraform.

Diagnóstico

  1. Verifica los roles y permisos de gestión de identidades y accesos asignados a las cuentas de servicio que usas.

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

    Donde:

    • SERVICE_ACCOUNT_EMAIL es la dirección de correo de la cuenta de servicio.
    • PROJECT_ID es el proyecto de Google Cloud asociado a la cuenta de servicio.
  2. Revisa el archivo overrides.yaml para asegurarte de que la cuenta de servicio a la que se hace referencia coincide con la que se usa en la política y los roles de gestión de identidades y accesos del proyecto.

Ejemplo

Ejemplo de una política de gestión de identidades y accesos que funciona para la cuenta de servicio de una configuración que no es de producción:

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

Ejemplo de salida:

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

Ejemplo de validación de roles:

gcloud projects get-iam-policy org-example

Ejemplo de salida:

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

En producción, ejecuta los mismos comandos en la cuenta de servicio de producción de apigee-udca y comprueba los roles de gestión de identidades y accesos que coincidan con la sección instalación.

Resolución

Si el archivo de cuenta de servicio que se usa en tu overrides.yaml no coincide con la cuenta de servicio correcta en los enlaces y roles de IAM del proyecto, debes eliminar y volver a crear la cuenta de servicio, así como corregir el archivo de cuenta de servicio que se usa en el overrides.yaml.

Causa 2: Los archivos SA se encuentran en un directorio incorrecto

Este problema se produce al configurar los gráficos de Helm y crear la cuenta de servicio.

Diagnóstico

Comprueba la ubicación del archivo de credenciales de tu cuenta de servicio para asegurarte de que se encuentra en el directorio del gráfico de Helm correcto. El archivo JSON de la cuenta de servicio debe estar en los siguientes directorios:

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

Ejemplo

Por ejemplo, consulta los directorios de gráficos de Helm enumerando el directorio apigee-datastore y haz lo mismo con los directorios apigee-org, apigee-env y apigee-telemetry.

Comando de ejemplo:

Asegúrate de que estás en el directorio correcto:

pwd

Ejemplo de salida:

/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

Resolución

Copia el archivo de cuenta de servicio en los cuatro directorios (apigee-datastore, apigee-telemetry, apigee-org y apigee-env) según la ubicación del árbol de ejemplo anterior y, a continuación, vuelve a ejecutar los gráficos de Helm.

Configuración de la cuenta de servicio