Table of Contents
Le mariage de l'intégration continue et du déploiement continu (CI/CD) avec les architectures de mailles de service est devenu une pierre angulaire pour la construction d'équipes et l'exploitation de systèmes modernes basés sur les microservices. À mesure que les applications deviennent complexes, la capacité de déployer des changements en toute sécurité et à plusieurs reprises sur des centaines de services tout en maintenant le plein contrôle du trafic, de la sécurité et de l'observabilité n'est plus facultative.
Ce qui est un service Mesh et pourquoi il importe pour CI/CD
Contrairement aux systèmes traditionnels de réseau, un réseau de services est déployé comme proxy de sidecar à côté de chaque instance de service, formant un réseau de mailles qui gère l'équilibrage de charge, la découverte de service, le chiffrement, l'authentification, l'autorisation et l'observabilité.
Pour CI/CD, le maillage de service représente un puissant plan de contrôle qui peut orchestrer des stratégies de déploiement bien au-delà de simples mises à jour de roulement. Sans maillage, les pipelines CI/CD mettent à jour les instances de service directement, en s'appuyant sur des balanceurs de charge pour la gestion de base du trafic.
Les principales capacités qui rendent indispensable un maillage de service pour l'IC/DC sont les suivantes :
- Scission de trafic[ – Tracer un pourcentage de trafic vers une nouvelle version pour les essais canari.
- Ragument de niveau de demande – En-têtes, cookies ou chemins spécifiques à des versions particulières (ragument basé sur l'en-tête).
- Causes et rétractations de circulation – Protéger les services en aval lors d'un mauvais déploiement.
- Mutuel TLS (mTLS) – Encrypter et authentifier automatiquement la communication interservice, en simplifiant la sécurité zéro confiance.
- Observabilité à grain fin[ – La télémétrie de chaque interaction de service fournit une rétroaction immédiate sur la santé du déploiement.
Principaux avantages de l'intégration de l'IC/CD à un mesh de service
Avant de plonger dans la mise en œuvre, il aide à comprendre ce que vous gagnez en combinant ces deux couches:
- Déploiements de coffre[ – Les essais canaris, bleu-vert et A/B sont intégrés dans le maillage; les retournements sont instantanés via le re-routage du trafic.
- Séparation des préoccupations[ – Les équipes de développement se concentrent sur la logique opérationnelle; les équipes d'exploitation gèrent la configuration des mailles par l'intermédiaire des pipelines CI/CD.
- Politiques de sécurité cohérentes[ – Automatiser l'exécution de l'authentification, de l'autorisation et du chiffrement dans le cadre du pipeline de déploiement.
- Réduction du temps de cycle[ – L'analyse canale automatisée et la vérification de la santé réduisent le ginging manuel requis pour les rejets de production.
- Observabilité à l'échelle – Chaque déploiement de mesh de service alimente les mesures, les journaux et les traces dans une pile d'observation unifiée, permettant ainsi une détection rapide des anomalies.
Préalables
Pour intégrer le CI/CD à un réseau de services, vous devez :
- Un cluster Kubernetes (ou un orchestre de conteneurs qui supporte l'injection de sidecar, comme Nomad avec Istio).
- Un maillage de service installé (Istio, Linkerd, Consul Connect, ou Open Service Mesh).
- Un outil de CI/CD (Jenkins, GitLab CI, GitHub Actions, ArgoCD, Flux, Spinnaker).
- Contrôle de version pour toutes les configurations (manifestations d'application, politiques de mailles et définitions de pipelines).
Les exemples de cet article utilisent Istio et Kubernetes, mais les modèles s'appliquent à tout maillage de service qui fournit l'acheminement du trafic et l'application des politiques.
Guide d'intégration étape par étape
1. Installation et configuration du Mesh de service
Choisissez un maillage de service et installez-le dans votre cluster. Pour Istio, l'installation standard utilise l'outil en ligne de commande ou un graphique Helm. Les étapes de configuration initiales importantes comprennent:
- Activer l'injection automatique de sidecar pour les espaces de noms qui hébergent vos microservices.
- Mise en place de la passerelle d'entrée pour le trafic externe.
- Configuration du maillage pour permettre la production globale de mTLS (recommandé pour la production).
- Création d'un ensemble de base de ressources de passerelle et de service virtuel pour gérer le routage.
Toutes ces configurations doivent être stockées dans un dépôt Git dans le cadre de votre pipeline infrastructure-as-code (IaC). Pour plus de détails sur l'installation d'Istio, reportez-vous à la documentation d'installation officielle d'Istio .
2. Structurer votre pipeline CI/CD pour le Mesh
Un pipeline de CI/CD typique intégré à un réseau de services comporte trois étapes distinctes :
- Construire et tester. Compiler le service, exécuter des essais d'unité et d'intégration, et produire une image de conteneur. Cette étape n'interagit pas avec le maillage.
- Deploy Canary. Déployez la nouvelle version du service à côté de la version stable actuelle. Créez un déploiement -canaire -canaire -canaire avec un petit nombre de répliques et une étiquette distincte (p. ex., ). Mettez à jour le service virtuel d'Istio pour acheminer un petit pourcentage de trafic (p. ex., 5%) vers le canaire.
- Promote ou Rollback. Après une période d'observation définie (ou basée sur une analyse de mesures automatisées), soit promouvoir le trafic canari à 100% et supprimer l'ancienne version, soit revenir à la version précédente en réinitialisant le routage VirtualService.
Voici un exemple d'un extrait de flux de travail GitHub Actions qui effectue une sortie canari en utilisant Istio:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up kubectl
run: |
# ... configure kubectl with cluster context
- name: Deploy canary
run: |
kubectl apply -f k8s/deployment-canary.yaml
kubectl apply -f istio/virtualservice-canary.yaml
- name: Wait for canary health
run: |
# Poll for success rate > 99% for 5 minutes
# If failing, revert VirtualService to stable routing
- name: Promote canary
if: success() #&& health check passed
run: |
kubectl apply -f istio/virtualservice-promote.yaml
kubectl delete -f k8s/deployment-stable.yaml
Pour un exemple complet de CI/CD avec Istio et GitOps, reportez-vous au blog Istio sur les déploiements canari avec Argo Rollouts.
3. Automatisation de la gestion du trafic
La vraie puissance d'un maillage de service en CI/CD est le contrôle du trafic à grain fin. Dans votre pipeline, vous pouvez ajuster dynamiquement le routage en utilisant les définitions de ressources personnalisées (DCR) de maillage.
Déploiements des Canaries
Dans Istio, un VirtualService peut diviser le trafic entre deux ou plusieurs sous-ensembles (définis via DestinationRule).
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp.svc.cluster.local
http:
- match:
- headers:
my-version:
exact: "v2"
route:
- destination:
host: myapp
subset: v2
weight: 100
- route:
- destination:
host: myapp
subset: v1
weight: 90
- destination:
host: myapp
subset: v2
weight: 10
Pour une version canari entièrement automatisée, envisagez d'utiliser des outils dédiés comme Argo Rollouts[ ou Flagger[, qui s'intègrent nativement à Istio et Linkerd pour automatiser le déplacement et l'analyse du trafic.
Déploiements bleu-vert
Les déploiements bleu-vert avec un maillage de service sont simples : déployer la nouvelle version (=>green=) à côté de l'ancien (==>bleu=) puis passer le VirtualService/Gateway au point vert. Ceci évite la reconfiguration coûteuse de l'équilibreur de charge – le maillage gère instantanément la coupe.
Flags de caractéristiques et routage en-tête
Pour tester les fonctionnalités avec les utilisateurs internes, vous pouvez configurer le maillage à la route en fonction des en-têtes. Par exemple:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp.svc.cluster.local
http:
- match:
- headers:
user-agent:
regex: ".*InternalTester.*"
route:
- destination:
host: myapp
subset: v2
- route:
- destination:
host: myapp
subset: v1
Ce modèle vous permet de tester de nouvelles versions en production avec un groupe d'utilisateurs de confiance tout en gardant le public plus large sur la version stable.
4. Les politiques de sécurité en tant que code
Les politiques de sécurité du mesh de service, telles que les politiques d'authentification, les politiques d'autorisation et les paramètres de mTLS, devraient être gérées au moyen du même pipeline CI/CD que le code d'application.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: myapp-authz
namespace: default
spec:
selector:
matchLabels:
app: myapp
version: v2
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/myapp-v2"]
to:
- operation:
methods: ["GET", "POST"]
En automatisant le déploiement de la politique de sécurité avec votre pipeline CI/CD, vous assurez que chaque nouvelle version d'un service hérite automatiquement des contrôles d'accès corrects.
5. Observabilité pour la validation du déploiement
L'intégration de CI/CD avec un maillage de service fournit une couche d'observation puissante qui peut valider les déploiements en temps quasi réel. Le maillage exporte la télémétrie (métrique, traces et journaux) que votre pipeline peut demander pour déterminer si un canari est sain.
Les critères de validation du déploiement sont les suivants :
- Taux d'erreur (HTTP 5xx) inférieur à un seuil (p. ex. 0,5 %).
- Latence (p99) ne dépassant pas la version précédente de plus de 10 %.
- Volume de trafic confirmant que le canari reçoit la part prévue.
- Absence de toute violation de la politique de sécurité.
Vous pouvez interroger ces paramètres depuis Prométhée (avec laquelle Istio s'intègre) ou depuis l'API de télémétrie intégrée de mesh. Si un canari échoue au contrôle de santé, le pipeline peut automatiquement revenir en arrière en retournant le VirtualService à la version stable.
Pour une intégration plus approfondie, voir Istio=s documentation on requesting métriques.
Modèles de CI/CD avancés avec mesh de service
Déploiements multi-groupes
Les mailles de service comme Istio supportent les mailles multi-clusters, permettant ainsi aux pipelines de déploiement de déployer des changements sur plusieurs grappes Kubernetes (p. ex., halte, région canari, production). Votre pipeline CI/CD peut utiliser une combinaison de contextes et de configuration de mailles pour appliquer des changements à des grappes spécifiques tout en maintenant le maillage unifié.
Miroir de circulation (à ombrage)
Traffic miroir copie le trafic en direct d'une version stable à une nouvelle version sans affecter l'utilisateur. Ceci est utile pour la validation de pré-production. En Istio, vous pouvez miroir trafic en utilisant le champ VirtualService . Votre pipeline CI/CD peut déployer une version avec miroir activé, analyser les performances du trafic miroir, puis promouvoir si succès.
GitOps et livraison progressive
Combinez GitOps (par exemple ArgoCD, Flux) avec des capacités de maillage de service pour une livraison progressive complète. Dans ce modèle, votre état souhaité est stocké dans Git, et un contrôleur (ArgoCD) concilie en permanence l'état du cluster avec Git. Lorsqu'un nouveau manifeste canari est poussé à Git, ArgoCD l'applique automatiquement, et le maillage impose la division du trafic. Cette approche élimine les étapes manuelles du pipeline et fournit une piste d'audit de chaque changement de configuration.
Meilleures pratiques de production
- ]Toute politique de service virtuel, de destination et d'autorisation doit être maintenue sous contrôle de version.N'éditez jamais manuellement les ressources de maillage dans le cluster.
- Analyse automatique des canaris Ne pas se fier à l'observation manuelle. Utilisez des outils comme Flagger ou Argo Rollouts pour promouvoir ou faire reculer automatiquement en fonction des seuils de mesure.
- Test mesh policys in non-production Exécuter des tests d'intégration qui valident l'acheminement du trafic, les politiques de sécurité et l'application de la norme mTLS dans un environnement de mise en scène avant de se déployer à la production.
- Surveiller le maillage lui-même. Votre pipeline CI/CD devrait inclure des contrôles de santé pour le plan de contrôle du maillage (pilot, mélangeur (si utilisé), etc.). Un plan de contrôle défaillant peut causer des problèmes de routage étendus.
- Disjoncteurs et rétries d'installation Définissez les valeurs par défaut zéro confiance pour de nouveaux services. Utilisez DestinationRules pour définir les piscines de connexion et la détection aberrante pour éviter les défaillances en cascade lors d'un mauvais déploiement.
- Short de fenêtres canari Plus un canari court, plus il risque de fausser les données de l'utilisateur réel. Visez 5 à 15 minutes d'observation de la circulation avant la promotion, à moins que vous ne effectuiez des expériences complexes de A/B.
- Procédures de retour au document Même avec un retour au fil automatique dans votre pipeline, avoir un script de retour au fil manuel qui déplace instantanément 100% de trafic vers la version précédente.
Pièges fréquents à éviter
- Ignorer les limites des ressources de sidecar. Si le proxy de sidecar est épuisé de mémoire ou de processeur, il peut affecter la communication de service.
- Déployer des changements de maillage sans se coordonner avec les services Un changement à l'IngressGateway ou à un VirtualService peut affecter simultanément plusieurs services. Utilisez les versions canaris pour modifier la configuration du maillage comme vous le feriez pour le code d'application.
- Règles de routage trop complexes Commencez par des canaris simples basés sur le poids. Évitez de chaîner trop de conditions de correspondance ou plusieurs VirtualServices chevauchant le même hôte.
- Non valide mTLS dans les tests Assurez-vous que votre pipeline CI effectue des tests de validation mTLS pour attraper les erreurs de configuration tôt.
- Si le maillage est une balle d'argent Un maillage de service ajoute de la latence et des frais généraux opérationnels. Évaluer si votre équipe a les compétences nécessaires pour le gérer avant de l'adopter pour tous les services.
Conclusion
L'intégration de CI/CD avec un réseau de services transforme votre pipeline de déploiement d'un simple processus de -push à production en un système de libération sophistiqué et contrôlé. En exploitant les fonctions de gestion du trafic, de sécurité et d'observabilité du réseau de services, vous obtenez la capacité de déployer des changements avec un risque minimal, de tester de nouvelles fonctionnalités dans le trafic réel de production et de faire appliquer des politiques cohérentes à tous les microservices.
L'investissement dans la mise en place d'un réseau de services et son intégration à votre pipeline CI/CD rapporte rapidement à mesure que votre architecture de microservice augmente. Les équipes qui adoptent ce modèle signalent moins d'incidents de déploiement, plus rapidement le temps moyen de récupération (MTTR) et une plus grande capacité d'expérimenter de nouvelles fonctionnalités.
Pour obtenir des conseils plus détaillés, explorez la documentation officielle des maillages de service populaires :