Puoi eseguire la migrazione degli attivatori di eventi in modo che un servizio Google Kubernetes Engine (GKE) (inclusi i servizi di pubblicazione Knative) possa ricevere eventi Pub/Sub utilizzando Eventarc. Questa guida presuppone che tu stia eseguendo la migrazione di attivatori 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 riducendo al minimo la loro 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 gli attivatori di eventi esistenti.
- Crea un trigger Eventarc che punti allo stesso servizio GKE dell'trigger esistente.
- Verifica che l'attivatore Eventarc invii gli eventi come previsto.
- Elimina l'attivatore evento originale ed esegui la pulizia dopo la migrazione.
Prima di iniziare
Questa guida presuppone che tu abbia già:
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 la 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 dell'interfaccia a riga di comando gcloud installati:
gcloud components update
Attiva le destinazioni GKE
Per consentire a Eventarc di gestire le risorse nel cluster GKE, attiva le destinazioni GKE e associa l'account di servizio Eventarc ai ruoli richiesti.
Abilita le destinazioni GKE per Eventarc:
gcloud eventarc gke-destinations init
Quando ti viene chiesto di associare i ruoli richiesti, inserisci
y
.I seguenti ruoli sono associati:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Abilita Workload Identity Federation for GKE su un cluster
Se la federazione delle identità per i carichi di lavoro per GKE è già abilitata nel tuo cluster, puoi saltare questo passaggio.
La federazione delle identità per i carichi di lavoro per GKE è il metodo consigliato per accedere ai Google Cloud servizi dall'interno delle applicazioni in esecuzione in GKE, grazie al miglioramento delle sue proprietà di sicurezza e della sua gestibilità. È inoltre necessario inoltrare gli eventi GKE utilizzando Eventarc.
Per attivare Workload Identity Federation for GKE in un cluster esistente, consulta Utilizzo di Workload Identity.
Identificare gli attivatori di eventi esistenti
Prima di eseguire la migrazione di eventuali attivatori di eventi esistenti, devi recuperare i dettagli dell'attivatore.
Elenca gli attivatori di eventi esistenti per il cluster GKE:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Sostituisci
EVENTS_NAMESPACE
con lo spazio dei nomi del tuo 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 l'attivatore Eventarc, devi avere l'ID argomento. Recupera l'ID argomento per l'attivatore evento 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 dell'attivatore 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 trigger Eventarc per sostituire quello esistente
Prima di creare l'attivatore 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.
Crea un Google Cloud account di servizio (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
all'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 dell'trigger di eventi esistente. Tutti gli argomenti, inclusi il servizio di destinazione, il cluster e l'ID argomento, devono corrispondere a quelli dell'attivatore 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 attivatore Eventarc e TOPIC_ID con l'ID argomento Pub/Sub recuperato in precedenza.Viene creato un trigger Eventarc per l'ID argomento Pub/Sub.
Verifica che l'attivatore 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
Testa la migrazione e verifica l'output
Per testare la migrazione, attiva un evento di test pubblicando in un argomento Pub/Sub e poi verifica che sia stato pubblicato almeno un evento per ciascuno degli attivatori evento ed 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 il seguente scenario per indicazioni in cui il visualizzatore dell'evento può visualizzare i dati dell'evento:
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 destinazione:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
L'output dei due attivatori è simile al seguente, con differenze solo in
Context Attributes
eExtensions
. I dati effettivi del messaggio, con l'eccezione dei datisubscription
, devono essere identici in modo che non siano necessarie modifiche ai visualizzatori 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" } }
Pulizia dopo la migrazione
Dopo aver testato e verificato la migrazione dell'attivatore a Eventarc, puoi eliminare l'attivatore evento originale.
Elimina l'trigger evento originale:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Hai eseguito la migrazione di un trigger Knative serving esistente a Eventarc.