Les lanes de trafic isolent des versions spécifiques de service dans des environnements d'exécution indépendants et acheminent les requêtes correspondantes à travers toute la chaîne d'appel, sans aucune modification du code applicatif. Cela permet des déploiements canaris de bout en bout sur plusieurs services simultanément.
Pourquoi utiliser les lanes de trafic
Les déploiements canaris Kubernetes standards couplent la distribution du trafic au nombre de réplicas : envoyer 10 % du trafic vers une version canari nécessite un réplica canari aux côtés de neuf réplicas stables. Cette approche présente deux limites majeures :
Chaînes d'appels multi-services. Une requête transitant par les services A, B et C nécessite un routage cohérent des versions à chaque étape. Kubernetes ne propose aucun mécanisme natif pour cela.
Mise à l'échelle indépendante. Avec les lanes, la distribution du trafic et le nombre de réplicas sont totalement découplés. Un seul réplica canari reçoit exactement le pourcentage de trafic que vous spécifiez, quel que soit le nombre de réplicas stables en cours d'exécution.
Les lanes de trafic ASM résolvent ces deux problèmes en étiquetant les requêtes au niveau de la passerelle d'entrée (ingress gateway) et en propageant cette étiquette sur l'ensemble de la chaîne d'appel.
Fonctionnement
La configuration des lanes via la console génère automatiquement trois ressources Istio :
| Ressource | Objectif |
|---|---|
| TrafficLabel | Attribue une étiquette à chaque requête en fonction du label de pod ASM_TRAFFIC_TAG |
| DestinationRule | Mappe les noms de lane aux sous-ensembles de version de service |
| VirtualService | Achemine les requêtes vers le sous-ensemble correct en fonction de l'en-tête x-asm-prefer-tag et de l'URI |
Flux de routage :
Une requête arrive à la passerelle d'entrée avec l'en-tête
x-asm-prefer-tag: <lane-name>.Le VirtualService fait correspondre l'en-tête et l'URI, puis achemine la requête vers le sous-ensemble correspondant du premier service.
Le TrafficLabel propage l'étiquette de lane lors des appels service-à-service suivants, maintenant la requête dans la même lane tout au long de la chaîne d'appel.
Aperçu du scénario
Ce tutoriel déploie trois lanes (s1, s2, s3), chacune contenant trois services (mocka, mockb, mockc) liés à différentes versions :
| Lane | Étiquette de service | Services |
|---|---|---|
| s1 | v1 | mocka, mockb, mockc |
| s2 | v2 | mocka, mockb, mockc |
| s3 | v3 | mocka, mockb, mockc |
Après la configuration, les requêtes avec x-asm-prefer-tag: s1 transitent exclusivement par la version v1 des trois services, celles avec s2 par la v2, et celles avec s3 par la v3.

Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance ASM Enterprise Edition ou Ultimate Edition, version 1.17.2.22 ou ultérieure. Pour plus d'informations, consultez Créer une instance ASM ou Mettre à jour une instance ASM
Un cluster ajouté à l'instance ASM. Pour plus d'informations, consultez Ajouter un cluster à une instance ASM
Une passerelle ASM nommée
ingressgateway. Pour plus d'informations, consultez Créer un service de passerelle d'entréeUne passerelle Istio nommée
ingressgatewaydans le namespaceistio-system. Pour plus d'informations, consultez Gérer les passerelles Istio
Étape 1 : Déployer les exemples de services
Activer l'injection automatique du proxy sidecar
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez ASM Instance > Global Namespace.
Sur la page Global Namespace, repérez le namespace default et cliquez sur Enable Automatic Sidecar Injection dans la colonne Automatic Sidecar Injection. Dans le message Submit, cliquez sur OK.
Pour plus d'informations, consultez Activer l'injection automatique du proxy sidecar.
Déployer les services
Déployez les versions v1, v2 et v3 des exemples de services dans le cluster ACK :
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/application-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/application-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/application-v3.yaml
Étape 2 : Créer un groupe de lanes et des lanes
Créer un groupe de lanes
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez Traffic Management Center > Traffic Lane.
Sur la page Traffic Lane, cliquez sur Create Swimlane Group. Dans le panneau Create Swimlane Group, configurez les paramètres suivants et cliquez sur OK.
| Paramètre | Valeur |
|---|---|
| Name of swim lane group | test |
| Entrance gateway | ingressgateway |
| Swimlane Services | Sélectionnez le cluster ACK dans la liste déroulante Kubernetes Clusters et sélectionnez default dans la liste déroulante Namespace. Sélectionnez mocka, mockb et mockc dans la liste des services, puis cliquez sur l'icône |
Après avoir créé le groupe de lanes, ASM génère une ressource TrafficLabel :
Créer des lanes
Créez trois lanes (s1, s2, s3) et liez chacune à la version de service correspondante. Les étapes suivantes montrent comment créer la lane s1. Répétez le même processus pour s2 (étiquette de service : v2) et s3 (étiquette de service : v3).
Dans la section Traffic Rule Definition de la page Traffic Lane, cliquez sur Create swimlanes.
Dans la boîte de dialogue Create swimlanes, configurez les paramètres suivants et cliquez sur OK.
| Paramètre | Valeur |
|---|---|
| Swimlane Name | s1 |
| Configure Service Tag | v1 |
| Add Service | Sélectionnez mocka(default), mockb(default) et mockc(default) |
Les requêtes avec l'en-tête x-asm-prefer-tag: s1 sont acheminées vers le sous-ensemble v1 de chaque service.

