Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Prepare for traffic lanes in permissive mode

Dernière mise à jour :Aug 11, 2026

Les voies de trafic acheminent le trafic de bout en bout vers des versions de service spécifiques en fonction des en-têtes de requête. Lorsque plusieurs équipes développent simultanément différentes fonctionnalités, les voies de trafic isolent le flux de requêtes de chaque équipe sur l'ensemble de la chaîne d'appel, empêchant ainsi toute contamination croisée entre les versions. En mode permissif, les requêtes non correspondantes basculent automatiquement vers les services de base.

Cette rubrique présente les étapes de préparation communes et celles spécifiques à chaque scénario. Suivez les étapes correspondant à votre scénario, puis consultez le guide associé.

Étape Tâche S'applique à
1 Créer une passerelle Istio Tous les scénarios
2 Déployer des exemples de services Scénario 1 et Scénario 2
3 Configurer la propagation des en-têtes baggage Scénario 3

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

Étape 1 : Créer une passerelle Istio

Créez une passerelle Istio nommée ingressgateway dans le namespace istio-system. Cette passerelle écoute le trafic HTTP sur le port 80 et accepte les requêtes pour tous les hôtes. Pour plus d'informations, consultez la page Gérer les passerelles Istio.

  1. Enregistrez le code YAML suivant dans un fichier nommé gateway.yaml :

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: ingressgateway
      namespace: istio-system
    spec:
      selector:
        istio: ingressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
            - '*'
  2. Appliquez la configuration :

    kubectl apply -f gateway.yaml
  3. Vérifiez que la passerelle est créée :

    kubectl get gateway ingressgateway -n istio-system

    Résultat attendu :

    NAME              AGE
    ingressgateway    10s

Étape 2 : Déployer des exemples de services

Remarque

Cette étape s'applique uniquement au Scénario 1 et au Scénario 2. Si vous prévoyez d'utiliser le Scénario 3, passez directement à l'Étape 3.

Activer l'injection automatique du proxy sidecar

Activez l'injection automatique du proxy sidecar pour le namespace default. Consultez la section Activer l'injection automatique du proxy sidecar.

Pour plus de détails sur les politiques d'injection, consultez la page Configurer les politiques d'injection du proxy sidecar.

Déployer les services

Déployez trois versions des exemples de services dans votre cluster Container Service for Kubernetes (ACK) :

kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-tracing-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-tracing-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-tracing-v3.yaml

Vérifiez que tous les pods sont en cours d'exécution :

kubectl get pods -n default

