Soluciona problemas de Eventarc para Google Kubernetes Engine (GKE)

En esta página, se muestra cómo resolver problemas que podrías encontrar cuando uses Eventarc para GKE, incluidos los extremos públicos de los servicios públicos y privados que se ejecutan en un clúster de GKE.

Para obtener información sobre otros problemas que también podrías tener, consulta la solución de problemas para lo siguiente:

La creación del activador falla con errores de permiso de creación de recursos

Recibes mensajes de error similares a uno de los siguientes:

Error applying IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
Error setting IAM policy for service account 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT':
googleapi: Error 403: Permission iam.serviceAccounts.setIamPolicy is required to perform this
operation on service account SERVICE_ACCOUNT., forbidden

Error when reading or editing Container Cluster "cluster": googleapi:
Error 403: Required "container.clusters.get" permission(s) for "..."., forbidden
Error reading instance group manager returned as an instance group URL:
"googleapi: Error 403: Required 'compute.instanceGroupManagers.get' permission
for '...', forbidden"

Esto ocurre cuando no configuraste de forma correcta la cuenta de servicio de Eventarc que requiere Eventarc para administrar los recursos en el clúster de Google Kubernetes Engine (GKE).

A fin de resolver el problema, asegúrate de que la cuenta de servicio de Eventarc se haya configurado de forma correcta con los permisos adecuados para crear recursos. A fin de obtener más información, sigue las instrucciones para un proveedor específico, tipo de evento y destino de GKE.

La creación del activador falla porque no se puede encontrar el clúster de destino o no tiene habilitada Workload Identity

Recibes mensajes de error similares a uno de los siguientes:

ERROR: (gcloud.eventarc.triggers.create) NOT_FOUND: Not found: projects/PROJECT_ID/locations/
LOCATION/clusters/CLUSTER_NAME.
...
ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: workload identity is not enabled on
cluster CLUSTER_NAME in LOCATION
...

Esto ocurre cuando Eventarc no puede encontrar el clúster de GKE de destino o el clúster no tiene habilitada Workload Identity.

Para resolver el problema, asegúrate de que el clúster de destino exista y tenga Workload Identity habilitada.

La creación del activador falla debido a un estado de recurso no válido

Recibes un mensaje de error similar al siguiente para tu proyecto:

ERROR: (gcloud.eventarc.triggers.create) Invalid resource state for projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_ID.
Ensure that you have enabled your GKE destination and assigned required permissions to the service account.
For more information, see https://cloud.google.com/eventarc/docs/gke/troubleshooting.

Este error ocurre en los siguientes casos:

  • No se habilitó tu destino de GKE.
  • No se le otorgaron a la cuenta de servicio los roles y permisos necesarios que permiten que Eventarc administre eventos para los destinos de GKE.

Para solucionar este problema, sigue estos pasos:

  1. Asegúrate de haber habilitado los destinos de GKE:
    gcloud eventarc gke-destinations init
    A fin de obtener más información, sigue las instrucciones para un proveedor y tipo de evento específicos en la sección “Habilita destinos de GKE”.
  2. Asegúrate de que la cuenta de servicio de Eventarc se haya configurado con los permisos adecuados para crear recursos. A fin de obtener más información sobre cómo otorgar las funciones adecuadas a la cuenta de servicio, sigue las instrucciones para un proveedor y tipo de evento específicos en “Prepárate para crear un activador”. .
  3. Si el error persiste, comunícate con el equipo de asistencia.

Se creó el activador correctamente, pero el destino no recibe eventos

Verifica que transcurrió el tiempo suficiente desde la creación del activador. Los eventos pueden tardar hasta diez minutos en enviarse.

  1. Si los eventos no se entregan en el destino, es posible que los eventos enviados desde Pub/Sub al destino se descarten:

    Para garantizar que los eventos no se descarten, configura una política de reintento de suscripción de Pub/Sub o reenvía mensajes no entregados a un tema de mensajes no entregados (también conocido como cola de mensajes no entregados).

    Antes de configurar el tema de mensajes no entregados, recupera el tema y la suscripción del activador:

    gcloud eventarc triggers describe TRIGGER \
      --location=LOCATION

    Reemplaza lo siguiente:

    • TRIGGER: ID del activador o un identificador completamente calificado
    • LOCATION: ubicación del activador de Eventarc.
  2. Si el activador aún no funciona, verifica el estado del componente de reenvío de eventos de Eventarc para ver si se implementó de forma correcta:

    1. Para identificar los espacios de nombres del clúster, enumera todos los Pods que tengan event-forwarder en su nombre:
      kubectl get pods --all-namespaces | grep event-forwarder
      El resultado es similar a este:
      event-forwarder-namespace-hash1   event-forwarder-hash1   1/1   Running   0   5d2h
      event-forwarder-namespace-hash2   event-forwarder-hash2   1/1   Running   0   2d2h
      
      Los primeros 30 caracteres de los espacios de nombres deben coincidir con el nombre del activador de Eventarc que creaste, seguido de un hash para evitar la ambigüedad de cualquier activador con los mismos 30 caracteres iniciales.
    2. Recupera los detalles de la implementación:
      kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
      
    3. Recupera los detalles del Pod:
      kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      
    4. Imprime los registros del Pod para investigar por qué o dónde se produjo el error:
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      
      Por ejemplo, en el siguiente registro, la cuenta de servicio tiene la función Pub/Sub Subscriber revocada:
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}