Todos os produtos
Search
Central de documentação

Microservices Engine:Implementar um lançamento canário de ponta a ponta baseado em gateways MSE Ingress

Última atualização: Jul 20, 2026

O Microservices Engine (MSE) permite implementar um lançamento canário de ponta a ponta com base em gateways MSE Ingress. Assim, você aplica limitação de tráfego de ponta a ponta sem modificar o código da aplicação.

Pré-requisitos

Limites de uso

O recurso de lançamento canário de ponta a ponta integra-se ao roteamento baseado em tags. Se você utilizar o Microservices Governance para implementar esse recurso em suas aplicações, evite configurar regras de lançamento canário e de roteamento baseado em tags simultaneamente.

Para mais informações sobre as versões do Java e frameworks compatíveis com o lançamento canário de ponta a ponta, consulte Java frameworks supported by Microservices Governance.

Informações básicas

Em cenários de microsserviços com aplicações Spring Cloud ou Dubbo, o tráfego distribui-se aleatoriamente entre as versões da aplicação por padrão. Consequentemente, o tráfego com características específicas pode não alcançar a versão desejada. O lançamento canário de ponta a ponta resolve essa questão ao isolar versões específicas da aplicação em lanes (ambientes de execução independentes) e rotear o tráfego correspondente às regras definidas para a versão adequada. Crie lanes para isolar versões da aplicação e configure regras de roteamento nos gateways MSE Ingress para direcionar o tráfego.

Cenário

Este exemplo demonstra um lançamento canário de ponta a ponta, desde um gateway MSE Ingress até os microsserviços de backend, em um cenário de pedidos de e-commerce. A arquitetura consiste em um gateway MSE Ingress e um backend Spring Cloud com três aplicações: centro de transações (Aplicação A), centro de produtos (Aplicação B) e centro de estoque (Aplicação C). Um cliente ou página HTML acessa essas aplicações de backend registradas em uma instância Nacos.

Após um cliente realizar um pedido, o tráfego flui pelo gateway MSE Ingress e segue sequencialmente para a Aplicação A, Aplicação B e Aplicação C: Cliente -> Gateway MSE Ingress -> Aplicação A -> Aplicação B -> Aplicação C.

Antes de lançar novas versões da Aplicação A e da Aplicação C, teste a nova versão em ambas usando um lançamento canário. Após comprovar a estabilidade, lance a versão tanto para a Aplicação A quanto para a Aplicação C. O recurso de lançamento canário de ponta a ponta, baseado em gateways MSE Ingress e Microservices Governance, garante que o tráfego canário com características específicas seja sempre roteado para as versões canário em múltiplas aplicações. Caso uma aplicação não possua versão canário, o tráfego será roteado automaticamente para seu ambiente base.

全链路灰度场景

Termos

  • Lane

    Ambiente isolado definido para aplicações da mesma versão. Apenas o tráfego correspondente a regras específicas de controle é roteado para as aplicações em uma lane. Uma aplicação pode pertencer a várias lanes, e uma lane pode conter várias aplicações. Existe uma relação muitos-para-muitos entre aplicações e lanes.

  • Lane group

    Conjunto de lanes utilizado para distinguir diferentes equipes ou cenários.

  • MSE Ingress gateway

    Um gateway MSE Ingress gerencia o tráfego de Ingress com base em gateways nativos da cloud do MSE. Compatível com NGINX Ingress, suporta mais de 50 anotações desse sistema e permite lançamentos canário para múltiplas versões de service simultaneamente. Com governança de service flexível e proteção de segurança abrangente, atende às demandas de governança de tráfego de aplicações distribuídas nativas da cloud em grande escala.

Pré-requisitos