Tous les pods doivent afficher le statut Running avec 2/2 conteneurs prêts (le conteneur d'application et le proxy sidecar).

Remarque

Les exemples de services pour le Scénario 1 et le Scénario 2 sont écrits en Golang. Le Scénario 3 utilise des services basés sur Java, car le mécanisme de propagation des en-têtes baggage présente des exigences spécifiques au langage. Pour plus de détails, consultez la page Injecting Auto-instrumentation.

Étape 3 : Configurer la propagation des en-têtes baggage

Remarque

Cette étape s'applique uniquement au Scénario 3.

Cette étape utilise la fonctionnalité d'auto-instrumentation de l'OpenTelemetry Operator pour activer la propagation transparente des en-têtes baggage entre les pods de service, sans modifier le code de l'application.

3a. Déployer l'OpenTelemetry Operator

  1. Connectez-vous au cluster Kubernetes ajouté à votre instance ASM et créez le namespace opentelemetry-operator-system :

    kubectl create namespace opentelemetry-operator-system
  2. Installez l'OpenTelemetry Operator avec Helm. Si Helm n'est pas installé, consultez la page Install Helm.

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    helm install  \
        --namespace=opentelemetry-operator-system \
        --version=0.46.0 \
        --set admissionWebhooks.certManager.enabled=false \
        --set admissionWebhooks.certManager.autoGenerateCert=true \
        --set manager.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-operator" \
        --set manager.image.tag="0.92.1" \
        --set kubeRBACProxy.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/kube-rbac-proxy" \
        --set kubeRBACProxy.image.tag="v0.13.1" \
        --set manager.collectorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-collector" \
        --set manager.collectorImage.tag="0.97.0" \
        --set manager.opampBridgeImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/operator-opamp-bridge" \
        --set manager.opampBridgeImage.tag="0.97.0" \
        --set manager.targetAllocatorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/target-allocator" \
        --set manager.targetAllocatorImage.tag="0.97.0" \
        --set manager.autoInstrumentationImage.java.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-java" \
        --set manager.autoInstrumentationImage.java.tag="1.32.1" \
        --set manager.autoInstrumentationImage.nodejs.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-nodejs" \
        --set manager.autoInstrumentationImage.nodejs.tag="0.49.1" \
        --set manager.autoInstrumentationImage.python.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-python" \
        --set manager.autoInstrumentationImage.python.tag="0.44b0" \
        --set manager.autoInstrumentationImage.dotnet.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-dotnet" \
        --set manager.autoInstrumentationImage.dotnet.tag="1.2.0" \
        --set manager.autoInstrumentationImage.go.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-go-instrumentation" \
        --set manager.autoInstrumentationImage.go.tag="v0.10.1.alpha-2-aliyun" \
        opentelemetry-operator open-telemetry/opentelemetry-operator
  3. Vérifiez que l'Operator est en cours d'exécution :

    kubectl get pod -n opentelemetry-operator-system

    Résultat attendu :

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m

    Les deux conteneurs (2/2) doivent être au statut Running.

3b. Configurer l'auto-instrumentation

La ressource Instrumentation indique à l'OpenTelemetry Operator comment injecter l'instrumentation dans les pods de service. Le paramètre propagators: [baggage] active la propagation des en-têtes W3C Baggage, dont dépendent les voies de trafic pour transmettre le contexte de routage entre les services.

Choisissez la configuration correspondant à votre environnement :

Option A : OpenTelemetry Collector n'est pas déployé

Utilisez cette configuration lorsque vous avez uniquement besoin de la propagation des en-têtes baggage pour les voies de trafic, sans collecte de métriques ni de traces. L'échantillonneur always_off désactive la collecte des traces, et OTEL_METRICS_EXPORTER: none désactive l'exportation des métriques, de sorte qu'aucune donnée de télémétrie n'est générée.

Enregistrez le code YAML suivant dans un fichier nommé instrumentation.yaml :

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: demo-instrumentation
spec:
  env:
  - name: OTEL_METRICS_EXPORTER
    value: none
  propagators:
  - baggage
  sampler:
    argument: "1"
    type: always_off

Option B : OpenTelemetry Collector est déployé

Utilisez cette configuration si vous disposez d'un OpenTelemetry Collector dans votre cluster et souhaitez collecter à la fois les traces et les en-têtes baggage. L'échantillonneur parentbased_traceidratio avec l'argument "1" échantillonne 100 % des traces.

Enregistrez le code YAML suivant dans un fichier nommé instrumentation.yaml :

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: demo-instrumentation
spec:
  propagators:
    - baggage
  sampler:
    type: parentbased_traceidratio
    argument: "1"
Important

Si aucun OpenTelemetry Collector n'est déployé, il est impossible d'activer la Collecte de métriques et l'Analyse des traces. Pour collecter les données de tracing ASM vers Managed Service for OpenTelemetry, consultez la page Collecter les données de tracing ASM vers Managed Service for OpenTelemetry.

Appliquez la ressource Instrumentation au namespace default :

kubectl apply -f instrumentation.yaml -n default

Vérifiez la ressource Instrumentation :

kubectl describe instrumentation demo-instrumentation -n default

Le résultat doit afficher les paramètres de propagateurs et d'échantillonnage configurés.

Remarque

L'étape d'annotation requise pour activer l'auto-instrumentation sur des pods individuels est décrite dans le Scénario 3. Le déploiement d'un OpenTelemetry Collector sort du cadre de cette rubrique. Pour collecter les données de tracing ASM, consultez la page Collecter les données de tracing ASM vers Managed Service for OpenTelemetry.

Étapes suivantes

Passez au scénario correspondant à votre cas d'utilisation :

Scénario Quand l'utiliser Étapes requises
Scénario 1 : L'en-tête baggage n'est pas propagé par l'application Les services ne transmettent pas l'en-tête baggage Étape 1, Étape 2
Scénario 2 : L'en-tête baggage est propagé par l'application Les services propagent déjà l'en-tête baggage dans le code de l'application Étape 1, Étape 2
Scénario 3 : Propagation transparente de l'en-tête baggage Propagation automatique des en-têtes baggage sans modification du code de l'application Étape 1, Étape 3