Vous pouvez migrer des déclencheurs d'événements afin qu'un service Google Kubernetes Engine (GKE) (y compris les services Knative serving) puisse recevoir des événements Pub/Sub à l'aide d'Eventarc. Dans ce guide, nous partons du principe que vous migrez des déclencheurs d'événements existants et que votre service GKE s'exécute dans un cluster GKE. Une migration doit être exécutée pour chaque cluster.
Ce chemin de migration permet d'éviter la perte d'événements tout en minimisant leur duplication.
La migration implique les opérations suivantes :
- Pour permettre à Eventarc de gérer les ressources du cluster GKE, activez les destinations GKE.
- Si nécessaire, activez Workload Identity pour le cluster GKE exécutant votre service GKE cible.
- Identifiez les déclencheurs d'événements existants.
- Créez un déclencheur Eventarc qui pointe vers le même service GKE que le déclencheur existant.
- Vérifiez que le déclencheur Eventarc diffuse les événements comme prévu.
- Supprimez le déclencheur d'événements d'origine et nettoyez après la migration.
Avant de commencer
Ce guide suppose que vous disposez des éléments suivants :
Configurer l'environnement de ligne de commande
Pour configurer les outils de ligne de commande gcloud
et kubectl
, procédez comme suit :
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.
Connectez-vous à votre compte :
gcloud auth login
Configurez les paramètres par défaut de 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
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.CLUSTER_NAME
: nom du clusterCLUSTER_LOCATION
: n'importe quelle zone où GKE est disponible (par exemple :us-central1-a
).LOCATION
: un emplacement pour le déclencheur Eventarc (par exemple :us-central1
).
Activez les API suivantes pour le projet :
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
Installer l'outil de ligne de commande
kubectl
:gcloud components install kubectl
Mettez à jour les composants de gcloud CLI installés :
gcloud components update
Activer les destinations GKE
Pour permettre à Eventarc de gérer les ressources du cluster GKE, activez les destinations GKE et liez le compte de service Eventarc aux rôles requis.
Activez les destinations GKE pour Eventarc :
gcloud eventarc gke-destinations init
Lorsque vous êtes invité à lier les rôles requis, saisissez
y
.Les rôles suivants sont liés :
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Activer la fédération d'identité de charge de travail pour GKE sur un cluster
Si la fédération d'identité de charge de travail pour GKE est déjà activée sur votre cluster, vous pouvez ignorer cette étape.
La fédération d'identité de charge de travail pour GKE est la méthode recommandée pour que les applications exécutées dans GKE puissent accéder aux services Google Cloud en raison de ses propriétés de sécurité renforcée et de sa facilité de gestion. Il est également nécessaire de transférer les événements GKE à l'aide d'Eventarc.
Pour activer la fédération d'identité de charge de travail pour GKE sur un cluster existant, consultez la page Utiliser Workload Identity.
Identifier les déclencheurs d'événements existants
Avant de migrer des déclencheurs d'événements existants, vous devez récupérer les détails du déclencheur.
Listez les déclencheurs d'événement existants pour le cluster GKE :
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Replacez
EVENTS_NAMESPACE
par l'espace de noms de votre agent d'événements.Le résultat ressemble à ce qui suit :
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Vous aurez besoin de l'ID du sujet pour créer le déclencheur Eventarc. Récupérez l'ID du sujet pour le déclencheur d'événement existant :
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)"
Remplacez
TRIGGER_ID
par l'ID du déclencheur d'événement existant ou un identifiant complet.Le résultat ressemble à ce qui suit :
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Créer un déclencheur Eventarc pour remplacer le déclencheur existant
Avant de créer le déclencheur Eventarc, configurez un compte de service géré par l'utilisateur et attribuez-lui des rôles spécifiques afin qu'Eventarc puisse gérer les événements pour les destinations GKE.
Créer un compte de service Google Cloud :
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Remplacez
SERVICE_ACCOUNT_NAME
par un nom comportant entre 6 et 30 caractères. Il peut contenir des caractères alphanumériques minuscules et des tirets.Attribuez les rôles
pubsub.subscriber
etmonitoring.metricWriter
au compte de service :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"
Créez un déclencheur Eventarc basé sur la configuration du déclencheur d'événements existant. Tous les arguments, y compris le service de destination, le cluster et l'ID du sujet, doivent correspondre à ceux du déclencheur d'événements existant.
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
Remplacez
EVENTARC_TRIGGER_NAME
par le nom du nouveau déclencheur Eventarc et TOPIC_ID par l'ID du sujet Pub/Sub que vous avez récupéré précédemment.Cela crée un déclencheur Eventarc pour l'ID de sujet Pub/Sub.
Vérifiez que le déclencheur a bien été créé :
gcloud eventarc triggers list
Le résultat ressemble à ce qui suit :
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Tester la migration et vérifier le résultat
Pour tester votre migration, déclenchez un événement de test en publiant dans un sujet Pub/Sub, puis vérifiez qu'au moins un événement est distribué pour chacun des déclencheurs d'événements existants et Eventarc, respectivement.
Par exemple, le résultat après le déclenchement d'un événement de test sera dupliqué et ressemblera à ceci :
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Vous pouvez également utiliser le scénario suivant pour savoir comment le récepteur d'événements peut afficher les données d'événements :
Publiez un message sur le sujet Pub/Sub :
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Vérifiez l'événement et sa distribution. Par exemple, consultez les journaux du service GKE destinataire :
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
Le résultat des deux déclencheurs est semblable à celui-ci, avec des différences uniquement dans
Context Attributes
etExtensions
. Les données de message réelles, à l'exception des donnéessubscription
, doivent être identiques afin qu'aucune modification du récepteur d'événements ne soit requise après la migration vers Eventarc.Événement 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" } }
Événement 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" } }
Nettoyer après la migration
Après avoir testé et vérifié la migration du déclencheur vers Eventarc, vous pouvez supprimer le déclencheur d'événements d'origine.
Supprimez le déclencheur d'événements d'origine :
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Vous avez migré un déclencheur Knative serving existant vers Eventarc.