Error del pod de UDCA

Síntoma

Después de actualizar Apigee hybrid, los pods de Universal Data Collection Agent (UDCA) y Connect Agent arrojan un error de problema de permisos.

Mensajes de error

Tu Pod de UDCA arroja 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 de Management para Runtime (MART) arroja este error sobre el agente de Connect:

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

Pasos comunes de diagnóstico

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

Causas posibles

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

Causa 1: Credenciales incorrectas

Los archivos serviceAccountPath o serviceAccountRef que se usan en el archivo overrides.yaml para los pods de UDCA, MART y Connect Agent son incorrectos. Esto puede deberse a que el archivo overrides.yaml se generó a través de la automatización o secuencias de comandos personalizadas, por ejemplo, con Terraform.

Diagnóstico

  1. Verifica los roles y permisos de IAM 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
    

    Aquí:

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

Ejemplo

A continuación, se muestra un ejemplo de una política de IAM 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

Resultado de muestra:

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

Resultado de muestra:

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

Para la producción, ejecuta los mismos comandos en la cuenta de servicio de producción para apigee-udca y verifica los roles de IAM que coincidan con la sección de instalación.

Solución

Si el archivo de cuenta de servicio que se usa en tu overrides.yaml no coincide con la cuenta de servicio correcta en la vinculación y los roles de IAM del proyecto, debes borrar y volver a crear la cuenta de servicio, y corregir el archivo de cuenta de servicio que se usa en el overrides.yaml.

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

Este problema se produce cuando se configuran los gráficos de Helm y se crea la cuenta de servicio.

Diagnóstico

Verifica la ubicación del archivo de credenciales de tu cuenta de servicio para asegurarte de que resida en el directorio del gráfico de Helm correcto. El archivo JSON de la cuenta de servicio debe residir 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, verifica los directorios de charts de Helm enumerando el directorio apigee-datastore y haz lo mismo para los directorios apigee-org, apigee-env y apigee-telemetry.

Comando de muestra:

Asegúrate de estar en el directorio correcto:

pwd

Resultado de muestra:

/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

Solución

Copia el archivo de la 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, luego, vuelve a ejecutar los gráficos de Helm.

Configuración de la cuenta de servicio