Alerts senden und Webhooks empfangen mit Flux Notifications
Erhalte Slack-Alerts für Abgleich-Events und löse sofortige Syncs durch Git-Pushes aus.
Flux meldet, was es tut, über Kubernetes-Events, und der notification-controller verwandelt diese in Alerts und empfängt außerdem Webhooks. Diese Anleitung richtet zwei Dinge ein: ausgehende Alerts an ein Chat-Werkzeug, wenn etwas fehlschlägt oder gelingt, und einen eingehenden Webhook, der Flux direkt nach einem Push abgleichen lässt, statt auf die nächste Abfrage zu warten. Slack ist das Beispiel, aber dieselben Objekte funktionieren mit Microsoft Teams, PagerDuty, Discord, generischen Webhooks und anderen sowie mit Git-Anbietern wie GitHub und GitLab für den Commit-Status.
Alerts an Slack senden
Drei Objekte sind beteiligt: ein Secret mit der Webhook-Adresse, ein Provider, der beschreibt, wohin gesendet wird, und ein Alert, der beschreibt, was gesendet wird.
Erstelle das Secret (der Schlüssel muss address heißen):
kubectl create secret generic slack-url \
--namespace=flux-system \
--from-literal=address=https://hooks.slack.com/services/XXX/YYY/ZZZ
apps/notifications/provider.yaml:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: slack
namespace: flux-system
spec:
type: slack
channel: deployments
secretRef:
name: slack-url
apps/notifications/alert.yaml:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: on-call
namespace: flux-system
spec:
providerRef:
name: slack
eventSeverity: error
eventSources:
- kind: GitRepository
name: "*"
- kind: Kustomization
name: "*"
- kind: HelmRelease
name: "*"
namespace: podinfo
Die wichtigen Teile:
providerRefwählt das Ziel.eventSeverityistinfo(alles, einschließlich erfolgreicher Anwendungen) odererror. Nutzeerrorfür einen ruhigen Bereitschaftskanal undinfofür ein Deployment-Log.eventSourceslistet auf, welche Objekte beobachtet werden. Ein Name von"*"passt auf alle Objekte dieser Art im Namespace, nutze alsonamespace:, um andere Namespaces zu beobachten.
Die API-Versionen der Benachrichtigungen ändern sich. v1beta2 wurde in Flux 2.9 entfernt, nutze also wie gezeigt v1beta3, wenn du Flux 2.9 betreibst; die v1-API ist für Flux 2.10 geplant. Prüfe, was dein Cluster unterstützt, mit:
kubectl get crd alerts.notification.toolkit.fluxcd.io \
-o jsonpath='{.spec.versions[*].name}'; echo
Committe diese Dateien, und wenn in einer Kustomization etwas fehlschlägt, erscheint eine Nachricht im Kanal mit Objekt, Revision und Fehler. Teste es, indem du absichtlich einen Manifest-Pfad in Git kaputt machst.
Den Commit-Status an GitHub zurückmelden
Ein zweiter Provider kann das Ergebnis eines Deployments als Commit-Status posten, sodass ein Pull Request oder Commit zeigt, ob Flux ihn angewendet hat:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: github-status
namespace: flux-system
spec:
type: github
address: https://github.com/your-org/fleet-infra
secretRef:
name: github-token # ein Secret mit einem "token"-Schlüssel
Kombiniere ihn mit einem Alert, der die Kustomization als Quelle auflistet. Das Token braucht die Berechtigung, Commit-Status zu schreiben.
Webhooks für sofortigen Sync empfangen
Standardmäßig fragt Flux Git im GitRepository-Intervall ab. Ein Receiver nimmt Webhooks von deinem Git-Host an und löst sofort einen Abgleich aus, sodass du das Abfrageintervall verlängern und trotzdem nahezu sofortige Deployments erhalten kannst.
Erstelle ein gemeinsames Secret-Token (der Schlüssel muss token heißen):
TOKEN=$(head -c 12 /dev/urandom | shasum | cut -d ' ' -f1)
echo $TOKEN
kubectl create secret generic webhook-token \
--namespace=flux-system --from-literal=token=$TOKEN
Dann der Receiver, mit der stabilen v1-API:
apiVersion: notification.toolkit.fluxcd.io/v1
kind: Receiver
metadata:
name: github-receiver
namespace: flux-system
spec:
type: github
events:
- ping
- push
secretRef:
name: webhook-token
resources:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
name: flux-system
Sobald er angewendet ist, frage Flux nach dem erzeugten Pfad:
flux get receivers
Der Pfad sieht aus wie /hook/<hash>. Der notification-controller stellt ihn über einen Service namens webhook-receiver in flux-system bereit, den du über einen Ingress oder LoadBalancer ins Internet veröffentlichst. Füge dann in den Einstellungen deines Repositorys einen Webhook mit dieser URL, dem Content-Type application/json, deinem Token als Secret und dem Event push hinzu. Ein Push löst nun einen Abgleich des GitRepository und von allem aus, was davon abhängt. Flux 2.9 unterstützt außerdem OIDC-gesicherte generische Receiver, die kein gemeinsames Secret brauchen, für Plattformen, die ein OIDC-Token vorlegen können.
Fehlersuche
- Es kommen keine Nachrichten an: Prüfe
kubectl describe alert on-call -n flux-systemund die Controller-Logs mitflux logs --level=errorund verifiziere, dass der Schlüssel des Secretsaddressheißt. - Der Webhook löst nichts aus: Sieh in das Zustellungsprotokoll deines Git-Hosts. Ein
404bedeutet meist, dass der Pfad falsch ist, ein401oder403, dass das Token nicht passt. - Zu laut: Verengere
eventSeverityund liste spezifischeeventSourcesstatt"*"auf.
Beliebte Anleitungen
-
Push vs. Pull: Wie Flux auf Kubernetes ausliefert Warum pull-basierte, Git-gesteuerte Auslieferung verändert, wie du Cluster deployst, absicherst und wiederherstellst. -
Deine erste Anwendung mit GitRepository und Kustomization deployen Richte Flux mit einer Kustomization-Ressource auf Manifeste in Git aus und sieh dem Sync zu. -
Sync-Verhalten steuern: Intervalle, Prune, Drift-Korrektur und Rollback Entscheide, wann Flux Änderungen anwendet, was es löscht, wie du es pausierst und wie du ein fehlerhaftes Deployment rückgängig machst. -
Image-Updates mit Flux Image Automation automatisieren Lass Flux neue Container-Image-Tags erkennen und in Git zurückcommitten. -
Multi-Cluster mit Flux konfigurieren Mehrere Cluster aus einem Repository verwalten, mit gemeinsamer Infrastruktur und Unterschieden pro Cluster. -
Flux CD vs. Argo CD: Ein GitOps-Werkzeug wählen Vergleiche Architektur, UI, Helm, Secrets, Mandantenfähigkeit und Image-Automatisierung, um das richtige Werkzeug zu wählen.