Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Route traffic to multiple clusters through an ASM serverless ingress gateway

Última actualización: Sep 12, 2026

Alibaba Cloud Service Mesh (ASM) enruta el tráfico entrante a través de una única puerta de enlace de entrada serverless hacia los servicios de aplicación distribuidos en varios clústeres de Kubernetes dentro de la misma Virtual Private Cloud (VPC). Esta arquitectura mejora la disponibilidad del servicio y reduce los costos de los recursos de cómputo.

Requisitos previos

  • Dos clústeres de Container Service for Kubernetes (ACK) creados en la misma VPC. Este tutorial utiliza clústeres llamados m1c1 y m1c2. Para obtener más información, consulte Create an ACK dedicated cluster (discontinued) o Create an ACK managed cluster.

    Nota

    Al crear un clúster, utilice security groups avanzados para simplificar la comunicación entre clústeres.

  • Una instancia de ASM con versión 1.18.0.139 o posterior. Este tutorial utiliza una instancia de ASM llamada mesh1. Para obtener más información, consulte Create an ASM instance.

Paso 1: Compruebe la comunicación entre clústeres

Dos clústeres en la misma VPC se comunican de forma predeterminada cuando ambos utilizan security groups avanzados. Si alguno de los clústeres usa un security group básico, o si los dos security groups no pueden comunicarse, configure reglas de security group para permitir el tráfico entre ellos. Para obtener más información, consulte Manage security group rules.

Paso 2: Agregue los clústeres a la instancia de ASM y cree una puerta de enlace de entrada serverless

Agregue ambos clústeres a la instancia de ASM y, a continuación, cree una puerta de enlace de entrada serverless.

  1. Agregue los dos clústeres a la instancia de ASM. Para obtener más información, consulte Add a cluster to an ASM instance.

  2. Cree una puerta de enlace de entrada serverless con la siguiente configuración YAML. Para obtener más información, consulte Create an ingress gateway.

    Serverless ingress gateway YAML

    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

Paso 3: Despliegue la aplicación Bookinfo en varios clústeres

Despliegue los microservices de Bookinfo en ambos clústeres. El clúster m1c2 ejecuta la mayoría de los servicios (details, ratings, reviews v1/v2 y productpage), mientras que el clúster m1c1 ejecuta la versión v3 del microservice reviews y el servicio ratings.

  1. Guarde el siguiente contenido en un archivo llamado bookinfo-m1c2.yaml.

    Nota

    La versión v3 del microservice reviews muestra las calificaciones como estrellas rojas.

    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. Despliegue la aplicación Bookinfo (sin el microservice reviews v3) en el clúster m1c2:

    kubectl apply -f bookinfo-m1c2.yaml
  3. Guarde el siguiente contenido en un archivo llamado 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. Despliegue el microservice reviews v3 y el servicio ratings en el clúster m1c1:

    kubectl apply -f bookinfo-m1c1.yaml

Paso 4: Agregue un servicio virtual y una puerta de enlace de Istio

  1. Cree un servicio virtual llamado bookinfo en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage virtual services.

    Virtual service YAML

    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. Cree una puerta de enlace de Istio llamada bookinfo-gateway en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage Istio gateways.

    Istio gateway YAML

    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. Abra un navegador y vaya a http://{IP address of the serverless ingress gateway}/productpage. Actualice la página varias veces. El tráfico se distribuye aproximadamente en una proporción 1:1:1 entre las tres versiones del microservice reviews (v1, v2 y v3). La versión v3 funciona con normalidad, aunque se ejecute en un clúster distinto al de los demás microservices.

(Opcional) Paso 5: Enrute todo el tráfico al microservice reviews v3

Defina una regla de destino y un servicio virtual para enrutar todas las solicitudes a la versión v3 del microservice reviews.

  1. Cree una regla de destino llamada reviews en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage destination rules.

    Destination rule YAML

    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. Cree un servicio virtual llamado reviews en el espacio de nombres default de la instancia de ASM. Para obtener más información, consulte Manage virtual services.

    Virtual service YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v3
  3. Abra un navegador y vaya a http://{IP address of the serverless ingress gateway}/productpage. Actualice la página varias veces. Ahora todas las solicitudes se enrutan a la versión v3 del microservice reviews. Las calificaciones aparecen como estrellas rojas.

    Reviews with red star ratings