Déployer un déploiement Canary sur Kubernetes avec Istio

Publié le 19 juillet 2025

Kubernetes
Service Mesh

Introduction

Le déploiement Canary permet de tester progressivement une nouvelle version de votre application en production, en dirigeant un pourcentage du trafic vers la version canary. Istio, en tant que service mesh, facilite la mise en place de stratégies Canary grâce à ses ressources VirtualService et DestinationRule.

Prérequis

  • Un cluster Kubernetes (>=1.21)
  • Istio installé (version >= 1.15)
  • kubectl et istioctl configurés
  • Une application déployée avec deux versions (v1 et v2)

Installation d’Istio (si nécessaire)

1. Télécharger Istio

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.15.0
export PATH=$PWD/bin:$PATH

2. Installer le profile de base

istioctl install --set profile=demo -y

Activer l’injection automatique de sidecars :

kubectl label namespace default istio-injection=enabled

Déploiement des deux versions

1. Appliquer le manifeste de base

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: v1
  template:
    metadata:
      labels:
        app: myapp
        version: v1
    spec:
      containers:
      - name: myapp
        image: myorg/myapp:1.0
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
kubectl apply -f myapp-v1.yaml

2. Déployer la version v2

kubectl apply -f myapp-v2.yaml

myapp-v2.yaml reprend le même Deployment mais avec version: v2 et image: myorg/myapp:2.0.

Configuration du Canary

1. DestinationRule

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
kubectl apply -f destinationrule.yaml

2. VirtualService pour répartir le trafic

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - route:
    - destination:
        host: myapp
        subset: v1
      weight: 90
    - destination:
        host: myapp
        subset: v2
      weight: 10

Ajustez le weight pour augmenter progressivement la part de trafic vers v2.

kubectl apply -f virtualservice-canary.yaml

Monitoring et rollback

  • Utilisez Kiali ou Grafana pour visualiser les métriques d’Istio.
  • Si le taux d’erreur de v2 dépasse un seuil, revenez à 0 % de trafic sur v2 :
    kubectl patch virtualservice myapp --type merge -p '{"spec":{"http":[{"route":[{"destination":{"host":"myapp","subset":"v1"},"weight":100},{"destination":{"host":"myapp","subset":"v2"},"weight":0}]}]}}'
    

Bonnes pratiques

  1. Commencez bas (10 %) puis augmentez (25 %, 50 %, 100 %).
  2. Automatisez l’augmentation via CI/CD et alertes.
  3. Testez avec du load testing (Hey, k6, etc.).
  4. Définissez des SLIs/SLOs pour valider la stabilité.
  5. Sécurisez les VirtualServices avec mTLS.

Conclusion

Le Canary Deployment avec Istio vous offre un déploiement progressif sécurisé, réduisant les risques liés aux nouvelles versions et améliorant la confiance lors de vos mises à jour en production.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets.

Contactez-nous

Articles similaires qui pourraient vous intéresser