Résoudre les problèmes liés à Eventarc pour Google Kubernetes Engine (GKE)

Cette page explique comment résoudre les problèmes que vous pouvez rencontrer lors de l'utilisation d'Eventarc pour GKE, y compris les points de terminaison publics des services privés et publics s'exécutant dans un cluster GKE.

Pour les autres problèmes que vous pouvez également rencontrer, consultez la page de dépannage pour :

Échec de la création du déclencheur avec erreurs d'autorisation de création de ressources

Vous recevez des messages d'erreur semblables à l'un des messages suivants :

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"

Cette erreur se produit lorsque vous n'avez pas configuré correctement le compte de service Eventarc requis par Eventarc pour gérer les ressources du cluster Google Kubernetes Engine (GKE).

Pour résoudre le problème, assurez-vous que le compte de service Eventarc a été correctement configuré avec les autorisations appropriées pour créer des ressources. Pour en savoir plus, suivez les instructions pour un fournisseur, un type d'événement et une destination GKE spécifiques.

La création du déclencheur échoue, car le cluster cible est introuvable ou Workload Identity n'est pas activé dessus

Vous recevez des messages d'erreur semblables à l'un des messages suivants :

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

Cette erreur se produit lorsque Eventarc ne parvient pas à trouver le cluster GKE cible ou que Workload Identity n'est pas activé pour ce cluster.

Pour résoudre le problème, assurez-vous que le cluster cible existe et que Workload Identity est activé.

Échec de création du déclencheur en raison d'un état de ressource non valide

Vous recevez un message d'erreur semblable à celui-ci pour votre projet :

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.

Cette erreur se produit dans les cas suivants :

  • Votre destination GKE n'a pas été activée.
  • Le compte de service n'a pas obtenu les rôles et autorisations requis qui permettent à Eventarc de gérer les événements pour les destinations GKE.

Pour remédier à ce problème :

  1. Assurez-vous d'avoir activé les destinations GKE :
    gcloud eventarc gke-destinations init
    Pour en savoir plus, suivez les instructions pour un fournisseur et un type d'événement spécifiques dans la section "Activer les destinations GKE".
  2. Assurez-vous que le compte de service Eventarc a été configuré avec les autorisations appropriées pour créer des ressources. Pour en savoir plus sur l'attribution des rôles appropriés au compte de service, suivez les instructions pour un fournisseur et un type d'événement spécifique dans la section "Préparer la création d'un déclencheur".
  3. Si l'erreur persiste, contactez l'assistance.

Le déclencheur a bien été créé, mais la cible ne reçoit pas d'événements

Vérifiez qu'un délai suffisant s'est écoulé depuis la création du déclencheur. L'envoi des événements peut prendre jusqu'à deux minutes.

  1. Si des événements ne sont pas distribués à la cible, il est possible que les événements envoyés depuis Pub/Sub vers la cible soient interrompus :

    Pour vous assurer que les événements ne sont pas interrompus, configurez une Stratégie de nouvelle tentative pour l'abonnement Pub/Sub ou transférez les messages non distribués dans une file d'attente de lettres mortes.

    Avant de définir le sujet des lettres mortes, récupérez le sujet et l'abonnement du déclencheur :

    gcloud eventarc triggers describe TRIGGER \
      --location=LOCATION

    Remplacez les éléments suivants :

    • TRIGGER : l'ID du déclencheur ou un identifiant complet.
    • LOCATION : l'emplacement du déclencheur Eventarc.
  2. Si le déclencheur ne fonctionne toujours pas, vérifiez l'état du composant du redirecteur d'événements d'Eventarc pour voir s'il a été déployé correctement :

    1. Identifiez les espaces de noms des clusters en répertoriant tous les pods dont le nom contient event-forwarder :
      kubectl get pods --all-namespaces | grep event-forwarder
      Le résultat ressemble à ce qui suit :
      event-forwarder-namespace-hash1   event-forwarder-hash1   1/1   Running   0   5d2h
      event-forwarder-namespace-hash2   event-forwarder-hash2   1/1   Running   0   2d2h
      
      Les 30 premiers caractères des espaces de noms doivent correspondre au nom du déclencheur Eventarc que vous avez créé, suivi d'un hachage pour les distinguer des déclencheurs ayant les mêmes 30 premiers caractères.
    2. Récupérez les détails du déploiement :
      kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
    3. Récupérez les détails du pod :
      kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
    4. Imprimez les journaux du pod pour déterminer pourquoi ou où l'échec s'est produit :
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      Par exemple, dans le journal suivant, le compte de service a été révoqué avec le rôle Pub/Sub Subscriber :
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}