Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Configurer la portée de découverte de services pour améliorer l'efficacité des poussées de configuration du maillage

Dernière mise à jour :Aug 28, 2026

Configurez la portée de découverte de services lorsque les poussées de configuration sont trop longues, lorsque le plan de contrôle d'Alibaba Cloud Service Mesh (ASM) est surchargé ou lorsque les configurations de ressources manquent de précision. ASM découvre et traite alors uniquement les services situés dans les namespaces spécifiés, ce qui accélère la synchronisation de la configuration.

Prérequis

Fonctionnement de la portée de découverte de services

Dans cette rubrique, la configuration du proxy sidecar désigne les informations de configuration du maillage qu'un proxy sidecar reçoit du plan de contrôle.

Par défaut, un proxy sidecar sur le plan de données stocke les informations relatives à tous les services présents dans chaque namespace du cluster du plan de données. Ces informations sont conservées même si les charges de travail de ces namespaces n'ont pas l'injection de proxy sidecar activée. Le plan de contrôle ASM surveille également les services dans tous les namespaces du maillage ; ainsi, toute modification liée à un service déclenche la poussée des configurations correspondantes vers tous les proxies sidecar.

La portée de découverte de services utilise des sélecteurs de libellés basés sur les libellés des namespaces du cluster du plan de données. Ces sélecteurs garantissent que le plan de contrôle ASM découvre et traite les services applicatifs uniquement dans les namespaces spécifiés. La configuration du proxy sidecar ne conserve alors que les informations de service provenant des namespaces sélectionnés. Les modifications apportées aux services dans les namespaces non sélectionnés ne déclenchent plus de poussées de configuration vers les proxies sidecar.

Les sélecteurs de libellés de la portée de découverte de services prennent en charge les deux types de règles suivants :

  • Règle de correspondance exacte de libellé — Spécifiez une clé de libellé et une valeur de libellé. Un namespace correspond uniquement si son libellé correspond exactement à la clé et à la valeur spécifiées.

  • Règle de correspondance d'expression de libellé — Spécifiez une clé de libellé, un opérateur d'expression et un ensemble de valeurs de libellé pour faire correspondre les libellés de namespace sur le plan de données. Les opérateurs suivants sont disponibles :

    • In — Le namespace sur le plan de données doit posséder la clé de libellé spécifiée, et la valeur de la clé doit figurer dans l'ensemble de valeurs spécifié.

    • NotIn — Le namespace sur le plan de données doit posséder la clé de libellé spécifiée, et la valeur de la clé ne doit pas figurer dans l'ensemble de valeurs spécifié.

    • Exists — Le namespace sur le plan de données doit posséder la clé de libellé spécifiée. Aucune valeur de libellé n'est requise lorsque l'opérateur est Exists.

    • DoesNotExist — Le namespace sur le plan de données ne doit pas posséder la clé de libellé spécifiée. Aucune valeur de libellé n'est requise lorsque l'opérateur est DoesNotExist.

Configurer la portée de découverte de services

Par défaut, le plan de contrôle ASM découvre les services dans tous les namespaces du cluster du plan de données. Définissez Mesh Discovery Mode sur la découverte sélective pour limiter la découverte aux namespaces correspondant à la portée de découverte de services. Utilisez l'une des deux méthodes suivantes, mais pas les deux simultanément. Les deux méthodes définissent la même valeur pour Mesh Discovery Mode et ne diffèrent que par la manière dont vous spécifiez les namespaces à découvrir.

Avant d'utiliser l'une ou l'autre méthode, ouvrez la page de configuration :

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez Service Discovery Selectors.

Méthode 1 : Sélectionner les namespaces à découvrir

Utilisez cette méthode pour énumérer les namespaces à découvrir. Seuls les namespaces restant sélectionnés demeurent dans la portée de découverte de services ; vous devez donc mettre à jour la sélection lorsque vous ajoutez un namespace que le plan de contrôle doit découvrir.

  1. Sur la page Service Discovery Selectors, définissez Mesh Discovery Mode sur Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane.

  2. Sous l'onglet Select Namespace, sélectionnez le cluster cible.

  3. Dans la liste des namespaces qui s'affiche, cliquez sur unselect à droite de chaque namespace que vous ne souhaitez pas voir découvert par le plan de contrôle.

  4. En bas de la page, cliquez sur OK. Dans la boîte de dialogue Confirm, cliquez sur OK.

Méthode 2 : Utiliser un sélecteur de libellé