Ativar o Microservices Governance para aplicações

  1. Ative a edição Professional do MSE Microservices Governance.

    Para mais informações, consulte Activate Microservices Governance.

  2. Ative o Microservices Governance para as aplicações.

    1. Faça login no console do MSE.

    2. No painel de navegação à esquerda, escolha Microservices Governance > O&M Center > K8s cluster list. Localize o cluster desejado e clique em Manage na coluna Actions.

    3. Na página cluster details, localize o namespace desejado e clique em Activate Microservices Governance na coluna Operation. Na mensagem exibida, clique em OK.

Implantar aplicações de demonstração

  1. Faça login no Console de Gerenciamento do Container Service.

  2. No painel de navegação à esquerda, clique em Clusters.

  3. Na página Cluster List, clique no nome do cluster de destino ou em Details na coluna Actions.

  4. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Workload > Deployments.

  5. Na página Stateless, selecione um Namespaces e clique em Create from YAML.

  6. Configure o modelo e clique em Create.

    Neste exemplo, implanta-se uma aplicação Nacos Server para descoberta de service, além das Aplicações A, B e C. As Aplicações A e C recebem versões base e canário, enquanto a Aplicação B recebe apenas a versão base.

    Implante a aplicação nacos-server.

    Show YAML content

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nacos-server
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nacos-server
      template:
        metadata:
          labels:
            app: nacos-server
        spec:
          containers:
          - env:
            - name: MODE
              value: standalone
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/nacos-server:v2.1.2
            imagePullPolicy: Always
            name: nacos-server
          dnsPolicy: ClusterFirst
          restartPolicy: Always
    
    # The configuration of the nacos-server service.
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nacos-server
    spec:
      ports:
      - port: 8848
        protocol: TCP
        targetPort: 8848
      selector:
        app: nacos-server
      type: ClusterIP
    • Implante a Aplicação A.

      • Código YAML para a versão base

        Show the YAML code for the base version

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-a
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-a
          template:
            metadata:
              labels:
                app: spring-cloud-a
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-a
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-a
                ports:
                - containerPort: 20001
                livenessProbe:
                  tcpSocket:
                    port: 20001
                  initialDelaySeconds: 10
                  periodSeconds: 30
      • Código YAML para a versão canário

        Show the YAML code for the canary version

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-a-gray
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-a-gray
          strategy:
          template:
            metadata:
              labels:
                app: spring-cloud-a-gray
                msePilotAutoEnable: 'on'
                alicloud.service.tag: gray
                msePilotCreateAppName: spring-cloud-a
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-a-gray
                ports:
                - containerPort: 20001
                livenessProbe:
                  tcpSocket:
                    port: 20001
                  initialDelaySeconds: 10
                  periodSeconds: 30
    • Implante a Aplicação B.

      • Código YAML para a versão base

        Show the YAML code for the base version

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-b
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-b
          strategy:
          template:
            metadata:
              labels:
                app: spring-cloud-b
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-b
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-b
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20002
                  initialDelaySeconds: 10
                  periodSeconds: 30
    • Implante a Aplicação C.

      • Código YAML para a versão base

        Show the YAML code for the base version

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-c
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-c
          template:
            metadata:
              labels:
                app: spring-cloud-c
                msePilotAutoEnable: 'on'
                msePilotCreateAppName: spring-cloud-c
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                imagePullPolicy: Always
                name: spring-cloud-c
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20003
                  initialDelaySeconds: 10
                  periodSeconds: 30
      • Código YAML para a versão canário

        Show the YAML code for the canary version

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: spring-cloud-c-gray
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: spring-cloud-c-gray
          template:
            metadata:
              labels:
                app: spring-cloud-c-gray
                msePilotAutoEnable: 'on'
                alicloud.service.tag: gray
                msePilotCreateAppName: spring-cloud-c
            spec:
              containers:
              - env:
                - name: JAVA_HOME
                  value: /usr/lib/jvm/java-1.8-openjdk/jre
                image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                imagePullPolicy: IfNotPresent
                name: spring-cloud-c-gray
                ports:
                - containerPort: 8080
                livenessProbe:
                  tcpSocket:
                    port: 20003
                  initialDelaySeconds: 10
                  periodSeconds: 30
  7. Configure dois services Kubernetes para a Aplicação A (aplicação de entrada).

    1. Faça login no console do ACK.

    2. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Network > Services.

    3. Na página Service, selecione um Namespaces, clique em Create from YAML, configure o modelo e clique em Create.

      • Código YAML para o service spring-cloud-a-base implantado para a versão base da Aplicação A

        View YAML content

        apiVersion: v1
        kind: Service
        metadata:
          name: spring-cloud-a-base
        spec:
          ports:
            - name: http
              port: 20001
              protocol: TCP
              targetPort: 20001
          selector:
            app: spring-cloud-a
      • Código YAML para o service spring-cloud-a-gray implantado para a versão canário da Aplicação A

        View YAML content

        apiVersion: v1
        kind: Service
        metadata:
          name: spring-cloud-a-gray
        spec:
          ports:
            - name: http
              port: 20001
              protocol: TCP
              targetPort: 20001
          selector:
            app: spring-cloud-a-gray

