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
etistioctl
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
- Commencez bas (10 %) puis augmentez (25 %, 50 %, 100 %).
- Automatisez l’augmentation via CI/CD et alertes.
- Testez avec du load testing (Hey, k6, etc.).
- Définissez des SLIs/SLOs pour valider la stabilité.
- 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.