Resolva problemas do Eventarc para o Google Kubernetes Engine (GKE)

Esta página mostra-lhe como resolver problemas que pode encontrar quando usa o Eventarc para o GKE, incluindo os pontos finais públicos de serviços privados e públicos executados num cluster do GKE.

Para outros problemas que também possa encontrar, consulte a resolução de problemas para:

A criação do acionador falha com erros de autorização de criação de recursos

Recebe mensagens de erro semelhantes a uma das seguintes:

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 erro ocorre quando não configurou corretamente a conta de serviço do Eventarc necessária para gerir recursos no cluster do Google Kubernetes Engine (GKE).

Para resolver o problema, certifique-se de que a conta de serviço do Eventarc foi configurada corretamente com as autorizações adequadas para criar recursos. Para mais informações, siga as instruções para um fornecedor, um tipo de evento e um destino do GKE específicos.

A criação do acionador falha porque não é possível encontrar o cluster de destino ou este não tem a Workload Identity Federation para o GKE ativada

Recebe mensagens de erro semelhantes a uma das seguintes:

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 erro ocorre quando o Eventarc não consegue encontrar o cluster do GKE de destino ou o cluster não tem a Workload Identity Federation para o GKE ativada.

Para resolver o problema, certifique-se de que o cluster de destino existe e tem a identidade de carga de trabalho ativada.

A criação do acionador falha devido ao estado do recurso inválido

Recebe uma mensagem de erro semelhante à seguinte:

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.

Este erro pode ocorrer quando:

  • O destino do GKE não foi ativado.
  • Não foram concedidas à conta de serviço as funções e as autorizações necessárias que permitem ao Eventarc gerir eventos para destinos do GKE.
  • A federação de identidade da força de trabalho para o GKE não foi ativada no conjunto de nós.

Para resolver este problema:

  1. Certifique-se de que ativou os destinos do GKE:
    gcloud eventarc gke-destinations init
    Para mais informações, siga as instruções para um fornecedor e um tipo de evento específicos na secção "Ative os destinos do GKE".
  2. Certifique-se de que a conta de serviço do Eventarc foi configurada com as autorizações adequadas para criar recursos. Para mais informações sobre como conceder as funções adequadas à conta de serviço, siga as instruções para um fornecedor e tipo de evento específicos na secção "Prepare-se para criar um acionador".
  3. Se vir falhas de sondagem de prontidão para o encaminhador de eventos, significa que o kubelet no nó não conseguiu estabelecer ligação à porta do contentor do encaminhador de eventos. Isto pode ocorrer quando a Workload Identity Federation para o GKE não está ativada no conjunto de nós. Pode ativar manualmente a federação de identidade da força de trabalho para o GKE em conjuntos de nós existentes. A ativação desta opção garante que o pod de encaminhamento de eventos usa a conta de serviço correta com as autorizações necessárias.
  4. Se o erro persistir, contacte o apoio técnico.

O acionador é criado com êxito, mas o destino não está a receber eventos

Verifique se já passou tempo suficiente desde a criação do acionador. Pode demorar até dois minutos antes de os eventos serem enviados.

  1. Se os eventos não estiverem a ser entregues no destino, os eventos enviados do Pub/Sub para o destino podem estar a ser ignorados:

    Para garantir que os eventos não são ignorados, configure uma política de repetição de subscrição do Pub/Sub ou encaminhe mensagens não entregues para um tópico de mensagens não entregues (também conhecido como uma fila de mensagens não entregues).

    Antes de definir o tópico de mensagens não entregues, obtenha o tópico e a subscrição do acionador:

    gcloud eventarc triggers describe TRIGGER \
      --location=LOCATION

    Substitua o seguinte:

    • TRIGGER: o ID do acionador ou um identificador totalmente qualificado.
    • LOCATION: a localização do acionador do Eventarc.
  2. Se o acionador continuar a não funcionar, verifique o estado do componente de encaminhamento de eventos do Eventarc para ver se foi implementado corretamente:

    1. Identifique os espaços de nomes do cluster listando todos os pods que têm event-forwarder no nome:
      kubectl get pods --all-namespaces | grep event-forwarder
      O resultado é semelhante ao seguinte:
      event-forwarder-namespace-hash1   event-forwarder-hash1   1/1   Running   0   5d2h
      event-forwarder-namespace-hash2   event-forwarder-hash2   1/1   Running   0   2d2h
      
      Os primeiros 30 carateres dos espaços de nomes devem corresponder ao nome do acionador do Eventarc que criou, seguidos de um símbolo de cardinal (#) para desambiguar quaisquer acionadores com os mesmos 30 carateres iniciais.
    2. Recupere os detalhes da implementação:
      kubectl get deployments -n EVENT_FORWARDER_NAMESPACE event-forwarder
    3. Recupere os detalhes do pod:
      kubectl describe pod -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
    4. Imprima os registos do pod para investigar o motivo ou o local da falha:
      kubectl logs -f -n EVENT_FORWARDER_NAMESPACE EVENT_FORWARDER_HASH
      Por exemplo, no registo seguinte, a função Pub/Sub Subscriber foi revogada para a conta de serviço:
      {"error":"generic::permission_denied: missing 'pubsub.subscriptions.consume' permission",
      "message":"Permissions check failed","severity":"fatal","timestamp":"2021-07-07T14:57:49.038877483Z"}