Etapa 1: Criar um grupo de lanes

  1. Faça login no console do MSE e selecione uma região na barra de navegação superior.

  2. No painel de navegação à esquerda, escolha Microservices Governance > Full link Grayscale.

  3. Na página End-to-end Canary Release, clique em Create Lane Groups and Lanes. Se já existir um grupo de lanes no namespace de microsserviço selecionado, clique em +Create Lane Group.

  4. No painel Create Lane Group, defina os parâmetros do grupo de lanes e clique em OK.

    Parâmetro

    Descrição

    Name of Lane Group

    Insira um nome para o grupo de lanes.

    Entry Type

    Selecione Other Gateways.

    Para outros gateways, como NGINX Ingress, APISIX e gateways Java autogerenciados, implemente regras de encaminhamento canário diretamente neles.

    Lane group involves application

    Selecione todos os services envolvidos na sua aplicação de entrada ou gateway Ingress.

    Após criar o grupo de lanes, verifique se a aplicação de entrada e todas as aplicações envolvidas estão corretas. Visualize o grupo de lanes na seção Lane Groups and Involved Applications da página End-to-end Canary Release. Para modificar as informações do grupo de lanes, clique no ícone 编辑 à direita e atualize os dados.

Etapa 2: Criar uma lane

  1. No topo da página de lançamento canário de ponta a ponta, selecione a mesma região do seu grupo de lanes e clique em Create First Split Lane na parte inferior da página.

    Se já existir uma lane no namespace de microsserviço selecionado, clique em Create Lane.

    Importante

    Se o recurso de lançamento canário de ponta a ponta estiver habilitado para as aplicações, evite utilizar simultaneamente os recursos de lançamento canário e roteamento baseado em tags nessas aplicações.

  2. No painel Create Lane, defina os parâmetros da lane e clique em OK.

    Importante

    Se o seu gateway for do tipo Ingress, configure as regras de roteamento Ingress no console do ACK.

    Parâmetro

    Descrição

    Add Node Tag

    • Método de configuração: No console do ACK, adicione alicloud.service.tag: ${tag} a spec.template.metadata.labels no arquivo YAML da aplicação.

    • Adicionar uma tag: Adicione os seguintes pares chave-valor a spec.template.metadata.labels.

      • msePilotCreateAppName:${AppName}

      • alicloud.service.tag:{tag}

    Lane Name

    Insira um nome para a lane.

    Lane Tag

    Após executar Add Node Tag, uma lista das tags correspondentes aparece na lista suspensa. Ao selecionar uma tag, a aplicação correspondente é adicionada automaticamente.

    Após criar a lane, visualize ou configure suas informações na seção Traffic Distribution da página End-to-end Canary Release.

    • Clique no ícone 图标 para visualizar a porcentagem de tráfego da lane.

    • Clique no ícone Application Status icon na coluna Actions da lista de lanes para definir o status da aplicação na lane.

      • Habilitar lane: Clique em Enable. Essa ação ativa a lane e roteia o tráfego conforme a configuração definida. O tráfego correspondente é roteado preferencialmente para a versão da aplicação com a tag de lane adequada. Se não existir nenhuma versão com tag, o tráfego será roteado para a versão sem tag.

      • Desabilitar lane: Clique em Close. O tráfego desta aplicação será roteado para a versão sem tag.

      • Modificar lane: Clique em Edit para alterar a configuração da lane.

      • Excluir lane: Clique em Delete para remover a lane.

