Questo tutorial mostra come configurare servizi di messaggistica di terze parti per ricevere notifiche del cluster Google Kubernetes Engine (GKE).
Servizi come Slack offrono webhook in entrata, un modo semplice per pubblicare messaggi dalle app in Slack. Cloud Run Functions è una soluzione Compute Engine leggera per creare funzioni autonome a uso specifico che rispondono a Google Cloud eventi, come le notifiche del cluster, senza la necessità di gestire un server o un ambiente di runtime. Quando GKE invia una notifica del cluster utilizzando Pub/Sub, un trigger risponde eseguendo un'azione, ad esempio l'invio di una notifica Slack.
Esistono molti servizi di terze parti creati con funzionalità di messaggistica cross-app, come IFTTT. Puoi utilizzare questo tutorial come modello per connetterti a questi servizi.
In questo tutorial, utilizzerai le funzioni Cloud Run e Pub/Sub per inviare notifiche sugli eventi del cluster GKE a Slack.
Obiettivi
- Esegui il deployment di un'applicazione Slack per ricevere notifiche esterne da GKE.
- Scrivi una funzione Cloud Run che invii notifiche Pub/Sub a Slack.
Costi
In questo documento, utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.
Prima di iniziare
- 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 Run functions, Cloud Build, Eventarc and Pub/Sub APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
After initializing the gcloud CLI, update it and install the required 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 Run functions, Cloud Build, Eventarc and Pub/Sub APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
After initializing the gcloud CLI, update it and install the required components:
gcloud components update gcloud components install alpha beta
- Attiva le notifiche del cluster GKE.
-
Sviluppatore Cloud Functions (
roles/cloudfunctions.developer
) -
Kubernetes Engine Admin (
roles/container.admin
)
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare le notifiche di Slack per le notifiche del cluster, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
Per assicurarti che l'account di servizio Compute Engine predefinito disponga delle autorizzazioni necessarie
per richiamare la funzione Cloud Run,
chiedi all'amministratore di concedere all'account di servizio Compute Engine predefinito il ruolo IAM
Invoker di Cloud Functions (roles/cloudfunctions.invoker
)
sul tuo progetto.
Notifiche Slack
Per configurare le notifiche di Slack, devi creare un'applicazione Slack, attivare i webhook in entrata per l'applicazione e installare l'applicazione in un workspace Slack.
Crea l'applicazione Slack
Unisciti a uno spazio di lavoro Slack, registrandoti con la tua email o utilizzando un invito inviato da un amministratore di Workspace.
Accedi a Slack utilizzando il nome del tuo spazio di lavoro e le credenziali del tuo account Slack.
-
- Nella finestra di dialogo Crea un'app, fai clic su Da zero.
- Specifica un nome dell'app e scegli il tuo workspace Slack.
- Fai clic su Crea app.
- Nella sezione Aggiungi funzionalità, fai clic su Webhook in arrivo.
- Fai clic sul pulsante di attivazione/disattivazione Attiva webhook in entrata.
- Nella sezione Webhook URLs for Your Workspace (URL webhook per il tuo workspace), fai clic su Add New Webhook to Workspace (Aggiungi nuovo webhook al workspace).
- Nella pagina di autorizzazione che si apre, seleziona un canale per ricevere le notifiche.
- Fai clic su Consenti.
- Un webhook per la tua applicazione Slack viene visualizzato nella sezione URL webhook per il tuo workspace. Salva l'URL per un utilizzo futuro.
Scrivi la funzione Cloud Run
Quando GKE pubblica una notifica del cluster in un argomento Pub/Sub, l'evento attiva le funzioni Cloud Run per inviare una notifica Slack.
Crea una nuova directory denominata
gke_slack
e accedi alla directory:mkdir ~/gke_slack && cd $_
Crea i seguenti file nella directory gke_slack:
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
è una variabile di ambiente di Cloud Run Functions che specifica l'URL webhook creato per l'applicazione Slack. Definisci la variabile di ambiente quando esegui il deployment della funzione.Il webhook è in ascolto e riceve messaggi da Cloud Run Functions. Quando GKE invia una notifica del cluster a Pub/Sub (l'evento), la funzione invia un messaggio (il trigger) all'URL webhook, che a sua volta invia il messaggio al workspace Slack configurato.
Puoi espandere il messaggio nella funzione
createSlackMessage
per includere molto altro, tra cui la formattazione del testo e le immagini. La funzioneisAllowedType
viene fornita per consentire il filtraggio di base delle notifiche in base all'URL del tipo. Puoi specificare i tipi di URL da consentire inallowedTypeURLs
. Questa funzione non è necessaria se hai già filtrato le notifiche, in GKE o nell'abbonamento Pub/Sub.package.json
{ "name": "gke-slack", "version": "0.0.1", "description": "Slack integration for GKE, using Cloud Run functions", "main": "index.js", "dependencies": { "@slack/webhook": "6.1.0", "@google-cloud/functions-framework": "^3.0.0" } }
package.json
descrive i seguenti attributi del programma:- Nome, versione e descrizione
- File runtime principali
- Dipendenze
Puoi aggiungere altre dipendenze, requisiti e altre informazioni in base alle esigenze.
Ora dovresti avere i file index.js
e package.json
nella directory gke_slack
.
Esegui il deployment della funzione Cloud Run
Puoi eseguire il deployment della funzione Cloud Run utilizzando Google Cloud CLI o la console Google Cloud .
gcloud
Per eseguire il deployment della funzione, esegui questo comando nella directory gke_slack:
gcloud functions deploy slackNotifier \
--gen2 \
--trigger-topic=TOPIC_NAME \
--runtime=nodejs14 \
--entry-point=slackNotifier \
--region=REGION \
--source=. \
--set-env-vars="SLACK_WEBHOOK=WEBHOOK_URL"
Sostituisci quanto segue:
TOPIC_NAME
: il nome dell'argomento Pub/Sub che hai creato quando hai attivato le notifiche del cluster.REGION
: la regione Compute Engine per la funzione.WEBHOOK_URL
: l'URL webhook creato per l'applicazione Slack in Crea l'applicazione Slack.
L'output è simile al seguente:
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
Vai alla pagina Cloud Run Functions nella console Google Cloud .
Fai clic su
Crea funzione.Nella pagina Configurazione, segui questi passaggi:
- Dall'elenco a discesa Ambiente, seleziona 2ª gen..
- Per Nome funzione, specifica slackNotifier.
- Per Regione, specifica una regione di Compute Engine.
- Nella sezione Attivatore, fai clic su AGGIUNGI ATTIVATORE EVENTARC.
- Nella finestra aperta, verifica che nell'elenco a discesa Provider di eventi sia selezionato Cloud Pub/Sub.
- Seleziona l'argomento Pub/Sub che hai creato quando hai attivato le notifiche del cluster.
- Per Regione, specifica la stessa regione di Compute Engine della funzione.
- Fai clic su SALVA TRIGGER.
- Espandi la sezione Impostazioni di runtime, build, connessioni e sicurezza.
- In Variabili di ambiente runtime, fai clic su Aggiungi variabile.
- In Nome, specifica SLACK_WEBHOOK.
- Per Valore, specifica l'URL del webhook interno creato in Crea l'applicazione Slack.
- Fai clic su Avanti.
Nella pagina Codice, segui questi passaggi:
- Seleziona Node.js 14 dall'elenco a discesa Runtime.
- Per Entry point, specifica slackNotifier.
- Nel riquadro di navigazione, seleziona index.js e sostituisci il codice con il codice campione in Scrivi la funzione Cloud.
- Nel riquadro di navigazione, seleziona package.json e sostituisci il codice con il codice campione in Scrivi la funzione Cloud.
- Fai clic su Esegui il deployment.
Una volta completato il deployment della funzione Cloud Run, riceverai una notifica Slack ogni volta che GKE invia una notifica del cluster.
Verificare le notifiche di Slack
Se hai utilizzato un cluster Autopilot, verifica le notifiche nel seguente modo:
- Avvia un upgrade del control plane.
- Attendi che GKE esegua automaticamente l'upgrade dei nodi alla nuova versione. Il tempo impiegato può variare in base ai periodi di manutenzione e alle esclusioni configurate.
- Dopo che GKE ha eseguito l'upgrade dei nodi, controlla Slack per un messaggio.
Se hai utilizzato un cluster Standard, verifica le notifiche nel seguente modo:
Esegui l'upgrade di un pool di nodi specifico a una nuova versione. Se non vuoi modificare la versione GKE sui nodi, puoi eseguire l'upgrade alla stessa versione attualmente presente sui nodi.
Dopo che GKE esegue l'upgrade dei nodi, controlla Slack per un messaggio.
La notifica di Slack è simile alla seguente:
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
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- 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.
Elimina singole risorse
Elimina la funzione Cloud Run di cui hai eseguito il deployment in questo tutorial:
gcloud functions delete slackNotifier
Puoi anche eliminare le funzioni Cloud Run dalla consoleGoogle Cloud .
Passaggi successivi
- Scopri di più sui tipi di notifiche di cluster.
- Consulta la documentazione di Cloud Run Functions e Pub/Sub.
- Scopri di più sulla creazione di app Slack.