Puoi eseguire la migrazione dei trigger di eventi in modo che un servizio Google Kubernetes Engine (GKE) (inclusi i servizi Knative) possa ricevere eventi Pub/Sub utilizzando Eventarc. Questa guida presuppone che tu stia eseguendo la migrazione di trigger di eventi esistenti e che il tuo servizio GKE sia in esecuzione in un cluster GKE. È necessario eseguire una migrazione per ogni cluster.
Questo percorso di migrazione evita la perdita di eventi e ne riduce al minimo la duplicazione.
La migrazione prevede quanto segue:
- Per consentire a Eventarc di gestire le risorse nel cluster GKE, abilita le destinazioni GKE.
- Se necessario, abilita Workload Identity per il cluster GKE che esegue il servizio GKE di destinazione.
- Identifica i trigger di eventi esistenti.
- Crea un trigger Eventarc che punti allo stesso servizio GKE del trigger esistente.
- Verifica che il trigger Eventarc stia inviando gli eventi come previsto.
- Elimina il trigger evento originale ed esegui la pulizia dopo la migrazione.
Prima di iniziare
Questa guida presuppone che tu disponga già di:
Configurazione dell'ambiente a riga di comando
Per configurare gli strumenti a riga di 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.
Accedi utilizzando il tuo account:
gcloud auth login
Imposta le impostazioni predefinite per gcloud CLI:
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
Sostituisci quanto segue:
Abilita le seguenti API per il progetto:
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
Installa lo strumento a riga di comando
kubectl
:gcloud components install kubectl
Aggiorna i componenti di gcloud CLI installati:
gcloud components update
Abilita le destinazioni GKE per Eventarc:
gcloud eventarc gke-destinations init
Al prompt per associare i ruoli richiesti, inserisci
y
.Sono associati i seguenti ruoli:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Elenca i trigger di eventi esistenti per il cluster GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Sostituisci
EVENTS_NAMESPACE
con lo spazio dei nomi del broker di eventi.L'output è simile al seguente:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Per creare il trigger Eventarc, avrai bisogno dell'ID argomento. Recupera l'ID argomento per l'attivatore di eventi esistente:
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)"
Sostituisci
TRIGGER_ID
con l'ID del trigger evento esistente o con un identificatore completo.L'output è simile al seguente:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Crea un Google Cloud service account (GSA):
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Sostituisci
SERVICE_ACCOUNT_NAME
con un nome compreso tra 6 e 30 caratteri. Può contenere caratteri alfanumerici minuscoli e trattini.Concedi i ruoli
pubsub.subscriber
emonitoring.metricWriter
al account di servizio: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 nuovo trigger Eventarc in base alla configurazione del trigger di eventi esistente. Tutti gli argomenti, inclusi il servizio di destinazione, il cluster e l'ID argomento, devono corrispondere a quelli del trigger evento esistente.
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
Sostituisci
EVENTARC_TRIGGER_NAME
con un nome per il nuovo trigger Eventarc e TOPIC_ID con l'ID argomento Pub/Sub che hai recuperato in precedenza.Viene creato un trigger Eventarc per l'ID argomento Pub/Sub.
Verifica che il trigger sia stato creato correttamente:
gcloud eventarc triggers list
L'output è simile al seguente:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Pubblica un messaggio nell'argomento Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifica l'evento e la sua pubblicazione riuscita. Ad esempio, esamina i log del servizio GKE di ricezione:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
L'output dei due trigger è simile al seguente, con differenze solo in
Context Attributes
eExtensions
. I dati effettivi del messaggio, ad eccezione dei datisubscription
, devono essere identici in modo che non siano necessarie modifiche al ricevitore di eventi dopo la migrazione a Eventarc.Evento 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 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" } }
Elimina il trigger di eventi originale:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Abilita le destinazioni GKE
Per consentire a Eventarc di gestire le risorse nel cluster GKE, attiva le destinazioni GKE e associa il account di servizio Eventarc ai ruoli richiesti.
Abilita la federazione delle identità per i carichi di lavoro per GKE su un cluster
Se Workload Identity Federation for GKE è già abilitato sul tuo cluster, puoi saltare questo passaggio.
Workload Identity Federation for GKE è il metodo consigliato per accedere ai servizi Google Cloud dalle applicazioni in esecuzione in GKE grazie al miglioramento delle sue proprietà di sicurezza e della sua gestibilità. È necessario anche per inoltrare gli eventi GKE utilizzando Eventarc.
Per abilitare Workload Identity Federation for GKE in un cluster esistente, consulta Utilizzo di Workload Identity.
Identificare i trigger di eventi esistenti
Prima di eseguire la migrazione di eventuali trigger di eventi esistenti, devi recuperare i dettagli del trigger.
Crea un trigger Eventarc per sostituire il trigger esistente
Prima di creare il trigger Eventarc, configura un account di servizio gestito dall'utente e concedigli ruoli specifici in modo che Eventarc possa gestire gli eventi per le destinazioni GKE.
Testare la migrazione e verificare l'output
Per testare la migrazione, attiva un evento di test pubblicando un argomento Pub/Sub, quindi verifica che sia stato distribuito almeno un evento per ciascuno dei trigger di eventi e dei trigger Eventarc esistenti.
Ad esempio, l'output dopo l'attivazione di un evento di test verrà duplicato e sarà simile al seguente:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Puoi anche utilizzare lo scenario seguente come guida in cui il destinatario dell'evento può visualizzare i dati dell'evento:
Pulizia dopo la migrazione
Dopo aver testato e verificato la migrazione del trigger a Eventarc, puoi eliminare il trigger di eventi originale.
Hai eseguito la migrazione di un trigger Knative serving esistente a Eventarc.