Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Recuperação de desastres para clusters ACK na mesma VPC

Última atualização: Jun 28, 2026

Ao usar o Service Mesh (ASM) para gerenciar vários clusters, é possível implantar as cargas de trabalho de um serviço nesses clusters. Por padrão, o ASM balanceia o tráfego do serviço entre todos os clusters. Para manter o tráfego dentro do cluster de origem, utilize o recurso de manutenção de tráfego no cluster. Este tópico usa a aplicação Bookinfo para demonstrar como ativar esse recurso em um ambiente multi-cluster.

Pré-requisitos

Preparações

Etapa 1: Configurar a conectividade entre clusters

(Opcional) Renomear os grupos de segurança

Renomeie os grupos de segurança de ambos os clusters para facilitar a identificação. Neste exemplo, o Security Group Name está definido como m1c1-sg e m1c2-sg.

Expandir para ver como renomear o grupo de segurança de um cluster

  1. Faça login no console do ECS. No painel de navegação à esquerda, escolha Network & Security > Security Groups.

  2. Na barra de navegação superior, selecione a região onde a instância ECS de destino está localizada.

  3. Na página Security Groups, passe o mouse sobre o nome do grupo de segurança desejado, clique em no ícone image, insira um novo nome e clique em OK.

Adicionar uma regra de grupo de segurança

Adicione regras de grupo de segurança que permitam o acesso mútuo entre os clusters. Nas configurações do grupo de segurança m1c1-sg, adicione uma regra para autorizar o acesso proveniente de m1c2-sg. Da mesma forma, no grupo de segurança m1c2-sg, adicione uma regra para autorizar o acesso proveniente de m1c1-sg. Para mais informações, consulte Adicionar uma regra de grupo de segurança.

Adicione uma regra na direção inbound: defina Authorization Policy como Allow, Protocol Type como All, Port Range como -1/-1, Authorization Type como Security Group Access e Priority como 1.

Etapa 2: Adicionar clusters e implantar um gateway de entrada

Após adicionar ambos os clusters à instância do ASM, eles obtêm acesso mútuo. Portanto, basta implantar um gateway de entrada em apenas um deles.

  1. Adicione os dois clusters à instância do ASM. Para mais informações, consulte Adicionar um cluster a uma instância do ASM.

  2. Implante um gateway de entrada para o cluster m1c1. Para mais informações, consulte Criar um gateway de entrada.

Etapa 3: Implantar o Bookinfo em cada cluster

Para verificar o recurso de manutenção de tráfego no cluster, este tópico utiliza duas aplicações Bookinfo ligeiramente diferentes. A única diferença é a versão do serviço Reviews: o m1c1 executa a v1 e o m1c2 executa a v2.

  1. Utilize o seguinte arquivo YAML para implantar a aplicação Bookinfo com a implantação Reviews v1 no cluster m1c1. Para mais informações, consulte Implantar uma aplicação em um cluster associado a uma instância do ASM.

    A implantação v1 do serviço Reviews não exibe classificações por estrelas na seção de resenhas do livro.

    Expandir para visualizar o arquivo YAML da aplicação Bookinfo no m1c1

    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
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
            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
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
            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
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    ##################################################################################################
    # 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:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9080"
            prometheus.io/path: "/metrics"
          labels:
            app: productpage
            version: v1
            cluster: m1c1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---
  2. Utilize o seguinte arquivo YAML para implantar a aplicação Bookinfo com a implantação Reviews v2 no cluster m1c2.

    A implantação v2 do serviço Reviews exibe classificações como estrelas pretas na seção de resenhas do livro.

    Expandir para visualizar o arquivo YAML da aplicação Bookinfo no m1c2

    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
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
            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
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
            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-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    ##################################################################################################
    # 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:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9080"
            prometheus.io/path: "/metrics"
          labels:
            app: productpage
            version: v1
            cluster: m1c2
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---

Etapa 4: Criar um gateway, serviço virtual e regra de destino

  1. Use o seguinte arquivo YAML para criar um gateway no namespace padrão da instância do ASM. Para mais informações, consulte Gerenciar gateways.

    Expandir para visualizar o arquivo YAML do gateway

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
  2. Use o seguinte arquivo YAML para criar um serviço virtual no namespace padrão da instância do ASM. Para mais informações, consulte Gerenciar serviços virtuais.

    Expandir para visualizar o arquivo YAML do serviço virtual

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo-cluster-local
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage1
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c1
      - match:
        - uri:
            exact: /productpage2
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c2
      - match:
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  3. Use o seguinte arquivo YAML para criar uma regra de destino no namespace padrão da instância do ASM. Para mais informações, consulte Gerenciar regras de destino.

    Expandir para visualizar o arquivo YAML da regra de destino

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: productpage-cluster-local
    spec:
      host: productpage
      subsets:
      - name: m1c1
        labels:
          cluster: m1c1
      - name: m1c2
        labels:
          cluster: m1c2
  4. No seu navegador, acesse http://{endereço IP do gateway de entrada}/productpage1 ou http://{endereço IP do gateway de entrada}/productpage2 e atualize a página.

    Para encontrar o endereço IP do gateway de entrada, consulte Criar um gateway de entrada.

    Se as classificações por estrelas aparecerem alternadamente na seção de resenhas do livro, a aplicação Bookinfo foi implantada com sucesso. A página exibe a productpage da aplicação BookInfo Sample, que contém informações sobre o livro The Comedy of Errors. A seção Book Reviews à direita mostra resenhas do Reviewer1 (5 estrelas) e do Reviewer2 (4 estrelas).

