Les voies de trafic en mode permissif permettent d'isoler les versions des applications. Le système achemine le trafic vers différentes voies en fonction des en-têtes de requête propagés et entrants. Si un service appelé n'existe pas dans la voie actuelle, le système transfère la requête vers la voie de référence. Cette approche garantit l'intégrité de la chaîne d'appels et simplifie la gestion du trafic.
Avant de commencer, lisez attentivement la rubrique Utiliser les voies de trafic en mode permissif pour la gestion du trafic de bout en bout et assimilez les concepts connexes.
Présentation du scénario
Cet exemple utilise trois services (mocka, mockb et mockc) pour créer trois voies de trafic représentant trois versions d'une chaîne d'appels : s1, s2 et s3. La voie s1 constitue la voie de référence et contient les trois services. La voie s2 ne contient que les services mocka et mockc. La voie s3 ne contient que le service mockb.
Étape 1 : Créer un groupe de voies et des voies
-
Créez un groupe de voies.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance cible. Dans le volet de navigation de gauche, choisissez .
-
Sur la page Traffic Lane, cliquez sur Create Swimlane Group. Dans le panneau Create Swimlane Group, configurez les paramètres, puis cliquez sur OK.
Parameter
Description
Name of swim lane group
Dans cet exemple, définissez le nom sur test.
Entrance gateway
Sélectionnez ingressgateway.
Lane Mode
Sélectionnez Permissive Mode.
Pass-through Mode of Trace Context
Sélectionnez Pass Through Trace ID.
Trace ID Request Header
L'application exemple propage l'en-tête de requête
my-trace-idtout au long de la chaîne d'appels. Définissez donc ce paramètre surmy-trace-id.Routing Request Header
Cet en-tête permet à la passerelle d'acheminer le trafic entrant vers différentes voies et de maintenir le contexte de la voie. Vous pouvez spécifier n'importe quel nom d'en-tête valide. Dans cet exemple, utilisez x-asm-prefer-tag.
Swimlane Services
Sélectionnez le cluster Kubernetes cible et le namespace default. Dans la liste des services disponibles, sélectionnez mocka, mockb et mockc, puis cliquez sur l'icône
pour les déplacer vers la liste selected.Une fois la configuration terminée, le système génère automatiquement une ressource
TrafficLabelcorrespondante. Dans le volet de navigation de gauche, cliquez sur TrafficLabel pour afficher la ressource. Par exemple, la ressourceTrafficLabelsuivante est générée pour le servicemocka.
-
Créez les voies s1, s2 et s3, et associez-les respectivement aux versions v1, v2 et v3.
Sur la page Traffic Lane, dans la section Traffic Rule Definition, cliquez sur Create swimlanes.
-
Dans la boîte de dialogue Create swimlanes, configurez les paramètres, puis cliquez sur OK.
Parameter
Description
Swimlane Name
Nommez les trois voies s1, s2 et s3 respectivement.
Configure Service Tag
Label Key : sélectionnez ASM_TRAFFIC_TAG.
Label Value : sélectionnez v1 pour la voie s1, v2 pour la voie s2 et v3 pour la voie s3.
Add Service
Voie s1 : sélectionnez mocka(default), mockb(default) et mockc(default).
Voie s2 : sélectionnez mocka(default) et mockc(default).
Voie s3 : sélectionnez mockb(default).
Une fois les trois voies créées, le résultat se présente comme suit :
RemarquePar défaut, la première voie de trafic créée dans un groupe de voies devient la voie de référence. Vous pouvez modifier la voie de référence. Si une requête cible un service qui ne se trouve pas dans la voie actuelle, le mécanisme de secours la redirige vers la voie de référence. Pour plus d'informations, consultez la section Modifier la voie de référence en mode permissif.
Après la création des trois voies, le système génère une ressource
DestinationRuleet une ressourceVirtualServicepour chaque service du groupe de voies. Dans le volet de navigation de gauche, choisissez ou pour afficher ces ressources. Par exemple, les ressourcesDestinationRuleetVirtualServicesuivantes sont automatiquement créées pour le servicemocka.
-
Créez des règles de trafic entrant pour les trois voies.
Sur la page Traffic Lane, dans la section Traffic Rule Definition, localisez la voie cible et cliquez sur Ingress traffic rules dans la colonne Actions.
-
Dans la boîte de dialogue Add drainage rule, configurez les paramètres, puis cliquez sur OK.
Cet exemple suppose que l'API entrante pour tous les services des voies est
/mock. Configurez la même règle de trafic entrant pour chaque voie.Parameter
Description
Ingress service
Sélectionnez mocka.default.svc.cluster.local.
Ingress traffic rules
Définissez le Name des trois règles respectivement sur r1, r2 et r3. Définissez le realm name sur *.
Matching request URI
Définissez la Method sur Exact et le Content sur /mock.
Après la création des règles de trafic entrant pour les trois voies, la configuration est la suivante : voie s1 (référence, libellé v1, avec les services mocka, mockb et mockc), voie s2 (libellé v2, avec les services mocka et mockc) et voie s3 (libellé v3, avec le service mockb). Chaque règle de trafic entrant inclut également une condition de correspondance d'en-tête pour
x-asm-prefer-tagqui correspond exactement au nom de la voie respective.Une fois les règles créées, le système génère automatiquement une règle de trafic entrant (une VirtualService) pour chaque voie. Par exemple, la VirtualService suivante est générée pour la voie s2.
Étape 2 : Vérifier la fonctionnalité de canary de bout en bout
Récupérez l'adresse IP publique de la passerelle entrante ASM. Pour plus d'informations, consultez la rubrique Obtenir l'adresse IP de la passerelle entrante ASM.
-
Exécutez la commande suivante pour définir une variable d'environnement.
Remplacez
xxx.xxx.xxx.xxxpar l'adresse IP obtenue à l'étape précédente.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Vérifiez que la fonctionnalité de canary de bout en bout fonctionne comme prévu.
-
Exécutez la commande suivante pour vérifier l'accès à la voie s1.
La valeur de l'en-tête
x-asm-prefer-tag,s1, correspond au nom que vous avez configuré pour la voie s1 lors de la sous-étape 2 de l'étape 1.for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Résultat attendu :
-> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)Le résultat montre que le trafic portant l'en-tête de requête
x-asm-prefer-tag: s1est acheminé vers les services de la voie s1, comme prévu. -
Exécutez la commande suivante pour vérifier l'accès à la voie s2.
La valeur de l'en-tête
x-asm-prefer-tag,s2, correspond au nom que vous avez configuré pour la voie s2 lors de la sous-étape 2 de l'étape 1.for i in {1..100}; do curl -H 'x-asm-prefer-tag: s2' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Résultat attendu :
-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v2, ip: 172.17.0.128)Le résultat montre que le trafic portant l'en-tête de requête
x-asm-prefer-tag: s2est acheminé vers les services de la voie s2. Lorsque le trafic est envoyé au servicemockb, qui n'existe pas dans la voie s2, le mécanisme de secours achemine la requête vers le servicemockbde la voie de référence s1. Lorsque la chaîne d'appels se poursuit vers le servicemockc, le trafic est correctement redirigé vers le servicemockcde la voie s2. Il s'agit du comportement attendu. -
Exécutez la commande suivante pour vérifier l'accès à la voie s3.
La valeur de l'en-tête
x-asm-prefer-tag,s3, correspond au nom que vous avez configuré pour la voie s3 lors de la sous-étape 2 de l'étape 1.for i in {1..100}; do curl -H 'x-asm-prefer-tag: s3' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Résultat attendu :
mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 172.17.0.130)Le résultat montre que le trafic portant l'en-tête de requête
x-asm-prefer-tag: s3est acheminé vers les services de la voie s3. Lorsque le trafic est envoyé aux servicesmockaetmockc, qui n'existent pas dans la voie s3, le mécanisme de secours achemine les requêtes vers les servicesmockaetmockcde la voie de référence s1. Il s'agit du comportement attendu.
-
Modifier la voie de référence en mode permissif
Avant de pouvoir modifier la voie de référence, vous devez disposer d'un groupe de voies en mode permissif contenant au moins deux voies.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Traffic Lane, cliquez sur l'onglet du groupe de voies cible. Dans la section Traffic Rule Definition, cliquez sur l'icône
située à côté de Baseline Lane.Sélectionnez le nom de la nouvelle voie de référence et cliquez sur confirm edit.