Pour les applications comportant de nombreux microservices ou des règles de routage complexes, un seul VirtualService peut devenir volumineux et difficile à maintenir. Pour résoudre ce problème, Service Mesh (ASM) propose un mécanisme delegate qui permet de répartir les règles de routage sur plusieurs ressources VirtualService. Cette approche réduit les risques liés aux modifications des configurations de routage. Cette rubrique utilise l'application Bookinfo pour illustrer la définition de règles de routage à l'aide de plusieurs VirtualServices.
Prérequis
Vous avez ajouté un cluster à une instance ASM. L'instance ASM doit être en version 1.8.6.4 ou ultérieure.
Une passerelle d'entrée est déployée. Pour plus d'informations, consultez la rubrique Créer une passerelle d'entrée.
Une application est déployée dans le cluster associé à l'instance ASM. Pour plus d'informations, consultez la rubrique Déployer une application dans une instance ASM.
Contexte
Dans Service Mesh (ASM), vous utilisez un VirtualService pour définir les règles de routage qui contrôlent l'acheminement du trafic vers les services. En pratique, la maintenance d'un unique VirtualService de grande taille s'avère complexe. Chaque mise à jour du routage nécessite la modification de ce VirtualService, ce qui entraîne souvent des conflits de mise à jour, des redondances et un couplage fort des configurations de routage. Toute erreur de configuration dans les règles peut affecter les services du cluster du plan de données et potentiellement interrompre tous les accès aux services.
ASM étend la ressource VirtualService avec un mécanisme delegate afin de découpler les règles de routage. Vous pouvez diviser un VirtualService en un VirtualService principal et un ou plusieurs VirtualServices secondaires. Le VirtualService principal définit les règles globales, tandis que les VirtualServices secondaires définissent les règles de routage détaillées pour des parties spécifiques de l'application. Le VirtualService principal est généralement géré par un administrateur central, et les VirtualServices secondaires sont gérés par les propriétaires individuels des services. Cette séparation des responsabilités réduit considérablement le risque lié aux modifications des règles de routage et améliore l'efficacité des déploiements et des mises à niveau indépendants des services.
Notes
ASM ne prend pas en charge les delegates imbriqués. Le paramètre Delegate ne peut être défini que dans un VirtualService principal. Par exemple, si le paramètre Delegate est défini à la fois dans un VirtualService principal et dans un VirtualService secondaire, ni l'un ni l'autre n'entreront en vigueur.
La condition
HTTPMatchRequestdans un VirtualService secondaire doit être un sous-ensemble de la condition de correspondance correspondante dans le VirtualService principal. Dans le cas contraire, un conflit survient et la règleHTTPRouten'entre pas en vigueur.Vous ne pouvez spécifier le champ
delegateque lorsque les champsrouteetredirectde la route HTTP du VirtualService principal sont vides. Le champhostsd'un VirtualService secondaire doit être vide. Les règles de routage du VirtualService secondaire sont fusionnées avec celles du VirtualService principal.
Étape 1 : Configurer la Gateway
Connectez-vous à la console ASM.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, localisez l'instance ASM à configurer. Cliquez sur le nom de l'instance ASM ou sur Manage dans la colonne Actions.
Sur la page de détails de l'instance ASM, choisissez dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.
-
Sélectionnez un Namespaces, collez le contenu YAML suivant dans l'éditeur, puis cliquez sur Create. Cette rubrique utilise l'espace de noms
defaultcomme exemple.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"Définissez
numbersur80afin que le service Bookinfo puisse recevoir les connexions HTTP entrantes ou sortantes sur le port 80.
Étape 2 : Configurer le VirtualService principal
Connectez-vous à la console ASM.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, localisez l'instance ASM à configurer. Cliquez sur le nom de l'instance ASM ou sur Manage dans la colonne Actions.
Sur la page de détails de l'instance ASM, choisissez dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.
-
Sélectionnez un Namespaces, collez le contenu YAML suivant dans l'éditeur, puis cliquez sur Create. Cette rubrique utilise l'espace de noms
defaultcomme exemple.L'exemple suivant crée des
delegatepour vs-1 et vs-2. vs-1 exige que les requêtes contiennent/logpour accéder au service Bookinfo, tandis que vs-2 exige qu'elles contiennent/.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: bookinfo namespace: default spec: gateways: - bookinfo-gateway hosts: - '*' http: - delegate: name: vs-1 namespace: ns1 match: - uri: prefix: /log - delegate: name: vs-2 namespace: ns1 match: - uri: prefix: /Paramètres du champ
delegate:name : Nom du delegate.
namespace : Espace de noms du delegate.
Étape 3 : Configurer le VirtualService enfant
Connectez-vous à la console ASM.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, localisez l'instance ASM à configurer. Cliquez sur le nom de l'instance ASM ou sur Manage dans la colonne Actions.
Sur la page de détails de l'instance ASM, choisissez dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.
-
Sélectionnez un Namespaces, collez le contenu suivant dans l'éditeur, puis cliquez sur Create.
Cette rubrique utilise l'espace de noms
ns1comme exemple. Pour plus d'informations sur la création d'un espace de noms, consultez la rubrique Gérer les espaces de noms globaux.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: vs-1 namespace: ns1 spec: http: - match: - uri: exact: /login - uri: exact: /logout route: - destination: host: productpage.default.svc.cluster.local port: number: 9080metadata : Doit correspondre au paramètre delegate du VirtualService principal pour lier le paramètre delegate. Dans cet exemple, les métadonnées correspondent au paramètre delegate de vs-1, ce qui lie le paramètre delegate de vs-1.
match : Spécifie les conditions de filtrage des requêtes. Dans cet exemple,
uriest défini surexact: /loginetexact: /logout. Cela permet de se connecter et de se déconnecter du service Bookinfo.
-
Sélectionnez à nouveau l'espace de noms
ns1dans Namespaces, collez le contenu YAML suivant dans l'éditeur, puis cliquez sur Create.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: vs-2 namespace: ns1 spec: http: - match: - uri: exact: /productpage - uri: prefix: /static - uri: prefix: /api/v1/products route: - destination: host: productpage.default.svc.cluster.local port: number: 9080metadata : La valeur doit correspondre au paramètre delegate du VirtualService principal. Cela permet de lier le paramètre delegate. Dans cet exemple, la valeur correspond au paramètre delegate de vs-2, ce qui signifie qu'elle est liée au delegate de vs-2.
match : Spécifie les conditions de filtrage d'une requête. Dans cet exemple, la requête doit contenir /productpage, /static ou /api/v1/products.
Vérifier les résultats
-
Dans votre navigateur web, accédez à http://<adresse IP de la passerelle d'entrée>/productpage.
La page suivante s'affiche. Cela indique que la requête adressée au service Bookinfo contenant le paramètre
/productpagea abouti et que le VirtualService pour vs-2 est configuré correctement. Pour obtenir l'adresse de la passerelle ASM, consultez la rubrique Obtenir l'adresse IP de la passerelle d'entrée. La page charge avec succès l'application BookInfo Sample et affiche la page produit du livre The Comedy of Errors. La section Book Details à gauche répertorie des champs tels que Type, Pages, Publisher, Language et ISBN. La section Book Reviews à droite affiche plusieurs avis d'utilisateurs et notes sous forme d'étoiles. Cela confirme que l'application de maillage de services est accessible via la passerelle ASM. -
Cliquez sur Sign in dans le coin supérieur droit de la page. Dans la boîte de dialogue qui s'affiche, saisissez un nom d'utilisateur et un mot de passe pour vous connecter au service Bookinfo.
La page se met à jour pour refléter l'état connecté. Cela confirme que le VirtualService
vs-1est configuré correctement. Après vous être connecté, votre nom d'utilisateur (par exemple,jason) et un lien sign out apparaissent dans le coin supérieur droit, confirmant la réussite de la connexion.