Sie können Ereignistrigger migrieren, sodass ein GKE-Dienst (Google Kubernetes Engine) (einschließlich Knative-Serving-Dienste) Pub/Sub-Ereignisse mithilfe von Eventarc empfangen kann. In dieser Anleitung wird davon ausgegangen, dass Sie vorhandene Ereignis-Trigger migrieren und Ihr GKE-Dienst in einem GKE-Cluster ausgeführt wird. Für jeden Cluster muss eine Migration ausgeführt werden.
Durch diesen Migrationspfad vermeiden Sie den Verlust von Ereignissen und minimieren gleichzeitig deren Duplizierung.
Die Migration umfasst Folgendes:
- Damit Eventarc Ressourcen im GKE-Cluster verwalten kann, aktivieren Sie GKE-Ziele.
- Aktivieren Sie bei Bedarf Workload Identity für den GKE-Cluster, auf dem der GKE-Zieldienst ausgeführt wird.
- Ermitteln Sie vorhandene Ereignistrigger.
- Erstellen Sie einen Eventarc-Trigger, der auf denselben GKE-Dienst wie der vorhandene Trigger verweist.
- Prüfen Sie, ob der Eventarc-Trigger Ereignisse wie erwartet sendet.
- Löschen Sie den ursprünglichen Ereignistrigger und bereinigen Sie ihn nach der Migration.
Hinweis
In diesem Leitfaden wird Folgendes vorausgesetzt:
Befehlszeilenumgebung einrichten
So richten Sie die gcloud
- und kubectl
-Befehlszeilentools ein:
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.
Melden Sie sich mit Ihrem -Konto an:
gcloud auth login
Standardeinstellungen für die gcloud CLI festlegen
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
Ersetzen Sie Folgendes:
Aktivieren Sie die folgenden APIs für das Projekt:
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
Installieren Sie das
kubectl
-Befehlszeilentool:gcloud components install kubectl
Aktualisieren Sie die installierten gcloud CLI-Komponenten:
gcloud components update
GKE-Ziele aktivieren
Damit Eventarc Ressourcen im GKE-Cluster verwalten kann, aktivieren Sie GKE-Ziele und binden Sie das Eventarc-Dienstkonto an die erforderlichen Rollen.
Aktivieren Sie GKE-Ziele für Eventarc:
gcloud eventarc gke-destinations init
Geben Sie bei der Aufforderung, die erforderlichen Rollen zu binden,
y
ein.Die folgenden Rollen sind gebunden:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Workload Identity-Föderation für GKE in einem Cluster aktivieren
Wenn die Workload Identity Federation for GKE bereits auf Ihrem Cluster aktiviert ist, können Sie diesen Schritt überspringen.
Für das Aufrufen von Google Cloud-Diensten aus Anwendungen in GKE wird Workload Identity Federation for GKE empfohlen, da dieses Feature bessere Sicherheitsmerkmale bietet und leichter zu verwalten ist. Außerdem ist es erforderlich, GKE-Ereignisse mithilfe von Eventarc weiterzuleiten.
Informationen zum Aktivieren der Workload Identity Federation for GKE in einem vorhandenen Cluster finden Sie unter Workload Identity verwenden.
Vorhandene Ereignistrigger identifizieren
Bevor Sie vorhandene Ereignistrigger migrieren, müssen Sie die Triggerdetails abrufen.
Listen Sie die vorhandenen Ereignistrigger für den GKE-Cluster auf:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Ersetzen Sie
EVENTS_NAMESPACE
durch den Namespace des Ereignis-Brokers.Die Ausgabe sieht in etwa so aus:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Sie benötigen die Themen-ID, um den Eventarc-Trigger zu erstellen. Rufen Sie die Themen-ID für den vorhandenen Ereignistrigger ab:
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)"
Ersetzen Sie
TRIGGER_ID
durch die ID des vorhandenen Ereignistrigger oder eine vollständig qualifizierte Kennzeichnung.Die Ausgabe sieht in etwa so aus:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Eventarc-Trigger erstellen, um den vorhandenen Trigger zu ersetzen
Richten Sie ein vom Nutzer verwaltetes Dienstkonto ein und weisen Sie ihm bestimmte Rollen zu, damit Eventarc Ereignisse für GKE-Ziele verwalten kann., bevor Sie den Eventarc-Trigger erstellen.
Google Cloud-Dienstkonto (GSA) erstellen:
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Ersetzen Sie
SERVICE_ACCOUNT_NAME
durch einen Namen mit 6 bis 30 Zeichen. Er kann alphanumerische Zeichen in Kleinschreibung sowie Bindestriche enthalten.Weisen Sie dem Dienstkonto die Rollen
pubsub.subscriber
undmonitoring.metricWriter
zu: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"
Erstellen Sie einen neuen Eventarc-Trigger basierend auf der Konfiguration des vorhandenen Ereignis-Triggers. Alle Argumente, einschließlich des Zieldienstes, des Clusters und der Themen-ID, müssen mit den Argumenten des vorhandenen Ereignistrigger übereinstimmen.
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
Ersetzen Sie
EVENTARC_TRIGGER_NAME
durch einen Namen für den neuen Eventarc-Trigger und TOPIC_ID durch die zuvor abgerufene Pub/Sub-Themen-ID.Dadurch wird ein Eventarc-Trigger für die Pub/Sub-Themen-ID erstellt.
Prüfen Sie, ob der Trigger korrekt erstellt wurde.
gcloud eventarc triggers list
Die Ausgabe sieht in etwa so aus:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Migration testen und Ausgabe prüfen
Zum Testen Ihrer Migration lösen Sie ein Testereignis aus. Veröffentlichen Sie dazu in einem Pub/Sub-Thema und prüfen Sie dann, ob für jeden vorhandenen Ereignistrigger bzw. Eventarc-Trigger mindestens ein Ereignis gesendet wurde.
Die Ausgabe nach dem Auslösen eines Testereignisses würde beispielsweise dupliziert und in etwa so aussehen:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Sie können auch das folgende Szenario verwenden, wenn der Ereignisempfänger die Ereignisdaten anzeigen kann:
Veröffentlichen Sie eine Nachricht im Pub/Sub-Thema:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Prüfen Sie das Ereignis und die erfolgreiche Übermittlung. Sehen Sie sich beispielsweise die Logs des empfangenden GKE-Dienstes an:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
Die Ausgabe der beiden Trigger ähnelt der folgenden, mit den Unterschieden nur in
Context Attributes
undExtensions
. Die tatsächlichen Nachrichtendaten (mit Ausnahme der Datensubscription
) sollten identisch sein, damit nach der Migration zu Eventarc keine Änderungen am Ereignisempfänger erforderlich sind.Eventarc-Ereignis:
☁️ 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" } }
Knative-Serving-Ereignis:
☁️ 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" } }
Nach der Migration bereinigen
Nachdem Sie die Migration des Triggers zu Eventarc getestet und geprüft haben, können Sie den ursprünglichen Ereignis-Trigger löschen.
Löschen Sie den ursprünglichen Ereignistrigger:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Sie haben einen vorhandenen Knative-Serving-Trigger zu Eventarc migriert.