Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Délégation VirtualService dans ASM

Dernière mise à jour :Aug 11, 2026

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

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 HTTPMatchRequest dans 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ègle HTTPRoute n'entre pas en vigueur.

  • Vous ne pouvez spécifier le champ delegate que lorsque les champs route et redirect de la route HTTP du VirtualService principal sont vides. Le champ hosts d'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

  1. Connectez-vous à la console ASM.

  2. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  3. 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.

  4. Sur la page de détails de l'instance ASM, choisissez ASM Gateways > Gateway dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.

  5. Sélectionnez un Namespaces, collez le contenu YAML suivant dans l'éditeur, puis cliquez sur Create. Cette rubrique utilise l'espace de noms default comme 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 number sur 80 afin que le service Bookinfo puisse recevoir les connexions HTTP entrantes ou sortantes sur le port 80.

Étape 2 : Configurer le VirtualService principal

  1. Connectez-vous à la console ASM.

  2. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  3. 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.

  4. Sur la page de détails de l'instance ASM, choisissez Traffic Management Center > VirtualService dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.

  5. Sélectionnez un Namespaces, collez le contenu YAML suivant dans l'éditeur, puis cliquez sur Create. Cette rubrique utilise l'espace de noms default comme exemple.

    L'exemple suivant crée des delegate pour vs-1 et vs-2. vs-1 exige que les requêtes contiennent /log pour 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

  1. Connectez-vous à la console ASM.

  2. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  3. 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.

  4. Sur la page de détails de l'instance ASM, choisissez Traffic Management Center > VirtualService dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.

  5. Sélectionnez un Namespaces, collez le contenu suivant dans l'éditeur, puis cliquez sur Create.

    Cette rubrique utilise l'espace de noms ns1 comme 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: 9080
    • metadata : 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, uri est défini sur exact: /login et exact: /logout. Cela permet de se connecter et de se déconnecter du service Bookinfo.

  6. Sélectionnez à nouveau l'espace de noms ns1 dans 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: 9080
    • metadata : 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

  1. 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 /productpage a 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.

  2. 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-1 est 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.