Benachrichtigungen zu Clusterupgrades für Drittanbieterdienste konfigurieren

Wenn Sie oder Google Kubernetes Engine (GKE) ein Cluster-Upgrade einleiten, können Sie Benachrichtigungen zu diesen Änderungen über Messaging-Dienste von Drittanbietern erhalten.

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. Beispiel: Benachrichtigungen, ohne einen Server oder eine Laufzeitumgebung verwalten zu müssen. Wenn eine Benachrichtigung gesendet wird, löst ein Trigger eine Aktion aus, z. B. das Senden einer Pub/Sub-Nachricht.

Zahlreiche Dienste von Drittanbietern haben anwendungsübergreifende Messaging-Funktionen wie IFTTT. Sie können diese Anleitung als Vorlage verwenden, um eine Verbindung zu diesen Diensten herzustellen.

In dieser Anleitung wird gezeigt, wie Sie mit Cloud Functions und Pub/Sub Benachrichtigungen über GKE-Cluster-Upgrades über Slack senden.

Ziele

  • Stellen Sie eine Slack-Anwendung bereit, um externe Benachrichtigungen von GKE zu erhalten.
  • Sie schreiben eine Cloud-Funktion, um Pub/Sub-Benachrichtigungen an Slack zu senden.

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Cloud Functions
  • Pub/Sub
  • GKE

Mit unserem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.

Hinweis

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud Functions and Pub/Sub APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren und initialisieren Sie das Cloud SDK.
  6. Aktualisieren und installieren Sie gcloud-Komponenten:
    gcloud components update &&
    gcloud components install alpha beta
  7. Aktivieren Sie GKE-Upgrade-Benachrichtigungen.

Slack-Benachrichtigungen

In den folgenden Abschnitten erfahren Sie, wie Sie Slack-Benachrichtigungen einrichten.

Slack-Anwendung vorbereiten

  1. Laden Sie Slack auf Ihren Computer herunter. Außerdem müssen Sie einem Slack-Arbeitsbereich beitreten. Registrieren Sie sich hierfür entweder mit Ihrer E-Mail-Adresse oder über eine von einem Arbeitsbereichadministrator erhaltene Einladung.

  2. Melden Sie sich bei Slack an. Verwenden Sie hierfür den Namen Ihres Arbeitsbereichs und die Anmeldedaten für Ihr Slack-Konto.

  3. Erstellen Sie eine neue Slack-Anwendung:

    1. Wählen Sie den Namen der Anwendung und den Slack-Arbeitsbereich aus. Klicken Sie auf Create App (App erstellen).
    2. Klicken Sie unter Features auf Incoming Webhooks (Eingehende Webhooks).
    3. Wählen Sie Activate incoming Webhooks (Eingehende Webhooks aktivieren) aus.
    4. Klicken Sie auf Add New Webhook to Workspace (Arbeitsbereich neuen Webhook hinzufügen). Eine Autorisierungsseite wird geöffnet.
    5. Wählen Sie im Drop-down-Menü den Kanal aus, an den Benachrichtigungen gesendet werden sollen.
    6. Klicken Sie auf Install (Installieren).
    7. Für Ihre Slack-Anwendung wurde ein Webhook erstellt. Kopieren Sie die Webhook-URL und speichern Sie sie zur späteren Verwendung.

Cloud-Funktion schreiben

Erstellen Sie ein neues Verzeichnis mit dem Namen gke_slack und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

mkdir ~/gke_slack
cd ~/gke_slack

Erstellen Sie dann im Verzeichnis gke_slack die Dateien index.js und package.json:

index.js

const { IncomingWebhook } = require('@slack/webhook');
const url = process.env.SLACK_WEBHOOK_URL;

const webhook = new IncomingWebhook(url);

// Optionally filter what notification types to forward to Slack.
// If empty, all types will be allowed.
const allowedTypeURLs = [];

// slackNotifier is the main function called by Cloud Functions
module.exports.slackNotifier = (pubSubEvent, context) => {
  const data = decode(pubSubEvent.data);

  // Send message to Slack.
  if (isAllowedType(pubSubEvent.attributes)) {
    const message = createSlackMessage(data, pubSubEvent.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_URL ist eine Cloud Functions-Umgebungsvariable, die die für Ihre Slack-Anwendung erstellte Webhook-URL angibt. Diese Umgebungsvariable wird beim Bereitstellen der Funktion definiert.

Dieses Programm erkennt und empfängt mit dem Slack-Webhook Nachrichten von Cloud Functions. Bei Auslösung eines Ereignisses wird eine Nachricht an den Webhook gesendet und anschließend an Slack weitergeleitet.

Die Funktion createSlackMessage wurde für dieses Beispiel vereinfacht. Sie können die Nachricht beispielsweise um Text und Farben erweitern.

Die Funktion isAllowedType wird bereitgestellt, um die einfache Filterung von Benachrichtigungen nach URL-Typ zu ermöglichen. Sie können angeben, welche URL-Typen in allowedTypeURLs zugelassen werden sollen.

package.json

{
  "name": "gke-slack",
  "version": "0.0.1",
  "description": "Slack integration for GKE, using Cloud Functions",
  "main": "index.js",
  "dependencies": {
    "@slack/webhook": "5.0.1"
  }
}

package.json beschreibt Folgendes:

  • Den Namen, die Version und die Beschreibung des Programms
  • Die primären Laufzeitdateien
  • Die Abhängigkeiten

Die Datei ist einfach aufgebaut, kann aber nach Bedarf durch zusätzliche Abhängigkeiten, Anforderungen und sonstige Informationen erweitert werden.

Sie sollten jetzt index.js und package.json im Verzeichnis gke_slack haben.

Cloud Functions-Funktion bereitstellen

Führen Sie den folgenden Befehl im Verzeichnis gke_slack aus, um die Funktion slackNotifier mit einem Pub/Sub-Trigger bereitzustellen:

gcloud functions deploy slackNotifier --trigger-topic topic-name \
  --runtime nodejs10 \
  --set-env-vars "SLACK_WEBHOOK_URL=https://hooks.slack.com/…"

Wobei:

  • SLACK_WEBHOOK_URL definiert die Webhook-URL, die für Ihre Slack-Anwendung erstellt wurde. Das URL-Format lautet: https://hooks.slack.com/services/T…/B…/…
  • topic-name ist der Name des Themas, das Sie bei der Aktivierung von GKE-Upgrade-Benachrichtigungen angegeben haben.

Die Ausgabe sollte etwa wie folgt aussehen:

Deploying function…
availableMemoryMb: 256
entryPoint: slackNotifier
environmentVariables:
  SLACK_WEBHOOK_URL: 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'

Wenn die Cloud Functions-Funktion bereitgestellt ist, erhalten Sie eine Slack-Benachrichtigung, wenn GKE eine Upgrade-Benachrichtigung sendet.

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 behalten Sie das Projekt und löschen Sie die einzelnen Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Cloud Functions-Funktion 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