Utilisez cette méthode pour faire correspondre les namespaces par libellé. Tout namespace dont les libellés correspondent au sélecteur reste dans la portée de découverte de services, y compris les namespaces que vous créez ultérieurement. Avant de configurer le sélecteur, assurez-vous que chaque namespace que vous souhaitez voir découvert par le plan de contrôle porte un libellé correspondant. Les namespaces sans libellé correspondant sont exclus de la portée.

  1. Sur la page Service Discovery Selectors, définissez Mesh Discovery Mode sur Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane, puis cliquez sur l'onglet Edit Label Selector.

  2. Spécifiez la règle de libellé à laquelle les namespaces doivent correspondre. Par exemple, définissez Key sur asm-discovery et Operator sur Exists pour faire correspondre chaque namespace portant le libellé asm-discovery.

  3. En bas de la page, cliquez sur OK. Dans la boîte de dialogue Confirm, cliquez sur OK.

Vérifier que l'instance ASM a appliqué la configuration

  1. Dans le volet de navigation de gauche, choisissez Instance Information > Base Information.

  2. Sur la page Base Information, vérifiez le Status du maillage.

    Si le Status est Running, l'instance ASM a accepté la configuration et est de nouveau prête. Ce statut confirme uniquement la disponibilité de l'instance. Pour confirmer que le plan de contrôle ne traite plus les services dans les namespaces hors de la portée, vérifiez la configuration du proxy sidecar et les journaux du plan de contrôle comme indiqué dans Exemple : Vérifier que la portée de découverte de services prend effet.

Exemple : Vérifier que la portée de découverte de services prend effet

Cet exemple compare le comportement des poussées de configuration avant et après le rétrécissement de la portée de découverte de services. Il utilise deux namespaces dans le cluster ACK sur le plan de données : ns-in-mesh, qui a l'injection automatique de proxy sidecar activée et porte le libellé asm-discovery=enabled, et ns-not-in-mesh, qui ne possède ni l'un ni l'autre. L'application exemple httpbin s'exécute dans les deux namespaces, et l'application exemple sleep est déployée dans ns-not-in-mesh pour déclencher une modification de service.

Étape 1 : Préparer les namespaces et l'application exemple

  1. Créez les namespaces ns-in-mesh et ns-not-in-mesh pour le cluster ACK sur le plan de données. Pour plus d'informations, consultez Créer un namespace.

  2. Activez l'injection automatique de proxy sidecar pour le namespace ns-in-mesh. Pour plus d'informations, consultez Activer l'injection automatique.

  3. Exécutez la commande suivante pour ajouter le libellé asm-discovery=enabled au namespace ns-in-mesh dans le cluster ACK. Le sélecteur de libellé de l'étape 3 correspond à ce libellé.

    kubectl label namespace ns-in-mesh asm-discovery=enabled
  4. Utilisez le contenu suivant pour créer le fichier httpbin.yaml.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  5. Exécutez les commandes suivantes pour créer l'application exemple httpbin dans les namespaces ns-in-mesh et ns-not-in-mesh.

    kubectl apply -f httpbin.yaml -n ns-in-mesh
    kubectl apply -f httpbin.yaml -n ns-not-in-mesh

Étape 2 : Vérifier le comportement de poussée avant de réduire la portée

  1. Exécutez la commande suivante pour obtenir le nom du pod httpbin dans le namespace ns-in-mesh.

    kubectl get pods -n ns-in-mesh

    Sortie attendue :

    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-6fcb98998c-46qhr   2/2     Running   0          22m
  2. Exécutez la commande suivante pour exporter la configuration du proxy sidecar. Dans la commande, remplacez httpbin-6fcb98998c-46qhr par le nom du pod httpbin obtenu à l'étape précédente.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  3. Ouvrez le fichier config_dump.json que vous avez exporté et recherchez httpbin.ns-not-in-mesh.

    La recherche renvoie httpbin.ns-not-in-mesh, ce qui indique que la configuration du proxy sidecar contient toujours des informations de service provenant du namespace ns-not-in-mesh, bien que l'injection automatique de proxy sidecar ne soit pas activée pour ce namespace.

  4. Utilisez le contenu suivant pour créer le fichier sleep.yaml.

    ##################################################################################################
    # Sleep service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: sleep
    spec:
      ports:
      - port: 80
        name: http
      selector:
        app: sleep
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          labels:
            app: sleep
        spec:
          containers:
          - name: sleep
            image: pstauffer/curl
            command: ["/bin/sleep", "3650d"]
            imagePullPolicy: IfNotPresent
    ---
  5. Exécutez la commande suivante pour déployer l'application sleep dans le namespace ns-not-in-mesh du cluster ACK.

    kubectl apply -f sleep.yaml -n ns-not-in-mesh
  6. Vérifiez les journaux du plan de contrôle. Le point d'entrée de la console dépend de la version de l'instance ASM.

