Puedes migrar los activadores de eventos para que un servicio de Google Kubernetes Engine (GKE) (incluidos los servicios de Knative serving) pueda recibir eventos de Pub/Sub mediante Eventarc. En esta guía, se da por sentado que migras activadores de eventos existentes y que tu servicio de GKE se ejecuta en un clúster de GKE. Se debe ejecutar una migración para cada clúster.
Esta ruta de migración evita la pérdida de eventos y minimiza su duplicación.
La migración implica lo siguiente:
- Para permitir que Eventarc administre recursos en el clúster de GKE, habilita los destinos de GKE.
- Si es necesario, habilita Workload Identity para el clúster de GKE que ejecuta el servicio de GKE de destino.
- Identifica los activadores de eventos existentes.
- Crea un activador de Eventarc que apunte al mismo servicio de GKE que el activador existente.
- Confirma que el activador de Eventarc entregue eventos como se espera.
- Borra el activador del evento original y realiza una limpieza después de la migración.
Antes de comenzar
En esta guía, suponemos que ya tienes lo siguiente:
Configura el entorno de la línea de comandos
Para configurar las herramientas de línea de comandos de gcloud
y kubectl
, sigue estos pasos:
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.
Accede con tu cuenta:
gcloud auth login
Configura los ajustes predeterminados para la CLI de 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
Reemplaza lo siguiente:
Habilita las siguientes API para el proyecto:
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
Instala la herramienta de línea de comandos
kubectl
:gcloud components install kubectl
Actualiza los componentes instalados de la CLI de gcloud:
gcloud components update
Habilita los destinos de GKE
Para permitir que Eventarc administre recursos en el clúster de GKE, habilita los destinos de GKE y vincula la cuenta de servicio de Eventarc con los roles necesarios.
Habilita los destinos de GKE para Eventarc:
gcloud eventarc gke-destinations init
Cuando se te solicite vincular los roles necesarios, ingresa
y
.Los siguientes roles están vinculados:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Habilita Workload Identity Federation for GKE en un clúster
Si Workload Identity Federation for GKE ya está habilitada en tu clúster, puedes omitir este paso.
Workload Identity Federation for GKE es la forma recomendada de acceder a los servicios de Google Cloud desde aplicaciones que se ejecutan en GKE debido a sus propiedades de seguridad y capacidad de administración mejoradas. También es necesaria para reenviar eventos de GKE mediante Eventarc.
Para habilitar Workload Identity Federation for GKE en un clúster existente, consulta Usa Workload Identity.
Identifica los activadores de eventos existentes
Antes de migrar cualquier activador de evento existente, debes recuperar los detalles del activador.
Enumera los activadores de eventos existentes para el clúster de GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Reemplaza
EVENTS_NAMESPACE
por el espacio de nombres de tu agente de eventos.El resultado es similar al siguiente:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Necesitarás el ID del tema para crear el activador de Eventarc. Recupera el ID del tema para el activador de eventos existente:
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)"
Reemplaza
TRIGGER_ID
por el ID del activador de evento existente o un identificador completamente calificado.El resultado es similar al siguiente:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Crea un activador de Eventarc para reemplazar el activador existente
Antes de crear el activador de Eventarc, configura una cuenta de servicio administrada por el usuario y asígnale roles específicos a fin de que Eventarc pueda administrar eventos para los destinos de GKE.
Crea una cuenta de servicio de Google Cloud usando (GSA).
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Reemplaza
SERVICE_ACCOUNT_NAME
por un nombre que tenga entre 6 y 30 caracteres. Puede contener guiones y caracteres alfanuméricos en minúscula.Otorga las funciones
pubsub.subscriber
ymonitoring.metricWriter
a la cuenta de servicio: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"
Crea un activador de Eventarc nuevo basado en la configuración del activador de evento existente. Todos los argumentos, incluido el servicio de destino, el clúster y el ID del tema, deben coincidir con los del activador de eventos existente.
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
Reemplaza
EVENTARC_TRIGGER_NAME
por un nombre para el activador de Eventarc nuevo y TOPIC_ID por el ID del tema de Pub/Sub que recuperaste antes.Esto crea un activador de Eventarc para el ID del tema de Pub/Sub.
Confirma que el activador se haya creado correctamente:
gcloud eventarc triggers list
El resultado es similar al siguiente:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Prueba la migración y verifica la salida
A fin de probar tu migración, activa un evento de prueba mediante la publicación en un tema de Pub/Sub y, luego, verifica que haya al menos un evento entregado para cada uno de los activadores existentes de eventos y de Eventarc, respectivamente.
Por ejemplo, el resultado después de activar un evento de prueba se duplicaría y sería similar al siguiente:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
También puedes usar la siguiente situación para obtener orientación sobre cómo el receptor del evento puede mostrar los datos del evento:
Publica un mensaje en el tema de Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifica el evento y su entrega correcta. Por ejemplo, consulta los registros del servicio receptor de GKE:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
El resultado de los dos activadores es similar al siguiente, con diferencias solo en
Context Attributes
yExtensions
. Los datos del mensaje real, con la excepción de los datos desubscription
, deben ser idénticos para que no se requieran cambios en el receptor de eventos después de la migración a Eventarc.Evento de 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 de 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" } }
Realiza una limpieza después de la migración
Después de probar y verificar la migración del activador a Eventarc, puedes borrar el activador de eventos original.
Borra el activador del evento original:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Migraste un activador de Knative serving existente a Eventarc.