Après avoir créé les trois lanes, la section Traffic Rule Definition les affiche comme suit :

Chaque création de lane génère une DestinationRule. L'exemple suivant montre la DestinationRule pour la lane s1 :
Créer des règles de trafic entrant
Créez une règle de routage du trafic pour chaque lane. Les étapes suivantes montrent comment créer une règle pour la lane s1. Répétez le même processus pour s2 et s3.
Cet exemple suppose que tous les services de lane partagent le chemin de requête entrante /mock.
Dans la section Traffic Rule Definition de la page Traffic Lane, repérez la lane cible et cliquez sur Ingress traffic rules dans la colonne Actions.
Dans la boîte de dialogue Add drainage rule, configurez les paramètres suivants et cliquez sur OK.
| Paramètre | Valeur |
|---|---|
| Ingress service | mocka.default.svc.cluster.local |
| Ingress traffic rules | Name : r1, realm name : * |
| Matching request URI | Method : Exact, Content : /mock |
Après avoir créé les règles de routage du trafic pour les trois lanes, la section Traffic Rule Definition les affiche comme suit :

ASM génère un VirtualService qui achemine les requêtes en fonction de l'en-tête x-asm-prefer-tag :
Étape 3 : Vérifier le déploiement canari de bout en bout
Obtenir l'adresse IP de la passerelle
Obtenez l'adresse IP publique de la passerelle d'entrée ASM. Pour plus de détails, consultez l'étape 2 de Intégrer le service d'inférence cloud-native KServe avec ASM.
Définissez l'adresse IP comme variable d'environnement. Remplacez <gateway-ip-address> par l'adresse IP publique réelle.
export ASM_GATEWAY_IP=<gateway-ip-address>
Tester chaque lane
Envoyez 100 requêtes à chaque lane et vérifiez que le trafic reste dans les versions de service attendues.
Lane s1 (attendu : tout v1) :
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Sortie attendue :
-> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)
Les trois services renvoient la version v1, confirmant que les requêtes étiquetées avec x-asm-prefer-tag: s1 transitent exclusivement par la lane s1.
Lane s2 (attendu : tout v2) :
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s2' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Sortie attendue :
-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v2, ip: 172.17.0.126)-> mockc(version: v2, ip: 172.17.0.128)
Lane s3 (attendu : tout v3) :
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s3' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Sortie attendue :
-> mocka(version: v3, ip: 172.17.0.132)-> mockb(version: v3, ip: 172.17.0.127)-> mockc(version: v3, ip: 172.17.0.69)
Résoudre les problèmes de routage
Si une requête renvoie une version incorrecte, vérifiez les points suivants :
| Symptôme | Cause possible | Résolution |
|---|---|---|
| La réponse affiche une version incorrecte | Les labels de pod ASM_TRAFFIC_TAG ne correspondent pas à l'étiquette de service configurée pour la lane |
Vérifiez les labels des pods avec kubectl get pods --show-labels et confirmez qu'ils correspondent à la configuration de la lane |
| Aucune réponse ou erreur 404 | La route VirtualService ne correspond pas à la valeur de l'en-tête x-asm-prefer-tag ou à l'URI |
Vérifiez le YAML VirtualService pour confirmer les règles de correspondance d'en-tête et le chemin URI |
| Fuite de trafic entre les lanes | Les sous-ensembles DestinationRule ne mappent pas correctement les noms de lane aux labels de version | Inspectez le YAML DestinationRule et vérifiez que chaque sous-ensemble mappe la bonne valeur ASM_TRAFFIC_TAG |
| Échecs de routage intermittents | Le proxy sidecar n'est pas injecté sur certains pods | Exécutez kubectl get pods -o jsonpath='{.items[*].spec.containers[*].name}' pour confirmer que le conteneur istio-proxy existe sur tous les pods |
(Facultatif) Étape 4 : Vérifier la topologie du maillage
Si Mesh Topology est activé dans la console ASM, inspectez le graphique de topologie pour visualiser les chemins de requête à travers les lanes. Pour plus d'informations, consultez Activer Mesh Topology pour observer une instance ASM dans la console ASM.
Étapes suivantes
Label traffic – En savoir plus sur les concepts de labellisation du trafic et les configurations avancées