Instances ASM antérieures à la version 1.17.2.35

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez Instance Information > Base Information.

  3. Sur la page Base Information, cliquez sur View log à côté de Control-plane log collection.

  4. Dans le coin supérieur droit de la page Project, définissez la plage de temps sur 5 Minutes pour réduire la portée des journaux.

    Sous l'onglet Raw Log, les journaux relatifs à la création de l'application sleep sont visibles. Cela indique que même si l'injection automatique de proxy sidecar n'est pas activée pour le namespace ns-not-in-mesh, le déploiement d'une application dans ns-not-in-mesh déclenche toujours la poussée de configurations par le plan de contrôle vers les proxies sidecar sur le plan de données.

{"content":"2024-01-04T10:27:00.056248Z\tinfo\tads\tPush debounce stable[16] 1 for config ServiceEntry/ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local: 100.183738ms since last change, 100.183497ms since last push, full=true","_time_":"2024-01-04T18:27:00.056310074+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|4","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}
{"content":"2024-01-04T10:26:59.956023Z\tinfo\tads\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:26:59.956087922+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|3","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}

Instances ASM 1.17.2.35 et ultérieures

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez Log Center.

  3. Sur la page Log Center, cliquez sur l'onglet Control-Plane Logs et définissez la plage de temps sur 5 Minutes pour réduire la portée des journaux.

    Sous l'onglet Raw Log, les journaux relatifs à la création de l'application sleep sont visibles. Cela indique que même si l'injection automatique de proxy sidecar n'est pas activée pour le namespace ns-not-in-mesh, le déploiement d'une application dans ns-not-in-mesh déclenche toujours la poussée de configurations par le plan de contrôle vers les proxies sidecar sur le plan de données.

{"content":"2024-01-04T10:33:21.180016Z\tinfo\tads\tPush debounce stable[28] 2 for config Address//c847e048f73054cb192835f8a60ea5219//Pod/ns-not-in-mesh/sleep-fc5cdb9c5-pkfvr and 1 more configs: 100.488198ms since last change, 121.179298ms since last push, full=true","_time_":"2024-01-04T18:33:21.180104591+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|9","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}
{"content":"2024-01-04T10:33:21.079470Z\tinfo\tmodel\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:33:21.07954976+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|8","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}

Étape 3 : Réduire la portée de découverte de services au namespace ns-in-mesh

Suivez la procédure décrite dans Configurer la portée de découverte de services pour ne conserver que le namespace ns-in-mesh dans la portée :

  • Avec la méthode 1, cliquez sur unselect à droite de chaque namespace autre que ns-in-mesh.

  • Avec la méthode 2, définissez Key sur asm-discovery et Operator sur Exists, ce qui correspond à ns-in-mesh grâce au libellé ajouté à l'étape 1.

Étape 4 : Vérifier le comportement de poussée après avoir réduit la portée

  1. Exécutez la commande suivante pour exporter à nouveau la configuration du proxy sidecar. Dans la commande, remplacez httpbin-6fcb98998c-46qhr par le nom du pod httpbin obtenu à l'étape 2.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  2. Ouvrez le fichier config_dump.json que vous avez exporté et recherchez httpbin.ns-not-in-mesh.

    La recherche ne renvoie pas httpbin.ns-not-in-mesh, ce qui indique que la configuration du proxy sidecar ne contient plus d'informations de service provenant du namespace ns-not-in-mesh.

  3. Exécutez la commande suivante pour supprimer l'application sleep du namespace ns-not-in-mesh dans le cluster ACK.

    kubectl delete -f sleep.yaml -n ns-not-in-mesh
  4. Vérifiez à nouveau les journaux du plan de contrôle. Utilisez le chemin de navigation correspondant à votre version ASM indiqué dans Étape 2 : Vérifier le comportement de poussée avant de réduire la portée, mais définissez la plage de temps sur 15 Minutes afin que la fenêtre couvre le moment où vous avez supprimé l'application sleep.

    Aucun journal relatif à la suppression de l'application sleep n'apparaît. Cela indique que les modifications dans les namespaces situés en dehors de la portée de découverte de services ne déclenchent pas la poussée de configurations par le plan de contrôle vers les proxies sidecar.