É possível migrar gatilhos de evento para que um serviço do Google Kubernetes Engine (GKE), incluindo serviços do Knative serving, possa receber eventos do Pub/Sub usando o Eventarc. Neste guia, consideramos que você está migrando gatilhos de evento atuais e que seu serviço do GKE é executado em um cluster do GKE. Uma migração precisa ser executada para cada cluster.
Esse caminho de migração evita a perda de eventos e minimiza a duplicação deles.
A migração envolve o seguinte:
- Permitir que o Eventarc gerencie recursos no cluster do GKE, ative os destinos do GKE.
- Se necessário, ativar a Identidade da carga de trabalho para o cluster do GKE que executa o serviço de destino do GKE.
- Identificar os gatilhos de evento atuais.
- Criar um gatilho do Eventarc que aponte para o mesmo serviço do GKE que o gatilho atual.
- Confirmar se o gatilho do Eventarc está entregando eventos conforme esperado.
- Excluir o gatilho de evento original e fazer a limpeza após a migração.
Antes de começar
Veja o que é necessário para seguir este guia:
Configurar o ambiente de linha de comando
Para configurar as ferramentas de linha de comando gcloud
e kubectl
:
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Faça login usando sua conta:
gcloud auth login
Defina as configurações padrão para a CLI gcloud:
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
Substitua:
Ative as seguintes APIs para o projeto:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
Instale a ferramenta de linha de comando
kubectl
:gcloud components install kubectl
Atualize os componentes da CLI gcloud instalados:
gcloud components update
Ative os destinos do GKE para o Eventarc:
gcloud eventarc gke-destinations init
No prompt para vincular os papéis necessários, digite
y
.Os papéis a seguir estão vinculados:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Liste os gatilhos de evento atuais do cluster do GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Substitua
EVENTS_NAMESPACE
pelo namespace do agente de eventos.A saída será assim:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Você vai precisar do ID do tópico para criar o gatilho do Eventarc. Recupere o ID do tópico do gatilho de evento atual:
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
Substitua
TRIGGER_ID
pelo ID do gatilho de evento atual ou por um identificador totalmente qualificado.O resultado será assim:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Crie uma Google Cloud conta de serviço (GSA):
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Substitua
SERVICE_ACCOUNT_NAME
por um nome que tenha de 6 a 30 caracteres. Ele pode conter caracteres alfanuméricos minúsculos e traços.Conceda os papéis
pubsub.subscriber
emonitoring.metricWriter
à conta de serviço:PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Crie um novo gatilho do Eventarc com base na configuração do gatilho de evento atual. Todos os argumentos, incluindo o serviço de destino, o cluster e o ID do tópico, precisam corresponder aos do gatilho de evento atual.
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Substitua
EVENTARC_TRIGGER_NAME
por um nome para o novo gatilho do Eventarc e TOPIC_ID pelo ID do tópico do Pub/Sub recuperado anteriormente.Essa ação cria um gatilho do Eventarc para o ID do tópico do Pub/Sub.
Confirme se o gatilho foi criado:
gcloud eventarc triggers list
A saída será assim:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Publique uma mensagem no tópico do Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifique o evento e a entrega dele. Por exemplo, observe os registros do serviço do GKE recebido:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
A saída dos dois gatilhos é semelhante à seguinte, com diferenças apenas em
Context Attributes
eExtensions
. Os dados reais da mensagem, exceto os dadossubscription
, precisam ser idênticos para que não seja necessário alterar o receptor de eventos após a migração para o Eventarc.Evento do Eventarc:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Evento do Knative serving:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
Exclua o gatilho de evento original:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Ativar destinos do GKE
Para permitir que o Eventarc gerencie recursos no cluster do GKE, ative os destinos do GKE e vincule a conta de serviço do Eventarc aos papéis necessários.
Ativar a Federação de Identidade da Carga de Trabalho para GKE em um cluster registrado
Se a Federação de Identidade da Carga de Trabalho para GKE já estiver ativada no cluster, pule esta etapa.
A Federação de Identidade da Carga de Trabalho para o GKE é a maneira recomendada de acessar os serviços do Google Cloud em aplicativos em execução no GKE devido às propriedades de segurança e capacidade de gerenciamento aprimoradas. Ela também é necessária para encaminhar eventos do GKE usando o Eventarc.
Para ativar a Federação de identidade da carga de trabalho para o GKE em um cluster atual, consulte Como usar a Identidade da carga de trabalho.
Identificar os gatilhos de evento atuais
Antes de migrar qualquer gatilho de evento atual, recupere os detalhes dele.
Criar um gatilho do Eventarc para substituir o gatilho atual
Antes de criar o gatilho do Eventarc, configure uma conta de serviço gerenciada pelo usuário e conceda a ela papéis específicos para que o Eventarc possa gerenciar eventos de destinos do GKE.
Testar a migração e verificar a saída
Para testar a migração, publique um evento de teste em um tópico do Pub/Sub e verifique se há pelo menos um evento entregue para cada um dos gatilhos de evento atuais e gatilhos do Eventarc, respectivamente.
Por exemplo, a saída após o acionamento de um evento de teste seria copiada e ficaria assim:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Também é possível usar o seguinte cenário para uma orientação em que o receptor de eventos pode exibir os dados do evento:
Fazer a limpeza após a migração
Depois de testar e verificar a migração do gatilho para o Eventarc, é possível excluir o gatilho de evento original.
Você migrou um gatilho do Knative serving para o Eventarc.