Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Acheminer le trafic vers plusieurs clusters via une passerelle d'entrée sans serveur ASM

Dernière mise à jour :Sep 12, 2026

Alibaba Cloud Service Mesh (ASM) achemine le trafic entrant via une unique passerelle d'entrée sans serveur vers des services applicatifs répartis sur plusieurs clusters Kubernetes au sein d'un même Virtual Private Cloud (VPC). Cette architecture améliore la disponibilité des services et réduit les coûts liés aux ressources de calcul.

Prérequis

  • Deux clusters Container Service for Kubernetes (ACK) créés dans le même VPC. Ce tutoriel utilise les clusters nommés m1c1 et m1c2. Pour plus d'informations, consultez Créer un cluster ACK dédié (obsolète) ou Créer un cluster ACK managé.

    Remarque

    Lors de la création d'un cluster, utilisez des groupes de sécurité avancés pour simplifier la communication inter-clusters.

  • Une instance ASM en version 1.18.0.139 ou ultérieure. Ce tutoriel utilise une instance ASM nommée mesh1. Pour plus d'informations, consultez Créer une instance ASM.

Étape 1 : Vérifier la communication inter-clusters

Par défaut, deux clusters situés dans le même VPC communiquent entre eux s'ils utilisent tous deux des groupes de sécurité avancés. Si l'un des clusters utilise un groupe de sécurité basique, ou si les deux groupes de sécurité ne peuvent pas communiquer, configurez les règles de groupe de sécurité pour autoriser le trafic entre eux. Pour plus d'informations, consultez Gérer les règles de groupe de sécurité.

Étape 2 : Ajouter les clusters à l'instance ASM et créer une passerelle d'entrée sans serveur

Ajoutez les deux clusters à l'instance ASM, puis créez une passerelle d'entrée sans serveur.

  1. Ajoutez les deux clusters à l'instance ASM. Pour plus d'informations, consultez Ajouter un cluster à une instance ASM.

  2. Créez une passerelle d'entrée sans serveur avec la configuration YAML suivante. Pour plus d'informations, consultez Créer une passerelle d'entrée.

    YAML de la passerelle d'entrée sans serveur

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      hostNetwork: false
      ports:
        - name: http
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 100%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: LoadBalancer

Étape 3 : Déployer l'application Bookinfo sur plusieurs clusters

Déployez les microservices Bookinfo sur les deux clusters. Le cluster m1c2 exécute la plupart des services (details, ratings, reviews v1/v2 et productpage), tandis que le cluster m1c1 exécute la version v3 du microservice reviews et le service ratings.

  1. Enregistrez le contenu suivant dans un fichier nommé bookinfo-m1c2.yaml.

    Remarque

    La version v3 du microservice reviews affiche les notes sous forme d'étoiles rouges.

    bookinfo-m1c2.yaml

    # Details service
    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: docker.io/istio/examples-bookinfo-details-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Ratings service
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Reviews service
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Productpage services
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          labels:
            app: productpage
            version: v1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
  2. Déployez l'application Bookinfo (sans le microservice reviews v3) sur le cluster m1c2 :

    kubectl apply -f bookinfo-m1c2.yaml
  3. Enregistrez le contenu suivant dans un fichier nommé bookinfo-m1c1.yaml.

    bookinfo-m1c1.yaml

    # Reviews service
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v3
      labels:
        app: reviews
        version: v3
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v3
      template:
        metadata:
          labels:
            app: reviews
            version: v3
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Ratings service
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
  4. Déployez le microservice reviews v3 et le service ratings sur le cluster m1c1 :

    kubectl apply -f bookinfo-m1c1.yaml

Étape 4 : Ajouter un service virtuel et une passerelle Istio

  1. Créez un service virtuel nommé bookinfo dans le namespace default de l'instance ASM. Pour plus d'informations, consultez Gérer les services virtuels.

    YAML du service virtuel

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  2. Créez une passerelle Istio nommée bookinfo-gateway dans le namespace default de l'instance ASM. Pour plus d'informations, consultez Gérer les passerelles Istio.

    YAML de la passerelle Istio

    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:
        - "*"
  3. Ouvrez un navigateur et accédez à http://{IP address of the serverless ingress gateway}/productpage. Actualisez la page plusieurs fois. Le trafic se répartit approximativement selon un ratio 1:1:1 entre les trois versions du microservice reviews (v1, v2 et v3). La version v3 fonctionne normalement bien qu'elle s'exécute dans un cluster différent des autres microservices.

(Facultatif) Étape 5 : Acheminer tout le trafic vers le microservice reviews v3

Définissez une règle de destination et un service virtuel pour acheminer toutes les requêtes vers la version v3 du microservice reviews.

  1. Créez une règle de destination nommée reviews dans le namespace default de l'instance ASM. Pour plus d'informations, consultez Gérer les règles de destination.

    YAML de la règle de destination

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
  2. Créez un service virtuel nommé reviews dans le namespace default de l'instance ASM. Pour plus d'informations, consultez Gérer les services virtuels.

    YAML du service virtuel

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v3
  3. Ouvrez un navigateur et accédez à http://{IP address of the serverless ingress gateway}/productpage. Actualisez la page plusieurs fois. Toutes les requêtes sont désormais acheminées vers la version v3 du microservice reviews. Les notes apparaissent sous forme d'étoiles rouges.

    Reviews with red star ratings