Envoyer des alertes et recevoir des webhooks avec les notifications Flux
Recevez des alertes Slack sur les événements de réconciliation et déclenchez des synchronisations instantanées à partir des push Git.
Flux rapporte ce qu’il fait via des événements Kubernetes, et le notification controller les transforme en alertes et reçoit aussi des webhooks. Ce guide met en place deux choses : des alertes sortantes vers un outil de chat quand quelque chose échoue ou réussit, et un webhook entrant qui fait réconcilier Flux juste après un push au lieu d’attendre la prochaine interrogation. Slack sert d’exemple, mais les mêmes objets fonctionnent avec Microsoft Teams, PagerDuty, Discord, des webhooks génériques et d’autres, ainsi qu’avec des fournisseurs Git comme GitHub et GitLab pour le statut des commits.
Envoyer des alertes vers Slack
Trois objets sont impliqués : un Secret avec l’adresse du webhook, un Provider décrivant où envoyer, et une Alert décrivant quoi envoyer.
Créez le Secret (la clé doit être address) :
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
Les éléments qui comptent :
providerRefchoisit la destination.eventSeverityvautinfo(tout, y compris les applications réussies) ouerror. Utilisezerrorpour un canal d’astreinte silencieux etinfopour un journal de déploiement.eventSourcesliste les objets à surveiller. Un nom"*"correspond à tous les objets de ce type dans le namespace, utilisez doncnamespace:pour surveiller d’autres namespaces.
Les versions d’API de notification évoluent. v1beta2 a été retirée dans Flux 2.9, utilisez donc v1beta3 comme indiqué si vous exécutez Flux 2.9, et l’API v1 est prévue pour Flux 2.10. Vérifiez ce que prend en charge votre cluster avec :
kubectl get crd alerts.notification.toolkit.fluxcd.io \
-o jsonpath='{.spec.versions[*].name}'; echo
Committez ces fichiers, et quand quelque chose échoue dans une Kustomization, un message apparaît dans le canal avec l’objet, la révision et l’erreur. Testez-le en cassant volontairement un chemin de manifeste dans Git.
Renvoyer le statut des commits à GitHub
Un second Provider peut publier le résultat d’un déploiement comme statut de commit, pour qu’une pull request ou un commit indique si Flux l’a appliqué :
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 # un Secret avec une clé "token"
Associez-le à une Alert qui liste la Kustomization comme source. Le jeton doit avoir la permission d’écrire des statuts de commit.
Recevoir des webhooks pour une synchro instantanée
Par défaut, Flux interroge Git selon l’intervalle du GitRepository. Un Receiver accepte les webhooks de votre hébergeur Git et déclenche immédiatement une réconciliation, ce qui vous permet d’allonger l’intervalle d’interrogation tout en obtenant des déploiements quasi instantanés.
Créez un jeton secret partagé (la clé doit être token) :
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
Puis le Receiver, avec l’API stable v1 :
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
Une fois appliqué, demandez à Flux le chemin qu’il a généré :
flux get receivers
Le chemin ressemble à /hook/<hash>. Le notification controller l’expose via un Service nommé webhook-receiver dans flux-system, que vous publiez sur Internet via un Ingress ou un LoadBalancer. Ensuite, dans les paramètres de votre dépôt, ajoutez un webhook avec cette URL, le type de contenu application/json, votre jeton comme secret, et l’événement push. Un push déclenche maintenant une réconciliation du GitRepository et de tout ce qui en dépend. Flux 2.9 prend aussi en charge des Receivers génériques sécurisés par OIDC qui n’ont pas besoin de secret partagé, pour les plateformes capables de présenter un jeton OIDC.
Dépannage
- Aucun message n’arrive : vérifiez
kubectl describe alert on-call -n flux-systemet les logs du contrôleur avecflux logs --level=error, et vérifiez que la clé du Secret s’appelleaddress. - Le webhook ne se déclenche pas : consultez le journal des livraisons dans votre hébergeur Git. Un
404signifie généralement que le chemin est erroné, et un401ou403que le jeton ne correspond pas. - Trop bruyant : resserrez
eventSeverityet listez deseventSourcesprécises au lieu de"*".
Guides populaires
-
Push ou pull : comment Flux livre sur Kubernetes Pourquoi une livraison pilotée par Git et basée sur le pull change la façon de déployer, de sécuriser et de restaurer les clusters. -
Déployer votre première application avec un GitRepository et une Kustomization Pointez Flux vers des manifestes dans Git à l'aide d'une ressource Kustomization et regardez la synchronisation se faire. -
Contrôler le comportement de synchronisation : intervalles, prune, correction de dérive et rollback Décidez quand Flux applique les changements, ce qu'il supprime, comment le mettre en pause et comment annuler un mauvais déploiement. -
Automatiser les mises à jour d'images avec Flux Image Automation Laissez Flux détecter les nouveaux tags d'images de conteneurs et les committer dans Git. -
Configurer le multi-cluster avec Flux Gérez plusieurs clusters depuis un seul dépôt, avec une infrastructure partagée et des différences propres à chaque cluster. -
Flux CD ou Argo CD : choisir un outil GitOps Comparez l'architecture, l'interface, Helm, les secrets, la multi-tenance et l'automatisation d'images pour choisir le bon outil.