Puoi eseguire la migrazione degli attivatori degli eventi in modo che un servizio Cloud Run for Anthos possa ricevere eventi Pub/Sub utilizzando Eventarc. Questa guida presuppone che tu stia eseguendo la migrazione degli eventi esistenti per Cloud Run for Anthos triggers e che il servizio Cloud Run for Anthos sia in esecuzione in un cluster Google Kubernetes Engine (GKE). È necessario eseguire una migrazione per ogni cluster.
Questo percorso di migrazione evita la perdita di eventi riducendo 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 Cloud Run for Anthos target.
- Identifica gli eventi esistenti per i trigger di Cloud Run for Anthos.
- Creare un trigger Eventarc che punta allo stesso servizio Cloud Run for Anthos del trigger esistente.
- Conferma che il trigger Eventarc fornisca gli eventi come previsto.
- Elimina l'attivatore dell'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 Google Cloud Console, attiva Cloud Shell.
Nella parte inferiore di Google Cloud Console, viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Accedi utilizzando il tuo account:
gcloud auth login
Configura le impostazioni predefinite per l'interfaccia a riga di comando 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
Sostituisci quanto segue:
Abilita le API seguenti 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
Abilita destinazioni GKE
Per consentire a Eventarc di gestire le risorse nel cluster GKE, abilita le destinazioni GKE e associa l'account di servizio Eventarc con i ruoli richiesti.
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
Abilita Workload Identity in un cluster
Se Workload Identity è già abilitato nel cluster, puoi saltare questo passaggio.
Workload Identity è il metodo consigliato per accedere ai servizi Google Cloud dalle applicazioni in esecuzione in Google Kubernetes Engine (GKE) grazie alle sue proprietà di sicurezza e alla gestibilità migliorate. È inoltre necessario inoltrare gli eventi Cloud Run for Anthos utilizzando Eventarc.
Per abilitare Workload Identity in un cluster esistente, consulta Utilizzo di Workload Identity.
Identifica gli eventi esistenti per i trigger di Cloud Run for Anthos
Prima di eseguire la migrazione di eventuali trigger Eventi esistenti per Cloud Run for Anthos, devi recuperare i dettagli del trigger.
Elenca gli attivatori esistenti di Eventi per Cloud Run for Anthos per il cluster:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Sostituisci
EVENTS_NAMESPACE
con lo spazio dei nomi del tuo intermediario per gli eventi.L'output è simile al seguente:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Avrai bisogno dell'ID argomento per creare il trigger Eventarc. Recupera l'ID argomento per l'attivatore Eventi esistenti per Cloud Run for Anthos:
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 Eventi per Cloud Run for Anthos o 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 il trigger esistente
Prima di creare il trigger Eventarc, configura un account di servizio gestito dall'utente e concedi ruoli specifici in modo che Eventarc possa gestire gli eventi per le destinazioni Cloud Run for Anthos.
Crea un account di servizio Google Cloud (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"
Creare un nuovo trigger Eventarc basato sulla configurazione esistente di eventi per Cloud Run for Anthos. Tutti gli argomenti, incluso il servizio di destinazione, il cluster e l'ID argomento, devono corrispondere a quelli dell'attivatore Eventi per Cloud Run for Anthos 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
Testare la migrazione e verificare l'output
Per testare la migrazione, attiva un evento di test pubblicandolo su un argomento Pub/Sub, quindi verifica che sia stato pubblicato almeno un evento per ciascuno degli attivatori Eventi esistenti per Cloud Run for Anthos ed Eventarc.
Ad esempio, supponendo che tu abbia completato il tutorial Ricezione di eventi da Pub/Sub e che tu stia eseguendo la migrazione dell'attivatore Eventi per Cloud Run for Anthos, l'output dopo l'attivazione di un evento di test verrebbe duplicato e sarebbe simile al seguente:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Puoi anche utilizzare il seguente scenario come guida in cui il destinatario dell'evento può visualizzare i dati:
Pubblica un messaggio nell'argomento Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifica l'evento e la consegna riuscita. Ad esempio, analizza i log del servizio Cloud Run for Anthos ricevente:
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 richieste modifiche del destinatario 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" } }
Eventi per Cloud Run for Anthos:
☁️ 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" } }
Esegui la pulizia dopo la migrazione
Dopo aver testato e verificato la migrazione del trigger a Eventarc, puoi eliminare il trigger originale di Eventi per Cloud Run for Anthos.
Elimina il trigger Eventi per Cloud Run for Anthos:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Hai eseguito la migrazione di un trigger Eventi esistente per Cloud Run for Anthos in Eventarc.