Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Utiliser une passerelle sans serveur ASM comme point d'entrée unique pour l'accès à plusieurs clusters

Dernière mise à jour :Aug 11, 2026

Service Mesh (ASM) vous permet de déployer des services applicatifs dans plusieurs clusters Kubernetes au sein d'un même réseau privé virtuel (VPC) et de configurer une passerelle ingress sans serveur comme proxy du trafic entrant de ces clusters. Cette approche améliore la disponibilité globale des services et réduit les coûts liés aux ressources de calcul.

Prérequis

  • Deux clusters Container Service for Kubernetes (ACK), nommés m1c1 et m1c2 dans cet exemple, sont créés dans le même VPC. Pour plus d'informations, consultez les pages 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, nous vous recommandons de configurer des groupes de sécurité avancés.

  • Une instance ASM de version v1.18.0.139 ou ultérieure est créée. L'instance mesh1 est utilisée dans cet exemple. Pour savoir comment créer une instance ASM, reportez-vous à la section Créer une instance ASM.

Étape 1 : Vérifier que les deux clusters peuvent communiquer entre eux

Par défaut, deux clusters situés dans le même VPC peuvent communiquer entre eux s'ils sont associés à des groupes de sécurité avancés. Si l'un des clusters utilise un groupe de sécurité de base ou si les deux groupes de sécurité ne peuvent pas communiquer, configurez des règles de groupe de sécurité pour les clusters. Pour plus de détails, consultez la rubrique Gérer les règles de groupe de sécurité.

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

Après avoir ajouté les deux clusters à l'instance ASM, créez une passerelle ingress sans serveur.

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

  2. Créez une passerelle ingress sans serveur à l'aide du fichier YAML suivant. Pour plus d'informations, consultez la page Créer une passerelle ingress.

    Développer pour afficher le fichier YAML de la passerelle ingress 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

ASM permet de déployer une application sur plusieurs clusters. Vous pouvez répartir les microservices de l'application Bookinfo entre les deux clusters.

  1. Créez les ressources configurées dans le fichier bookinfo-m1c2.yaml au sein du cluster m1c2 à l'aide du contenu suivant :

    Remarque

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

    Afficher le fichier YAML de l'application Bookinfo

    # 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. Exécutez la commande suivante pour déployer l'application Bookinfo (sans la version v3 du microservice reviews) dans le cluster m1c2 :

    kubectl apply -f bookinfo-m1c2.yaml
  3. Créez les ressources configurées dans le fichier bookinfo-m1c1.yaml au sein du cluster m1c1 à l'aide du contenu suivant :

    Afficher le fichier 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. Exécutez la commande suivante pour déployer la version v3 du microservice reviews ainsi que le microservice ratings dans 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 l'espace de noms par défaut de l'instance ASM. Pour plus d'informations, consultez la page Gérer les services virtuels.

    Développer pour afficher le fichier 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 l'espace de noms par défaut de l'instance ASM. Pour plus d'informations, consultez la page Gérer les passerelles Istio.

    Développer pour afficher le fichier 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. Dans la barre d'adresse de votre navigateur, saisissez http://{IP address of the serverless ingress gateway}/productpage et actualisez la page plusieurs fois.

    Vous constatez que la répartition des requêtes vers les trois versions du microservice reviews est proche de 1:1:1. La version v3 du microservice reviews fonctionne correctement bien qu'elle ne soit pas déployée dans le même cluster que les autres microservices.

(Facultatif) Étape 5 : Router systématiquement les requêtes vers la version v3 du microservice reviews

Définissez une règle de destination et un service virtuel pour établir une politique de déploiement des microservices de l'application Bookinfo. L'exemple ci-dessous configure le routage systématique des requêtes vers la version v3 du microservice reviews.

  1. Créez une règle de destination nommée reviews dans l'espace de noms par défaut de l'instance ASM. Pour plus d'informations, consultez la page Gérer les services virtuels.

    Développer pour afficher le fichier 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 l'espace de noms par défaut de l'instance ASM. Pour plus d'informations, consultez la page Gérer les services virtuels.

    Développer pour afficher le fichier 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. Dans la barre d'adresse de votre navigateur, saisissez http://{IP address of the serverless ingress gateway}/productpage et actualisez la page plusieurs fois.

    Vous observez que les requêtes sont toujours acheminées vers la version v3 du microservice reviews. Dans ce cas, les notes s'affichent sous forme d'étoiles rouges.书评用红星