Recibir eventos mediante mensajes de Pub/Sub (gcloud CLI)
En esta guía de inicio rápido se muestra cómo configurar un servicio de Google Kubernetes Engine (GKE) como destino para recibir eventos de temas de Pub/Sub mediante Eventarc.
En esta guía de inicio rápido, harás lo siguiente:
- Completa las tareas preparatorias, como habilitar APIs y configurar una cuenta de servicio.
- Crea un clúster de GKE.
- Inicializa los destinos de GKE en Eventarc.
- Despliega un servicio de GKE que reciba eventos.
- Crea un activador de Eventarc que conecte un tema de Pub/Sub con el servicio de GKE.
- Genera y consulta un evento de Pub/Sub.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
- Actualiza los componentes de Google Cloud CLI:
gcloud components update
- Habilita las APIs Eventarc, Resource Manager y Google Kubernetes Engine:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- Define las variables de configuración que se usan en esta guía de inicio rápido:
PROJECT_ID=$(gcloud config get-value project) CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke LOCATION=us-central1
-
Si has creado el proyecto, se te asignará el rol básico Propietario (
roles/owner
). De forma predeterminada, este rol de gestión de identidades y accesos (IAM) incluye los permisos necesarios para acceder por completo a la mayoría de los recursos Google Cloud, por lo que puedes saltarte este paso.Si no eres el creador del proyecto, debes conceder los permisos necesarios al principal correspondiente. Por ejemplo, una entidad principal puede ser una cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de computación). Para obtener más información, consulta la página Roles y permisos de tu destino de evento.
Permisos obligatorios
Para obtener los permisos que necesitas para completar esta guía de inicio rápido, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
-
Administrador de Eventarc (
roles/eventarc.admin
) -
Administrador de Kubernetes Engine (
roles/container.admin
) -
Usuario con permiso para ver registros (
roles/logging.viewAccessor
) -
Administrador de gestión de identidades y accesos del proyecto (
roles/resourcemanager.projectIamAdmin
) -
Editor de Pub/Sub (
roles/pubsub.publisher
) -
Administrador de cuentas de servicio (
roles/iam.serviceAccountAdmin
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Administrador de Uso de Servicio (
roles/serviceusage.serviceUsageAdmin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Administrador de Eventarc (
Anota la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás a un activador de Eventarc para representar la identidad del activador con fines de prueba. Esta cuenta de servicio se crea automáticamente después de habilitar o usar un servicio que utiliza Compute Engine y tiene el siguiente formato de correo electrónico: Google Cloud
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sustituye
PROJECT_NUMBER
por el número de tu proyecto. Google Cloud Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de IAM que contengan los permisos mínimos necesarios y que sigas el principio de privilegio mínimo.
- Concede el rol Suscriptor de Pub/Sub (
roles/pubsub.subscriber
) en el proyecto a la cuenta de servicio predeterminada de Compute Engine para que el activador de Eventarc pueda extraer eventos de Pub/Sub.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/pubsub.subscriber
- Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes para admitir solicitudes push de Pub/Sub autenticadas, asigna el rol Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) al agente de servicio. De lo contrario, este rol se asigna de forma predeterminada:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Habilita los destinos de GKE para Eventarc:
gcloud eventarc gke-destinations init
Cuando se te pida que enlaces los roles necesarios, introduce
y
.Los siguientes roles están vinculados a la cuenta de servicio:
compute.viewer
container.developer
iam.serviceAccountAdmin
Kubernetes usa un archivo YAML llamado
kubeconfig
para almacenar la información de autenticación del clúster dekubectl
. Actualiza el archivokubeconfig
con las credenciales y la información del endpoint para quekubectl
apunte al clúster de GKE:gcloud container clusters get-credentials $CLUSTER_NAME \ --region $LOCATION
Crea un despliegue de Kubernetes:
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/hello
Expónlo como un servicio de Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP \ --port 80 \ --target-port 8080
Crea un activador de GKE para detectar mensajes de Pub/Sub:
Nuevo tema de Pub/Sub
gcloud eventarc triggers create gke-trigger-pubsub \ --location="$LOCATION" \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
De esta forma, se crea un tema de Pub/Sub y un activador para él llamado
gke-trigger-pubsub
.Tema de Pub/Sub
gcloud eventarc triggers create gke-trigger-pubsub \ --location="$LOCATION" \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Haz los cambios siguientes:
PROJECT_ID
: tu Google Cloud ID de proyectoTOPIC_ID
: ID del tema de Pub/Sub. De esta forma, se crea un activador llamadogke-trigger-pubsub
para el tema de Pub/Sub.
Confirma que el activador se ha creado correctamente. El activador puede tardar hasta dos minutos en funcionar correctamente.
gcloud eventarc triggers list
La salida debería ser similar a la siguiente:
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Busca y define el tema de Pub/Sub como variable de entorno:
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \ --location=us-central1 \ --format='value(transport.pubsub.topic)')
Envía un mensaje al tema de Pub/Sub para generar un evento:
gcloud pubsub topics publish $TOPIC --message="Hello World"
El servicio de GKE registra el mensaje del evento.
Para ver el mensaje del evento, sigue estos pasos:
Para encontrar el ID del pod, sigue estos pasos:
kubectl get pods
La salida debería ser similar a la siguiente:
NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
Copia el
NAME
del pod para usarlo en el siguiente paso.Consulta los registros del pod:
kubectl logs NAME
Sustituye
NAME
por el nombre del pod que has copiado.Busca una entrada de registro similar a la siguiente:
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
Elimina el activador de Eventarc.
También se elimina el tema de Pub/Sub asociado.
Crear un clúster de GKE
Un clúster de GKE consta de al menos una máquina de plano de control de clúster y varias máquinas de trabajador llamadas nodos. Los nodos son instancias de máquinas virtuales (VMs) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que formen parte del clúster. Despliega aplicaciones en clústeres y las aplicaciones se ejecutan en los nodos.
Crea un clúster de Autopilot llamado events-cluster
:
gcloud container clusters create-auto $CLUSTER_NAME \ --region $LOCATION
La creación del clúster puede tardar varios minutos. Una vez creado el clúster, la salida debería ser similar a la siguiente:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT
/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING
De esta forma, se crea un clúster de GKE llamado events-cluster
en un proyecto con el ID Google Cloud MY_PROJECT
.
Habilitar destinos de GKE
Por cada activador que tenga como destino un servicio de GKE, Eventarc crea un componente de reenvío de eventos que extrae eventos de Pub/Sub y los reenvía al destino. Para crear el componente y gestionar los recursos del clúster de GKE, concede permisos al agente de servicio de Eventarc:
Crear un destino de servicio de GKE
Despliega un servicio de GKE que recibirá y registrará eventos mediante una imagen prediseñada, us-docker.pkg.dev/cloudrun/container/hello
:
Crear un activador de Eventarc
Cuando se publica un mensaje en el tema de Pub/Sub, el activador de Eventarc envía mensajes al servicio de GKE hello-gke
.
Generar y ver un evento
Puedes generar un evento para activar el servicio de GKE publicando un mensaje en el tema de Pub/Sub. Después, puedes ver el mensaje en los registros del pod.
Limpieza
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado.
Puedes hacer lo siguiente:
También puedes eliminar tu Google Cloud proyecto para evitar que se te apliquen cargos. Al eliminar tu Google Cloud proyecto, se detendrá la facturación de todos los recursos utilizados en él.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Si tienes previsto consultar varios tutoriales y guías de inicio rápido, reutilizar los proyectos puede ayudarte a no superar los límites de cuota de proyectos.
Siguientes pasos
Recibir eventos con registros de auditoría de Cloud (Google Cloud CLI)