In dieser Anleitung erfahren Sie, wie Sie Messaging-Dienste von Drittanbietern für den Empfang von GKE-Clusterbenachrichtigungen (Google Kubernetes Engine) konfigurieren.
Dienste wie Slack bieten eingehende Webhooks. Damit lassen sich Nachrichten von Anwendungen auf einfache Weise in Slack posten. Cloud Functions ist eine kompakte Compute Engine-Lösung zum Erstellen eigenständiger Funktionen, die einem einzigen Zweck dienen und jeweils auf Google Cloud-Ereignisse reagieren, darunter Cluster-Benachrichtigungen, ohne einen Server oder eine Laufzeitumgebung verwalten zu müssen. Wenn GKE eine Cluster-Benachrichtigung mit Pub/Sub sendet, löst ein Trigger eine Aktion aus, z. B. das Senden einer Slack-Benachrichtigung.
Zahlreiche Dienste von Drittanbietern haben anwendungsübergreifende Messaging-Funktionen wie IFTTT. Mithilfe dieser Anleitung als Vorlage können Sie eine Verbindung zu diesen Diensten herstellen.
In dieser Anleitung verwenden Sie Cloud Functions und Pub/Sub, um Benachrichtigungen über GKE-Clusterereignisse an Slack zu senden.
Ziele
- Stellen Sie eine Slack-Anwendung bereit, um externe Benachrichtigungen von GKE zu erhalten.
- Sie schreiben eine Cloud Functions-Funktion, die Pub/Sub-Benachrichtigungen an Slack sendet.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Vorbereitung
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Cloud Functions, Cloud Build, Eventarc and Pub/Sub APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components:gcloud components update
gcloud components install alpha beta -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Cloud Functions, Cloud Build, Eventarc and Pub/Sub APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components:gcloud components update
gcloud components install alpha beta - Aktivieren Sie GKE-Clusterbenachrichtigungen.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Einrichten von Slack-Benachrichtigungen für Clusterbenachrichtigungen benötigen:
-
Cloud Functions Developer (
roles/cloudfunctions.developer
) -
Kubernetes Engine-Administrator (
roles/container.admin
)
Bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto die Berechtigungen Cloud Functions-Invoker (roles/cloudfunctions.invoker
) im Projekt zu erteilen, damit das Compute Engine-Standarddienstkonto die erforderlichen Berechtigungen zum Aufrufen der Cloud Functions-Funktion hat.
Slack-Benachrichtigungen
Zum Einrichten von Slack-Benachrichtigungen müssen Sie eine Slack-Anwendung erstellen, eingehende Webhooks für die Anwendung aktivieren und die Anwendung in einem Slack-Arbeitsbereich installieren.
Slack-Anwendung erstellen
Um einem Slack-Arbeitsbereich beizutreten, registrieren Sie sich entweder mit Ihrer E-Mail-Adresse oder nutzen eine von einem Workspace-Administrator gesendete Einladung.
Melden Sie sich bei Slack an. Verwenden Sie hierfür den Namen Ihres Arbeitsbereichs und die Anmeldedaten für Ihr Slack-Konto.
Erstellen Sie eine neue Slack-App:
- Klicken Sie im Dialogfeld Anwendung erstellen auf Neu erstellen.
- Geben Sie einen Anwendungsnamen an und wählen Sie Ihren Slack-Arbeitsbereich aus.
- Klicken Sie auf Create App (App erstellen).
- Klicken Sie unter Features und Funktionen hinzufügen auf Eingehende Webhooks.
- Klicken Sie auf die Schaltfläche Eingehende Webhooks aktivieren.
- Klicken Sie im Abschnitt Webhook-URLs für Ihren Arbeitsbereich auf Neuen Webhook zu Arbeitsbereich hinzufügen.
- Wählen Sie auf der angezeigten Autorisierungsseite einen Kanal aus, um Benachrichtigungen zu erhalten.
- Klicken Sie auf Zulassen.
- Ein Webhook für Ihre Slack-Anwendung wird im Abschnitt Webhook-URLs für Ihren Arbeitsbereich angezeigt. Speichern Sie die URL für eine spätere Verwendung.
Cloud Functions-Funktion schreiben
Wenn GKE eine Clusterbenachrichtigung in einem Pub/Sub-Thema veröffentlicht, sendet Cloud Functions eine Slack-Benachrichtigung aus.
Erstellen Sie ein neues Verzeichnis mit dem Namen
gke_slack
und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:mkdir ~/gke_slack && cd $_
Erstellen Sie im Verzeichnis "gke_slack" die folgenden Dateien:
index.js
const functions = require('@google-cloud/functions-framework'); const { IncomingWebhook } = require('@slack/webhook'); const url = process.env.SLACK_WEBHOOK; const webhook = new IncomingWebhook(url); // Optionally filter what notification types to forward to Slack. // If empty, all types will be allowed. const allowedTypeURLs = []; // Register a CloudEvent callback with the Functions Framework that will // be executed when the Pub/Sub trigger topic receives a message. functions.cloudEvent('slackNotifier', pubSubEvent => { const data = decode(pubSubEvent.data.message.data); // Send message to Slack. if (isAllowedType(pubSubEvent.data.message.attributes)) { const message = createSlackMessage(data, pubSubEvent.data.message.attributes); webhook.send(message); } }); // decode decodes a pubsub event message from base64. const decode = (data) => { return Buffer.from(data, 'base64').toString(); } // isAllowedType can be used to filter out messages that don't match the // allowed type URLs. If allowedTypeURLs is empty, it allows all types. const isAllowedType = (attributes) => { if (allowedTypeURLs.length == 0) { return true; } for (var x in allowedTypeURLs) { if (attributes['type_url'] == allowedTypeURLs[x]) { return true; } } return false; } // createSlackMessage creates a message from a data object. const createSlackMessage = (data, attributes) => { // Write the message data and attributes. text = `${data}` for (var key in attributes) { if (attributes.hasOwnProperty(key)) { text = text + `\n\t\`${key}: ${attributes[key]}\`` } } const message = { text: text, mrkdwn: true, }; return message; }
SLACK_WEBHOOK
ist eine Cloud Functions-Umgebungsvariable, die die für Ihre Slack-Anwendung erstellte Webhook-URL angibt. Sie definieren die Umgebungsvariable, wenn Sie die Funktion bereitstellen.Der Webhook überwacht Nachrichten von Cloud Functions und empfängt sie. Wenn GKE eine Clusterbenachrichtigung an Pub/Sub (das Ereignis) sendet, sendet die Funktion eine Nachricht (den Trigger) an die Webhook-URL, die wiederum die Nachricht an den konfigurierten Slack-Arbeitsbereich sendet.
Sie können die Nachricht in der
createSlackMessage
-Funktion erweitern, um viele weitere Optionen einzubinden, darunter Textformatierungen und Bilder. Die FunktionisAllowedType
wird bereitgestellt, um die einfache Filterung von Benachrichtigungen nach URL-Typ zu ermöglichen. Sie können angeben, welche URL-Typen inallowedTypeURLs
zugelassen werden sollen. Diese Funktion ist nicht erforderlich, wenn Sie bereits in GKE oder in Ihrem Pub/Sub-Abo Benachrichtigungen gefiltert haben.package.json
{ "name": "gke-slack", "version": "0.0.1", "description": "Slack integration for GKE, using Cloud Functions", "main": "index.js", "dependencies": { "@slack/webhook": "6.1.0", "@google-cloud/functions-framework": "^3.0.0" } }
package.json
beschreibt die folgenden Attribute des Programms:- Name, Version und Beschreibung
- Primäre Laufzeitdatei(en)
- Abhängigkeiten
Sie können bei Bedarf weitere Abhängigkeiten, Anforderungen und andere Informationen hinzufügen.
Jetzt sollten sich die Dateien index.js
und package.json
im gke_slack
-Verzeichnis befinden.
Cloud Functions-Funktion bereitstellen
Sie können die Cloud Functions-Funktion entweder mit der Google Cloud CLI oder der Google Cloud Console bereitstellen.
gcloud
Führen Sie folgenden Befehl im Verzeichnis "gke_slack" aus, um die Funktion bereitzustellen:
gcloud functions deploy slackNotifier \
--gen2 \
--trigger-topic=TOPIC_NAME \
--runtime=nodejs14 \
--entry-point=slackNotifier \
--region=REGION \
--source=. \
--set-env-vars="SLACK_WEBHOOK=WEBHOOK_URL"
Dabei gilt:
TOPIC_NAME
: der Name des Pub/Sub-Themas, das Sie beim Aktivieren von Clusterbenachrichtigungen erstellt haben.REGION
: die Compute Engine-Region für die Funktion.WEBHOOK_URL
ist die Webhook-URL, die für Ihre Slack-Anwendung unter Slack-Anwendung erstellen erstellt wurde.
Die entsprechende Ausgabe sieht etwa so aus:
Deploying function…
availableMemoryMb: 256
entryPoint: slackNotifier
environmentVariables:
SLACK_WEBHOOK: https://hooks.slack.com/services/…
eventTrigger:
eventType: google.pubsub.topic.publish
failurePolicy: {}
resource: projects/PROJECT_ID/topics/TOPIC_NAME
service: pubsub.googleapis.com
labels:
deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/us-central1/functions/slackNotifier
runtime: nodejs10
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/…
status: ACTIVE
timeout: 60s
updateTime: 'YYYY-MM-DDThh:mm:ssZ'
versionId: '1'
Console
Rufen Sie in der Google Cloud Console die Seite Cloud Functions auf.
Klicken Sie auf
Funktion erstellen.Führen Sie auf der Seite Konfiguration folgende Schritte aus:
- Wählen Sie in der Drop-down-Liste Umgebung die Option 2. Generation aus.
- Geben Sie unter Funktionsname den Wert slackNotifier ein.
- Geben Sie unter Region eine Compute Engine-Region an.
- Klicken Sie im Abschnitt Trigger auf EVENTARC-TRIGGER HINZUFÜGEN.
- Wählen Sie im geöffneten Fenster in der Drop-down-Liste Ereignisanbieter die Option Cloud Pub/Sub aus.
- Wählen Sie das Pub/Sub-Thema aus, das Sie beim Aktivieren von Clusterbenachrichtigungen erstellt haben.
- Geben Sie für Region dieselbe Compute Engine-Region wie für die Funktion an.
- Klicken Sie auf TRIGGER SPEICHERN.
- Maximieren Sie den Abschnitt Laufzeit, Build, Verbindungen und Sicherheitseinstellungen.
- Klicken Sie unter Umgebungsvariablen der Laufzeit auf Variable hinzufügen.
- Geben Sie als Name SLACK_WEBHOOK an.
- Geben Sie als Wert die URL des internen Webhooks an, der unter Slack-Anwendung erstellen erstellt wurde.
- Klicken Sie auf Weiter.
Führen Sie auf der Seite Code folgende Schritte aus:
- Wählen Sie in der Drop-down-Liste Laufzeit die Option Node.js 14.
- Geben Sie als Einstiegspunkt slackNotifier an.
- Wählen Sie im Navigationsbereich index.js aus und ersetzen Sie den Code durch den Beispielcode unter Cloud Functions-Funktion schreiben.
- Wählen Sie im Navigationsbereich package.json aus und ersetzen Sie den Code durch den Beispielcode unter Cloud Functions-Funktion schreiben.
- Klicken Sie auf Bereitstellen.
Nachdem Sie die Cloud Functions-Funktion bereitgestellt haben, erhalten Sie jedes Mal eine Slack-Benachrichtigung, wenn GKE eine Cluster-Benachrichtigung sendet.
Slack-Benachrichtigungen prüfen
Wenn Sie einen Autopilot-Cluster verwendet haben, prüfen Sie Benachrichtigungen so:
- Upgrade der Steuerungsebene starten
- Warten Sie, bis GKE Ihre Knoten automatisch auf die neue Version aktualisiert hat. Die Dauer kann je nach den konfigurierten Wartungsfenstern und -ausschlüssen variieren.
- Nachdem GKE die Knoten aktualisiert hat, prüfen Sie Slack auf Nachrichten.
Wenn Sie einen Standardcluster verwendet haben, prüfen Sie Benachrichtigungen so:
Aktualisieren Sie einen bestimmten Knotenpool auf eine neue Version Wenn Sie die GKE-Version auf den Knoten nicht ändern möchten, können Sie ein Upgrade auf die aktuelle Version auf den Knoten ausführen.
Nachdem GKE die Knoten aktualisiert hat, prüfen Sie Slack auf Nachrichten.
Die Slack-Benachrichtigung sieht in etwa so aus:
Master is upgrading to version 1.20.10-gke.301.
cluster_location: us-central1
cluster_name: pubsub-cluster
payload: {"resourceType":"MASTER", "operation":"operation-1632775054313-45128f4f", "operationStartTime":"2021-09-27T20:37:34.313742491Z", "currentVersion":"1.20.9-gke.1001", "targetVersion":"1.20.10-gke.301"}
project_id: 729788050015
type_url: type.googleapis.com/google.container.v1beta1.UpgradeEvent
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Einzelne Ressourcen löschen
Löschen Sie die Cloud Functions-Funktion, die Sie in dieser Anleitung bereitgestellt haben:
gcloud functions delete slackNotifier
Sie können Cloud Functions-Funktionen auch über die Google Cloud Console löschen.
Nächste Schritte
- Mehr über die Arten von Clusterbenachrichtigungen erfahren
- Dokumentation zu Cloud Functions und Pub/Sub
- Mehr über das Erstellen von Slack-Anwendungen erfahren