Etapa 3: Configurar regras de Ingress para versões base

Se o nome de domínio do service for example.com e você desejar rotear o tráfego apenas para versões base (versões online), utilize o seguinte YAML para configurar as regras de Ingress.

View YAML content

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-cloud-a
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              service:
                name: spring-cloud-a-base
                port:
                  number: 20001
            path: /
            pathType: Prefix

Execute o comando curl para acessar example.com e rotear o tráfego para as versões base.

curl -H "host: example.com" http://47.98.xxx.xx/a

Resultado de exemplo:

A[192.168.0.98][config=base] -> B[192.168.0.157] -> C[192.168.0.161]

Etapa 4: Configurar regras de roteamento de Ingress para as versões canário

Utilize uma regra de roteamento baseada em cabeçalho para distinguir o tráfego base do tráfego canário. Para rotear solicitações com o cabeçalho HTTP x-user-id: 100 para versões canário ao acessar example.com, configure a seguinte regra de roteamento Ingress. As solicitações são roteadas preferencialmente para a versão canário de cada aplicação. Se uma aplicação não tiver versão canário, as solicitações serão roteadas para sua versão base.

Show YAML code

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/canary: 'true'
    nginx.ingress.kubernetes.io/canary-by-header: x-user-id
    nginx.ingress.kubernetes.io/canary-by-header-value: '100'
    mse.ingress.kubernetes.io/request-header-control-update: x-mse-tag gray
  name: spring-cloud-a-gray
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              service:
                name: spring-cloud-a-gray
                port:
                  number: 20001
            path: /
            pathType: Prefix

O código anterior utiliza anotações para implementar o lançamento canário, a configuração de cabeçalho e o controle de cabeçalho. Para mais informações sobre essas anotações, consulte Container Service for Kubernetes:Advanced usage of MSE Ingress.

Execute o comando curl para acessar example.com e rotear solicitações com o cabeçalho HTTP x-user-id: 100 para as versões canário.

curl -H "host: example.com" -H "x-user-id: 100" http://47.98.xxx.xx/a

Resultado de exemplo: o tráfego canário é roteado para as versões canário das Aplicações A e C. A Aplicação B recebe tráfego em sua versão base porque nenhuma versão canário está disponível.

Agray[192.168.0.128][config=base] -> B[192.168.0.152] -> Cgray[192.168.0.151]

Visualizar os gráficos de monitoramento de tráfego das aplicações no console do MSE

  • Visualize o gráfico de monitoramento de uma única aplicação.

    1. Na página Full link grayscale, clique na aba do grupo de lanes cujas informações de monitoramento você deseja visualizar.

    2. Na seção Lane Groups and Involved Applications, clique no nome da aplicação cujas informações de monitoramento você deseja visualizar. Os dados de consultas por segundo (QPS) aparecem na seção QPS data à direita da página.

  • Visualize os gráficos de monitoramento de todas as aplicações no grupo de lanes.

    1. Na página Full link grayscale, clique na aba do grupo de lanes cujas informações de monitoramento você deseja visualizar.

    2. À direita da seção Application QPS Monitoring, clique em View Traffic Details para ver os gráficos de monitoramento de tráfego de todas as aplicações no grupo de lanes.