Procedimento

As etapas a seguir descrevem como ativar o recurso de manutenção de tráfego no cluster para um serviço específico, neste caso, o serviço Reviews. Para obter informações sobre como ativar o recurso globalmente ou no nível de namespace, consulte Operações relacionadas.

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Instance > Base Information.

  3. Na página Base Information, na seção Config Info, clique em Keep traffic in cluster à direita de edit.

  4. Na caixa de diálogo Configure services that keep traffic in cluster, ative a chave Enable Keep traffic in cluster, selecione Select Service e clique em Select services.

  5. Na caixa de diálogo Add services, selecione Service, escolha o Namespace na lista suspensa Namespace, marque Select services na seção Select a service, clique em no ícone 添加 e clique em OK.

  6. Após concluir a configuração, clique em Configure services that keep traffic in cluster na caixa de diálogo OK.

    Na seção Config Info, Configured é exibido à direita de Keep traffic in cluster, indicando que o recurso Keep traffic in cluster está ativado.

  7. Verifique se o recurso de manutenção de tráfego no cluster está funcionando.

    1. No seu navegador, acesse http://{endereço IP do gateway de entrada}/productpage1 e atualize a página.

      A seção de resenhas do livro consistently não mostra classificações, o que confirma que o recurso de manutenção de tráfego no cluster está funcionando conforme esperado.

    2. No seu navegador, acesse http://{endereço IP do gateway de entrada}/productpage2 e atualize a página.

      A seção de resenhas do livro exibe consistentemente resenhas com classificações de estrelas pretas. A página mostra corretamente os detalhes do livro The Comedy of Errors e o conteúdo da resenha na seção Book Reviews, confirmando que o tráfego é roteado corretamente para o serviço local no cluster m1c2.

Análise dos resultados

O diagrama a seguir ilustra o fluxo de tráfego na malha antes e depois da ativação do recurso de manutenção de tráfego no cluster.网格中流量的调用链路分析

Status

Descrição

Desativado

Na aplicação Bookinfo, o serviço Productpage chama o serviço Reviews para obter resenhas de livros. Ao acessar http://{endereço IP do gateway de entrada}/productpage1 em um navegador, você acessa o serviço Productpage no cluster m1c1. Ao acessar http://{endereço IP do gateway de entrada}/productpage2, você acessa o serviço Productpage no cluster m1c2.

Existem cargas de trabalho para o serviço Reviews tanto no cluster m1c1 quanto no m1c2. Por padrão, o Service Mesh balanceia as solicitações para o serviço Reviews entre ambos os clusters, mesmo quando o tráfego se origina de um serviço dentro de um desses clusters (por exemplo, do serviço Productpage no m1c1). Como resultado, as classificações por estrelas aparecem e desaparecem alternadamente na seção de resenhas do livro.

Ativado

Ao acessar o serviço Productpage em um cluster específico, como o m1c1, o Service Mesh deixa de balancear as solicitações entre os clusters. Em vez disso, ele roteia todas as solicitações para o serviço Reviews local. Consequentemente, a seção de resenhas do livro consistentemente não mostra classificações por estrelas.

Importante

Após a ativação deste recurso, se o serviço reviews-v1 no cluster m1c1 falhar, o serviço Productpage não poderá fazer failover para o serviço reviews-v2 no cluster m1c2.

Nota

Se você ativar o recurso de manutenção de tráfego no cluster para um serviço, os chamadores só poderão acessar os endpoints desse serviço dentro do mesmo cluster. Mesmo que os endpoints no cluster estejam indisponíveis, a malha não transferirá o tráfego para seus endpoints em outros clusters.

Para manter o tráfego no cluster para um serviço e, ao mesmo tempo, habilitar o failover, utilize regras de tráfego para criar faixas de tráfego e ativar o deslocamento de tráfego. Para mais informações, consulte Usar regras de tráfego para configurar faixas de tráfego e deslocamento de tráfego.

Operações relacionadas

Ativar tráfego no cluster globalmente

  1. Na página Base Information, na seção Config Info, clique em Keep traffic in cluster à direita de edit.

  2. Na caixa de diálogo Configure services that keep traffic in cluster, ative a chave Enable Keep traffic in cluster, selecione All Services e clique em OK.

    Após ativar esta opção, o Service Mesh mantém todo o tráfego dentro de seu cluster de origem.

Ativar tráfego no cluster para um namespace

  1. Na página Base Information, na seção Config Info, clique em Keep traffic in cluster à direita de edit.

  2. Na caixa de diálogo Configure services that keep traffic in cluster, ative a chave Enable Keep traffic in cluster, selecione Select Service e clique em Select services.

  3. Na caixa de diálogo Add services, selecione Namespace, escolha o namespace desejado na seção Select services, clique em no ícone 添加 e clique em OK.

  4. Na caixa de diálogo Configure services that keep traffic in cluster, clique em OK.

    Após ativar esta opção, o Service Mesh mantém o tráfego para os serviços no namespace de destino dentro do cluster de origem.