Solucionar problemas de Eventarc para Google Kubernetes Engine (GKE)

En esta página se explica cómo resolver los problemas que pueden surgir al usar Eventarc para GKE, incluidos los endpoints públicos de los servicios privados y públicos que se ejecutan en un clúster de GKE.

Si tienes otros problemas, consulta las soluciones para los siguientes casos:

No se puede crear el activador y se producen 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"

Este error se produce cuando no has configurado correctamente la cuenta de servicio de Eventarc, que es necesaria para que Eventarc gestione los recursos del clúster de Google Kubernetes Engine (GKE).

Para solucionar el problema, asegúrate de que la cuenta de servicio de Eventarc se haya configurado correctamente con los permisos adecuados para crear recursos. Para obtener más información, siga las instrucciones de un proveedor, un tipo de evento y un destino de GKE específicos.

No se puede crear el activador porque no se encuentra el clúster de destino o no tiene habilitada la federación de identidades de carga de trabajo para GKE

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
...

Este error se produce cuando Eventarc no encuentra el clúster de GKE de destino o cuando el clúster no tiene habilitada la federación de identidades de carga de trabajo para GKE.

Para solucionar el problema, asegúrate de que el clúster de destino existe y tiene Workload Identity habilitado.

No se puede crear el activador porque el estado del recurso no es válido

Recibes un mensaje de error similar al siguiente en 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/standard/docs/gke/troubleshooting.

Este error se produce cuando:

  • Tu destino de GKE no se ha habilitado.
  • No se han concedido a la cuenta de servicio los roles y permisos necesarios para que Eventarc gestione eventos de destinos de GKE.

Para solucionar este problema, sigue estos pasos:

  1. Asegúrate de que has habilitado los destinos de GKE:
    gcloud eventarc gke-destinations init
    Para obtener más información, sigue las instrucciones de un proveedor y un tipo de evento específicos en la sección "Habilitar destinos de GKE".
  2. Asegúrate de que la cuenta de servicio de Eventarc se haya configurado con los permisos adecuados para crear recursos. Para obtener más información sobre cómo asignar los roles adecuados a la cuenta de servicio, sigue las instrucciones de un proveedor y un tipo de evento específicos en la sección "Preparar la creación de un activador".
  3. Si el error persiste, ponte en contacto con el equipo de Asistencia.

El activador se ha creado correctamente, pero el destino no recibe eventos

Comprueba que haya transcurrido suficiente tiempo desde que creaste el activador. Los eventos pueden tardar hasta dos 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 estén descartando:

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

    Antes de definir el tema de mensajes fallidos, recupera el tema y la suscripción del activador:

    gcloud eventarc triggers describe TRIGGER \
      --location=LOCATION

    Haz los cambios siguientes:

    • TRIGGER: el ID del activador o un identificador completo.
    • LOCATION: la ubicación del activador de Eventarc.
  2. Si el activador sigue sin funcionar, comprueba el estado del componente de reenvío de eventos de Eventarc para ver si se ha desplegado correctamente:

    1. Identifica los espacios de nombres del clúster enumerando todos los pods que tengan event-forwarder en su nombre:
      kubectl get pods --all-namespaces | grep event-forwarder
      La salida es similar a la siguiente:
      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 hayas creado, seguido de un hash para desambiguar los activadores que tengan los mismos 30 caracteres iniciales.
    2. Recupera los detalles del despliegue:
      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 ha producido el fallo:
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      Por ejemplo, en el siguiente registro, se ha revocado el rol Pub/Sub Subscriber de la cuenta de servicio:
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}