Utilisez les traffic lanes en permissive mode pour assurer l'version isolation de vos applications. En définissant un E2E pass-through request header comme request routing header, vous dirigez le trafic vers des swimlanes spécifiques selon la valeur de cet en-tête. Si un service appelé au sein d'une swimlane n'existe pas dans la swimlane courante, la requête est transférée vers la baseline lane. Cette approche garantit l'intégrité de la chaîne d'appels et simplifie la gestion du trafic.
Avant de commencer, lisez et comprenez la rubrique Utiliser des swimlanes en mode permissif pour gérer le trafic de bout en bout ainsi que son contenu associé.
Aperçu du scénario
Cet exemple utilise trois services, mocka, mockb et mockc, pour créer trois swimlanes (s1, s2 et s3) représentant trois versions d'une chaîne d'appels de service. La swimlane s1 constitue la baseline lane et contient les trois services. La swimlane s2 ne contient que les services mocka et mockc. La swimlane s3 ne contient que le service mockb. Dans ce scénario, l'E2E pass-through request header et l'request routing header sont tous deux définis sur my-trace-id.
Étape 1 : Créer un groupe de swimlanes et des swimlanes
-
Créez un groupe de swimlanes.
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, sélectionnez .
-
Sur la page Traffic Lane, cliquez sur Create Swimlane Group. Dans le panneau Create Swimlane Group, configurez les paramètres et 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 Custom Header.
E2E Pass-through Request Header
Définissez cette valeur sur
my-trace-id.Swimlane service
Sélectionnez le cluster Kubernetes cible et le
namespacedefault. Dans la liste des services, sélectionnez mocka, mockb et mockc. Cliquez sur l'icône
pour les déplacer vers la zone selected.
-
Créez les
swimlaness1,s2ets3et associez-les respectivement aux versionsv1,v2etv3.Dans la section Traffic Lane de la page Traffic Rule Definition, cliquez sur Create swimlanes.
-
Dans la boîte de dialogue Create swimlanes, configurez les paramètres et cliquez sur OK.
Parameter
Description
Swimlane Name
Définissez les noms des trois
swimlanesrespectivement sur s1, s2 et s3.Configure Service Tag
Label Key : définissez sur ASM_TRAFFIC_TAG.
Label Value : définissez respectivement sur v1, v2 et v3 pour les
swimlaness1,s2ets3.Add Service
Pour la
swimlanes1: sélectionnez mocka(default), mockb(default) et mockc(default).Pour la
swimlanes2: sélectionnez mocka(default) et mockc(default).Pour la
swimlanes3: sélectionnez mockb(default).Une fois les trois
swimlanescréées, le résultat s'affiche. Par défaut, la premièreswimlanecréée dans un groupe devient labaseline lane. Vous pouvez modifier labaseline lane. Lorsque le trafic est envoyé vers un service inexistant dans une autreswimlane, lefallback mechanismtransfère la requête vers labaseline lane. Pour plus d'informations sur la modification de la baseline lane, consultez la rubrique Modifier la baseline lane. Sur la page Traffic Rule Definition, la Baseline Lane est définie sur s1 et le Ingress Type est ASM Gateway (ingressgateway).Après la création des trois
swimlanes, Alibaba Cloud Service Mesh génère automatiquement uneDestinationRuleet uneVirtualServicepour chaque service du groupe deswimlane. Vous pouvez les afficher en sélectionnant ou Virtual Service dans le volet de navigation de gauche. Par exemple, ASM crée automatiquement laDestinationRuleet laVirtualServicesuivantes pour le servicemocka.
-
Créez des
traffic routing rulespour les troisswimlanes.Dans la section Traffic Lane de la page Traffic Rule Definition, recherchez la
swimlanecible et cliquez sur Ingress traffic rules dans la colonne Actions.-
Dans la boîte de dialogue Add drainage rule, configurez les paramètres et cliquez sur OK.
Cet exemple suppose que l'API d'entrée pour tous les services de la
swimlaneest/mock. Par conséquent, vous configurez la mêmetraffic routing rulepour chaqueswimlane.Parameter
Description
Ingress service
Sélectionnez mocka.default.svc.cluster.local.
Ingress traffic rules
Pour les
traffic routing rulesdes troisswimlanes, définissez respectivement le Name 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.
Une fois les
traffic routing rulescréées pour les troisswimlanes, le résultat s'affiche. En plus de la correspondance URI exacte, chaque règle inclut une condition de correspondance Headers : le nom de l'en-tête estmy-trace-id, le type de correspondance est exact et les valeurs de correspondance pour lesswimlaness1,s2ets3sont respectivements1,s2ets3. La Baseline Lane est définie sur s1.Après la création des règles, ASM génère automatiquement une
VirtualServicequi définit latraffic routing rulepour chaqueswimlane. Par exemple, ASM génère laVirtualServicesuivante pour laswimlanes2.
Étape 2 : Vérifier le déploiement canari E2E
Récupérez l'adresse IP publique de la
ingress gatewayASM. Pour plus d'informations, consultez la rubrique Obtenir l'adresse IP d'une passerelle d'entrée.-
Exécutez la commande suivante pour définir une variable d'environnement.
Dans la commande,
xxx.xxx.xxx.xxxreprésente l'adresse IP obtenue à l'étape précédente.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Vérifiez le
E2E canary release.-
Exécutez la commande suivante pour tester l'accès à la
swimlanes1.La valeur
my-trace-id,s1, correspond au nom de laswimlanes1configuré à l'étape 1.2.for i in {1..100}; do curl -H'my-trace-id: s1' 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 confirme que les requêtes contenant l'en-tête HTTP
my-trace-id: s1sont acheminées vers les services de laswimlanes1. -
Exécutez la commande suivante pour tester l'accès à la
swimlanes2.La valeur
my-trace-id,s2, correspond au nom de laswimlanes2configuré à l'étape 1.2.for i in {1..100}; do curl -H'my-trace-id: s2' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Résultat attendu :
mocka(version: v2, ip: 192.168.1.101)-> mockb(version: v1, ip: 192.168.1.100)-> mockc(version: v2, ip: 192.168.1.116)Le résultat indique que les requêtes contenant l'en-tête HTTP
my-trace-id: s2sont acheminées vers les services de laswimlanes2. Lorsqu'une requête cible le servicemockb, qui n'existe pas dans laswimlanes2, lefallback mechanismtransfère la requête vers le servicemockbde labaseline lanes1. Les requêtes suivantes adressées au servicemockcsont correctement acheminées vers le servicemockcde laswimlanes2. -
Exécutez la commande suivante pour tester l'accès à la
swimlanes3.La valeur
my-trace-id,s3, correspond au nom de laswimlanes3configuré à l'étape 1.2.for i in {1..100}; do curl -H'my-trace-id: s3' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Résultat attendu :
mocka(version: v1, ip: 192.168.1.103)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 192.168.1.105)Le résultat indique que les requêtes contenant l'en-tête HTTP
my-trace-id: s3sont acheminées vers le service de laswimlanes3. Lorsque les requêtes ciblent les servicesmockaetmockc, qui n'existent pas dans laswimlanes3, lefallback mechanismtransfère les requêtes vers les servicesmockaetmockcde labaseline lanes1.
-