Ein Eventarc-Trigger deklariert Ihr Interesse an einem bestimmten Ereignis oder einer Reihe von Ereignissen. Sie können das Ereignisrouting konfigurieren. Legen Sie dazu Filter für den Trigger fest, einschließlich der Ereignisquelle und des Google Kubernetes Engine (GKE)-Zieldienstes, der in einem GKE-Cluster ausgeführt wird. Beachten Sie, dass Ziele nur Dienste enthalten können, die in (öffentlichen oder privaten) GKE-Clustern mit öffentlichen Endpunkten ausgeführt werden. Wenn Sie auf Dienste in GKE-Clustern mit privaten Endpunkten abzielen, leiten Sie Ereignisse an interne HTTP-Endpunkte weiter.
Eventarc liefert Ereignisse über eine HTTP-Anfrage an den Ereignisempfänger im CloudEvents-Format.
In dieser Anleitung erfahren Sie, wie Sie das Ereignisrouting für Ihren GKE-Dienst konfigurieren, der durch ein direktesCloud Storage -Ereignis ausgelöst wird. Weitere Informationen finden Sie in der Liste der unterstützten direkten Ereignisse.
Hinweise
Sie müssen Workload Identity in dem GKE-Cluster aktivieren, in dem der Zieldienst ausgeführt wird. Workload Identity ist für die ordnungsgemäße Einrichtung des Ereignis-Forwarders erforderlich und wird empfohlen, um aus den in GKE ausgeführten Anwendungen aufgrund seiner verbesserten Sicherheitseigenschaften und -verwaltung auf Google Cloud-Dienste zuzugreifen.
Workload Identity
In GKE ausgeführte Anwendungen benötigen möglicherweise Zugriff auf Google Cloud APIs. Workload Identity ermöglicht einem Kubernetes-Dienstkonto in Ihrem GKE-Cluster, als IAM-Dienstkonto zu fungieren. Pods, die das konfigurierte Kubernetes-Dienstkonto verwenden, werden beim Zugriff auf Google Cloud APIs automatisch als IAM-Dienstkonto authentifiziert. Mit Workload Identity können Sie jeder Anwendung in Ihrem Cluster separate, detaillierte Identitäten und Autorisierungen zuweisen. Beachten Sie, dass dem Dienstkonto des Eventarc-Triggers bestimmte Berechtigungen gewährt werden müssen. Dieses Dokument enthält die Schritte zum Erstellen eines Dienstkontos.
Weitere Informationen zum Aktivieren und Konfigurieren von Workload Identity in Ihren GKE-Clustern finden Sie unter Workload Identity verwenden.
Ereignis-Forwarder
Der Ereignis-Forwarder von Eventarc ruft neue Ereignisse aus Eventarc ab und leitet sie an das GKE-Ziel weiter. Diese Komponente fungiert als Vermittler zwischen der Pub/Sub-Transportebene und dem GKE-Dienst. Es funktioniert mit vorhandenen Diensten und unterstützt auch Signalisierungsdienste (einschließlich Dienste, die nicht außerhalb des vollständig verwalteten Clusters verfügbar sind), während die Einrichtung und Wartung vereinfacht wird. Damit Sie Ereignisse auf Netzwerkebene in einem GKE-Dienst empfangen können, müssen Sie den Dienst nicht für externen Traffic öffnen, da alle Ereignisse von einem Ursprung bereitgestellt werden, der sich im selben GKE-Cluster befindet.
Der Lebenszyklus des Ereignis-Forwarders wird von Eventarc verwaltet. Wenn Sie den Ereignis-Forwarder versehentlich löschen, wird diese Komponente von Eventarc wiederhergestellt.
Für jeden Trigger, der auf ein GKE-Ziel verweist, führt der Ereignis-Forwarder (ein speziell konfigurierter gke-forwarder
-Pod) folgende Schritte aus:
Er verwendet die Pub/Sub API, um eine
StreamingPull
-Verbindung zum Trigger-Transporter (ein Pub/Sub-Thema und -Abo) zu öffnen, und empfängt Ereignisse, wenn sie verfügbar sind.Er wandelt Ereignisse in das richtige CloudEvents-Format um und codiert sie als
HTTP POST
-Anfrage an den GKE-Zieldienst.
Der Eventarc-Dienst-Agent benötigt die Berechtigung zum Ausführen und regelmäßigen Aktualisieren der gke-forwarder
-Instanz. Diese Berechtigung muss einmal pro Projekt erteilt werden. Weitere Informationen finden Sie in diesem Dokument unter GKE-Ziele aktivieren.
Erstellung eines Triggers vorbereiten
Für jeden Trigger, der auf einen GKE-Dienst abzielt, erstellt Eventarc eine Komponente zur Ereignisweiterleitung. Eventarc benötigt Berechtigungen zum Installieren der Komponente und zum Verwalten von Ressourcen im GKE-Cluster. Bevor Sie einen Eventarc-Trigger für GKE-Ziele erstellen, müssen Sie die folgenden Aufgaben ausführen:
Console
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
Aktivieren Sie die Eventarc, Eventarc Publishing, Google Kubernetes Engine und Resource Manager APIs.
Aktivieren Sie gegebenenfalls die API, die mit den direkten Ereignissen verbunden ist. Aktivieren Sie beispielsweise für Cloud Storage -Ereignisse dieCloud Storage API.
Falls noch nicht geschehen, erstellen Sie ein nutzerverwaltetes Dienstkonto und weisen Sie ihm die erforderlichen Rollen und Berechtigungen zu, damit Eventarc Ereignisse für Ihren Zieldienst verwalten kann.
Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.
Wählen Sie Ihr Projekt aus.
Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.
Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel:
Service account for event trigger
Klicken Sie auf Erstellen und fortfahren.
Wählen Sie in der Liste Rolle auswählen die erforderlichen IAM-Rollen (Identity and Access Management) aus, die Ihrem Dienstkonto zugewiesen werden sollen. Weitere Informationen finden Sie unter Rollen und Berechtigungen für GKE-Ziele.
Klicken Sie auf
Weitere Rolle hinzufügen, um weitere Rollen hinzuzufügen.Klicken Sie auf Weiter.
Klicken Sie zum Abschließen der Erstellung des Dienstkontos auf Fertig.
Weisen Sie dem Cloud Storage-Dienst-Agent die Pub/Sub-Publisher-Rolle zu. Normalerweise ist dies
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
. Sie können die E-Mail-Adresse für den Cloud Storage-Dienst-Agent abrufen.Öffnen Sie in der Google Cloud Console die Seite IAM.
Klicken Sie in der Zeile für den Cloud Storage-Dienst-Agent auf
Hauptkonto bearbeiten. (Wenn der Dienst-Agent nicht aufgeführt ist, fahren Sie mit dem nächsten Schritt fort.) Der Bereich Zugriff bearbeiten wird geöffnet.- Klicken Sie auf addWeitere Rolle hinzufügen und suchen Sie nach der Rolle Pub/Sub Publisher.
- Wählen Sie die Rolle aus.
- Klicken Sie auf Speichern.
Wenn der Dienst-Agent nicht aufgeführt ist, klicken Sie auf
Zugriff erlauben. Der Bereich Zugriff gewähren wird geöffnet.- Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienst-Agents ein.
- Suchen Sie in der Liste Rolle auswählen nach der Rolle Pub/Sub-Publisher.
- Wählen Sie die Rolle aus.
- Klicken Sie auf Speichern.
gcloud
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.
Aktivieren Sie die Eventarc, Eventarc Publishing, Google Kubernetes Engine und Resource Manager APIs.
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
Aktivieren Sie gegebenenfalls die API, die mit den direkten Ereignissen verbunden ist. Aktivieren Sie beispielsweise für Cloud Storage -Ereignisse
storage.googleapis.com
.Falls noch nicht geschehen, erstellen Sie ein nutzerverwaltetes Dienstkonto und weisen Sie ihm die erforderlichen Rollen und Berechtigungen zu, damit Eventarc Ereignisse für Ihr gewünschtes GKE-Ziel verwalten kann.
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
durch den Namen des Dienstkontos ersetzen. Der Name des Dienstkontos muss zwischen 6 und 30 Zeichen lang sein und darf alphanumerische Zeichen in Kleinschreibung sowie Bindestriche enthalten. Nachdem Sie ein Dienstkonto erstellt haben, können Sie den Namen nicht mehr ändern.Erteilen Sie die erforderlichen IAM-Rollen oder -Berechtigungen (Identity and Access Management). Weitere Informationen finden Sie unter Rollen und Berechtigungen für GKE-Ziele.
Weisen Sie dem Cloud Storage-Dienstkonto die Rolle
pubsub.publisher
zu:SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role="roles/pubsub.publisher"
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
Trigger erstellen
Sie können einen Eventarc-Trigger mit der Google Cloud CLI oder über die Google Cloud Console erstellen.
Console
- Rufen Sie in der Google Cloud Console die Seite mit den Eventarc-Triggern auf.
- Klicken Sie auf Trigger erstellen.
- Geben Sie einen Triggernamen ein.
Dies ist die ID des Triggers. Sie muss mit einem Buchstaben beginnen. Sie kann bis zu 63 Kleinbuchstaben, Ziffern oder Bindestriche enthalten.
- Wählen Sie als Triggertyp die Option Google-Quellen aus.
- Wählen Sie in der Liste Ereignisanbieter die Option Cloud Storage aus.
Beachten Sie, dass der Name des Ereignisanbieters, der in der zugehörigen Google Cloud-Dokumentation verwendet wird, möglicherweise nicht das Präfix Cloud oder Google Cloud hat. In der Console wird Memorystore for Redis beispielsweise als Google Cloud Memorystore for Redis bezeichnet.
- Wählen Sie in der Liste Ereignistyp aus den Direkt-Ereignissen einen Ereignistyp aus:
- google.cloud.storage.object.v1.archived Das Ereignis wird gesendet, wenn eine Live-Version eines Objekts archiviert oder gelöscht wird. Dieses Ereignis wird nur für Buckets mit Versionsverwaltung gesendet.
- google.cloud.storage.object.v1.delete Das Ereignis wird gesendet, wenn ein Objekt endgültig gelöscht wird. Abhängig von der für den Bucket ausgewählten Objektversionierung bedeutet dies:
- Bei Buckets mit Versionsverwaltung wird das Ereignis nur gesendet, wenn eine Version dauerhaft gelöscht wird (aber nicht, wenn ein Objekt archiviert wird).
- Bei Buckets ohne Versionsverwaltung wird das Ereignis gesendet, wenn ein Objekt gelöscht oder überschrieben wird.
- google.cloud.storage.object.v1.finalized: Das Ereignis wird gesendet, wenn ein neues Objekt im Bucket erstellt wird (oder ein bestehendes Objekt überschrieben wird und eine neue Generation dieses Objekts erstellt wird).
- google.cloud.storage.object.v1.metadataUpdated: Das Ereignis wird gesendet, wenn sich die Metadaten (/storage/docs/metadata) eines vorhandenen Objekts ändern.
- Wählen Sie in der Liste Inhaltstyp der Ereignisdaten die Codierung der Ereignisnutzlast aus.
Für direkte Ereignisse von Cloud Storagemuss dies application/json sein.
- Geben Sie die global eindeutige Kennung des Cloud Storage-Buckets an oder suchen Sie danach.
Der Cloud Storage-Bucket muss sich im selben Google Cloud-Projekt und in derselben Region oder Multiregion wie der Eventarc-Trigger befinden.
- Wählen Sie eine Region aus.
Cloud Storage-Trigger für Eventarc sind an Standorten mit einer, zwei oder mehreren Regionen verfügbar. Der Cloud Storage-Bucket muss sich im selben Google Cloud-Projekt und in derselben Region oder Multiregion befinden wie der Eventarc-Trigger.
Ereignisse werden mit Pub/Sub-Benachrichtigungen aus Cloud Storage zugestellt. Wenn zu viele Benachrichtigungen für denselben Bucket eingerichtet werden, kann das Benachrichtigungslimit für den Bucket aufgebraucht werden. Dies wird durch den Fehler
Cloud Storage bucket ...: Pub/Sub notification limit reached
angegeben. Der Bucket kann bis zu 10 Benachrichtigungskonfigurationen haben, die zum Auslösen von Benachrichtigungen für ein bestimmtes Ereignis festgelegt sind. Weitere Kontingente und Limits finden Sie auf der Seite Cloud Storage-Kontingente und -Limits. - Wählen Sie das Dienstkonto aus, das Ihren Dienst oder Workflow aufruft.
Alternativ können Sie ein neues Dienstkonto erstellen.
Dies gibt die E-Mail-Adresse des IAM-Dienstkontos (Identity and Access Management) an, die dem Trigger zugeordnet ist und für die Sie zuvor bestimmte Rollen zugewiesen haben, die für Eventarc erforderlich sind.
- Wählen Sie in der Liste Ereignisziel die Option Kubernetes Engine aus.
- Wählen Sie einen Dienst aus.
Dies ist der Name des Dienstes, der die Ereignisse für den Trigger empfängt. Der Dienst muss sich im selben Projekt wie der Trigger befinden und empfängt Ereignisse als HTTP-POST-Anfragen, die an seinen Root-URL-Pfad (
/
) gesendet werden, wenn das Ereignis erzeugt wird. - Optional können Sie den Dienst-URL-Pfad angeben, an den die eingehende Anfrage gesendet werden soll.
Dies ist der relative Pfad im Zieldienst, an den die Ereignisse für den Trigger gesendet werden sollen. Beispiel:
/
,/route
,route
,route/subroute
. - Klicken Sie auf Erstellen.
Nachdem ein Trigger erstellt wurde, können die Ereignisquellenfilter nicht mehr geändert werden. Erstellen Sie stattdessen einen neuen Trigger und löschen Sie den alten. Weitere Informationen finden Sie unter Trigger verwalten.
gcloud
Wenn Sie einen gcloud eventarc triggers create
-Befehl zusammen mit den erforderlichen und optionalen Flags ausführen, können Sie einen Trigger erstellen.
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-gke-cluster=DESTINATION_GKE_CLUSTER \ --destination-gke-location=DESTINATION_GKE_LOCATION \ --destination-gke-namespace=DESTINATION_GKE_NAMESPACE \ --destination-gke-service=DESTINATION_GKE_SERVICE \ --destination-gke-path=DESTINATION_GKE_PATH \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters="bucket=BUCKET" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
Ersetzen Sie dabei Folgendes:
TRIGGER
: die ID des Triggers oder eine voll qualifizierte KennzeichnungLOCATION
: der Standort des Eventarc-Triggers. Alternativ können Sie das Attributeventarc/location
festlegen. Beispiel:gcloud config set eventarc/location us-central1
.Der Cloud Storage-Bucket muss sich im selben Google Cloud-Projekt und in derselben Region oder Multiregion wie der Eventarc-Trigger befinden. Weitere Informationen finden Sie unter Eventarc-Standorte.
DESTINATION_GKE_CLUSTER
: der Name des GKE-Clusters, in dem der GKE-Zieldienst, der Ereignisse empfängt, ausgeführt wird.DESTINATION_GKE_LOCATION
: (optional) die Compute Engine-Region des GKE-Clusters, in dem der GKE-Zieldienst ausgeführt wird. Wenn keine Angabe erfolgt, wird davon ausgegangen, dass der Cluster ein regionaler Cluster ist und sich in derselben Region wie der Trigger befindet.DESTINATION_GKE_NAMESPACE
: (optional) der Namespace, in dem der GKE-Zieldienst ausgeführt wird. Wenn keine Angabe erfolgt, wird der Namespacedefault
verwendet.DESTINATION_GKE_SERVICE
: der Name des GKE-Dienstes, der die Ereignisse für den Trigger empfängt. Der Dienst kann sich an einem der von GKE unterstützten Standorte befinden und muss nicht am selben Standort wie der Trigger vorhanden sein. Er muss sich aber im selben Projekt wie der Trigger befinden. Der Dienst empfängt Ereignisse als HTTP-POST-Anfragen, die an seinen Root-URL-Pfad (/
) gesendet werden, wenn das Ereignis erzeugt wird.DESTINATION_GKE_PATH
: (optional) der relative Pfad zum GKE-Zieldienst, zu dem die Ereignisse für den Trigger gesendet werden sollen. Beispiele:/
,/route
,route
,route/subroute
.EVENT_FILTER_TYPE
: die ID des Cloud Storage-Ereignisses und kann eine der folgenden sein:google.cloud.storage.object.v1.finalized
: Dieses Ereignis wird gesendet, wenn ein neues Objekt im Bucket erstellt wird (oder ein vorhandenes Objekt überschrieben und eine neue Objektgeneration erstellt wird).google.cloud.storage.object.v1.archived
: Dieses Ereignis wird gesendet, wenn eine Live-Version eines Objekts archiviert oder gelöscht wird. Dieses Ereignis wird nur für Buckets mit Versionsverwaltung gesendet.google.cloud.storage.object.v1.deleted
: Dieses Ereignis wird gesendet, wenn ein Objekt dauerhaft gelöscht wird. Abhängig von der für den Bucket ausgewählten Objektversionierung bedeutet dies:- Bei Buckets mit Versionsverwaltung wird das Ereignis nur gesendet, wenn eine Version dauerhaft gelöscht wird (aber nicht, wenn ein Objekt archiviert wird).
- Bei Buckets ohne Versionsverwaltung wird das Ereignis gesendet, wenn ein Objekt gelöscht oder überschrieben wird.
google.cloud.storage.object.v1.metadataUpdated
: Dieses Ereignis wird gesendet, wenn die Metadaten eines vorhandenen Objekts geändert werden.
BUCKET
ist die global eindeutige ID des Cloud Storage-Buckets.SERVICE_ACCOUNT_NAME
: der Name Ihres nutzerverwalteten Dienstkontos.PROJECT_ID
ist Ihre Google Cloud-Projekt-ID.
Hinweise:
- Diese Flags sind erforderlich:
--event-filters="type=EVENT_FILTER_TYPE"
--event-filters="bucket=BUCKET"
- Jeder Trigger kann mehrere Ereignisfilter haben, die durch Komms in einem
--event-filters
=[ATTRIBUTE
=VALUE
,...]-Flag getrennt sind. Sie können das Flag aber auch wiederholen, um weitere Filter hinzuzufügen. Nur Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet. Platzhalter und reguläre Ausdrücke werden nicht unterstützt. - Nachdem ein Trigger erstellt wurde, kann der Ereignisfiltertyp nicht mehr geändert werden. Für einen anderen Ereignistyp müssen Sie einen neuen Trigger erstellen und den alten löschen.
- Ereignisse werden mit Pub/Sub-Benachrichtigungen aus Cloud Storage zugestellt.
Wenn zu viele Benachrichtigungen für denselben Bucket eingerichtet werden, kann das Benachrichtigungslimit für den Bucket aufgebraucht werden. Dies wird durch den Fehler
Cloud Storage bucket ...: Pub/Sub notification limit reached
angegeben. Der Bucket kann bis zu 10 Benachrichtigungskonfigurationen haben, die zum Auslösen von Benachrichtigungen für ein bestimmtes Ereignis festgelegt sind. Weitere Kontingente und Limits finden Sie auf der Seite Cloud Storage-Kontingente und -Limits. - Bei direkten Ereignissen aus Cloud Storagelautet die Codierung der Ereignisnutzlast
application/json
. - Mit dem Flag
--service-account
wird die E-Mail-Adresse des IAM-Dienstkontos (Identity and Access Management) angegeben, das mit dem Trigger verknüpft ist.
Beispiel:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-gke-cluster=gke-events-cluster \ --destination-gke-location=us-central1-a \ --destination-gke-namespace=default \ --destination-gke-service=helloworld-events \ --destination-gke-path=/ \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=my-bucket" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Dieser Befehl erstellt einen Trigger mit dem Namen helloworld-trigger
für den Cloud Storage-Bucket my-bucket
und das als google.cloud.storage.object.v1.finalized
identifizierte Ereignis.
Terraform
Sie können einen Trigger für ein GKE-Ziel mit Terraform erstellen. Weitere Informationen finden Sie unter Trigger mit Terraform erstellen.
Trigger auflisten
Sie können die Erstellung eines Triggers bestätigen, indem Sie Eventarc-Trigger mit der Google Cloud CLI oder über die Google Cloud Console auflisten.
Console
Rufen Sie in der Google Cloud Console die Seite mit den Eventarc-Triggern auf.
Auf dieser Seite werden Ihre Trigger an allen Standorten aufgelistet. Außerdem enthält sie Details wie Namen, Regionen, Ereignisanbieter, Ziele usw.
So filtern Sie die Trigger:
- Klicken Sie auf Filter oder das Feld Trigger filtern.
- Wählen Sie in der Liste Attribute eine Option aus, nach der die Trigger gefiltert werden sollen.
Sie können ein einzelnes Attribut auswählen oder den logischen Operator
OR
verwenden, um weitere Attribute hinzuzufügen.Klicken Sie zum Sortieren der Trigger neben jeder unterstützten Spaltenüberschrift auf
Sortieren.
gcloud
Führen Sie den folgenden Befehl aus, um die Trigger aufzulisten:
gcloud eventarc triggers list --location=-
Dieser Befehl listet Ihre Trigger an allen Standorten auf und enthält Details wie Namen, Typen, Ziele und Status.