Utiliser des Webhooks au lieu du sondage
Par défaut, SUSE® Rancher Prime Continuous Delivery utilise le sondage (toutes les 15 secondes par défaut) pour extraire d’un dépôt Git. Le sondage fonctionne bien pour les petites installations (jusqu’à quelques dizaines de dépôts).
Pour des déploiements plus importants, configurez des webhooks pour déclencher la réconciliation lorsque de nouveaux commits arrivent. Cela réduit le délai entre un push Git et le traitement du changement par SUSE® Rancher Prime Continuous Delivery.
Lorsque plusieurs commits arrivent rapidement, les contrôleurs SUSE® Rancher Prime Continuous Delivery les traitent via la boucle de réconciliation normale lors de la mise à jour des ressources GitRepo correspondantes. Cela aide à éviter les conflits de mise à jour et améliore la fiabilité dans les déploiements à grande échelle.
Pour les installations avec de nombreux dépôts ou lorsque vous souhaitez réduire la latence (le temps entre un push Git et la réaction de SUSE® Rancher Prime Continuous Delivery), configurez webhooks au lieu du sondage.
SUSE® Rancher Prime Continuous Delivery prend actuellement en charge ces fournisseurs :
-
Azure DevOps
-
GitHub
-
GitLab
-
Bitbucket
-
Bitbucket Server
-
Gogs
1. Configurer le service Webhook
SUSE® Rancher Prime Continuous Delivery utilise un service gitjob pour gérer les requêtes de webhook.
Créez un Ingress qui pointe vers le service gitjob.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webhook-ingress
namespace: cattle-fleet-system
spec:
rules:
- host: your.domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitjob
port:
number: 80
Si vous souhaitez rendre le webhook disponible en utilisant le même nom d’hôte que Rancher ou un autre service, utilisez le YAML suivant.
Cet exemple utilise le contrôleur Ingress NGINX et expose le webhook à http://your.domain.com/gitjob.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: webhook-ingress
namespace: cattle-fleet-system
spec:
rules:
- host: your.domain.com
http:
paths:
- path: /gitjob(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: gitjob
port:
number: 80
L’Ingress Nginx sera retraité, voici un exemple utilisant Traefik :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
traefik.ingress.kubernetes.io/router.middlewares: cattle-fleet-system-gitjob-stripprefix@kubernetescrd
traefik.ingress.kubernetes.io/router.priority: '100'
name: webhook-ingress
namespace: cattle-fleet-system
spec:
ingressClassName: traefik
rules:
- host: your.domain.com
http:
paths:
- backend:
service:
name: gitjob
port:
number: 80
path: /gitjob(/|$)(.*)
pathType: ImplementationSpecific
|
Utilisez l’annotation |
Cette configuration nécessite un middleware pour supprimer le chemin supplémentaire de l’URL, puisque gitjob répond directement depuis le chemin racine. Ceci est équivalent à l’annotation nginx.ingress.kubernetes.io/rewrite-target dans Nginx :
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: gitjob-stripprefix
namespace: cattle-fleet-system
spec:
stripPrefix:
prefixes:
- /gitjob
Cette approche permet une migration fluide d’Ingress Nginx vers Traefik tout en maintenant la configuration de l’application inchangée.
|
Vous pouvez configurer TLS sur Ingress pour une communication sécurisée. |
2. Configurez l’URL de rappel du Webhook.
Allez sur votre fournisseur Git et configurez l’URL de rappel du webhook. L’image suivante montre un exemple de GitHub.
- image
-
../../images/webhook.png[]
La configuration d’un secret est optionnelle. Le secret est utilisé pour valider la charge utile du webhook puisque la charge utile ne doit pas être considérée comme fiable par défaut.
Si votre point de terminaison de webhook est accessible publiquement, il est fortement recommandé de configurer un secret. Si vous configurez un secret, continuez avec l’étape 3.
|
Seul |
|
Lorsqu’un webhook est configuré, l’intervalle de sondage s’ajuste automatiquement à une heure. |
3. (Optionnel) Configurez un secret de Webhook.
Le secret du webhook valide la charge utile envoyée par votre fournisseur Git. Chaque fournisseur pris en charge utilise un nom de clé spécifique dans le secret Kubernetes.
| Provider | Clé secrète Kubernetes |
|---|---|
GitHub |
|
GitLab |
|
Bitbucket |
|
Bitbucket Server |
|
Gogs |
|
Azure DevOps |
|
Azure DevOps |
|
Option 1 : Configurer un secret à l’échelle du cluster
Dans cette approche, le secret s’applique à l’ensemble du cluster, et tous les GitRepos l’utilisent automatiquement. Vous n’avez pas besoin de le référencer dans les définitions individuelles de GitRepo.
Lorsqu’un payload est reçu, SUSE® Rancher Prime Continuous Delivery vérifie si le secret existe (gitjob-webhook dans l’espace de noms cattle-fleet-system) et utilise la clé appropriée pour la validation.
Pour GitHub :
kubectl create secret generic gitjob-webhook \
-n cattle-fleet-system \
--from-literal=github=webhooksecretvalue
Pour Azure DevOps :
-
Activez l’authentification de base dans Azure.
-
Créez un secret contenant les identifiants.
kubectl create secret generic gitjob-webhook \
-n cattle-fleet-system \
--from-literal=azure-username=user \
--from-literal=azure-password=pass123
Option 2 : Configurer un secret par GitRepo
Vous pouvez définir un secret de webhook unique pour chaque GitRepo.
Créez le secret dans le même espace de noms que le GitRepo, et référez-vous à lui en utilisant le champ webhookSecret dans la spécification.
Exemple :
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: simple
namespace: fleet-local
spec:
repo: "https://github.com/rancher/fleet-examples"
paths:
- simple
disablePolling: true
webhookSecret: webhook-secret-name
Si un secret à l’échelle du cluster et un secret par GitRepo existent, SUSE® Rancher Prime Continuous Delivery utilise le secret par GitRepo.