Partilhar via


Divisão de tráfego em Aplicativos de Contêiner do Azure

Por padrão, quando a entrada está habilitada, todo o tráfego é roteado para a última revisão implantada. Ao habilitar o modo de revisão múltipla em seu aplicativo de contêiner, você pode dividir o tráfego de entrada entre as revisões ativas.

A divisão de tráfego é útil para testar atualizações para seu aplicativo de contêiner. Você pode usar a divisão de tráfego para fasear gradualmente uma nova revisão em implantações azul-verde ou em testes A/B.

A divisão do tráfego baseia-se no peso (percentagem) do tráfego que é encaminhado para cada revisão. O peso combinado de todas as regras de divisão de tráfego deve ser igual a 100%. Você pode especificar a revisão por nome de revisão ou rótulo de revisão.

Este artigo mostra como configurar regras de divisão de tráfego para seu aplicativo de contêiner. Para executar os exemplos a seguir, você precisa de um aplicativo de contêiner com várias revisões.

Configurar a divisão de tráfego

Configure a divisão de tráfego entre revisões usando o az containerapp ingress traffic set comando. Você pode especificar as revisões por nome com o --revision-weight parâmetro ou por rótulo de revisão com o --label-weight parâmetro.

O comando a seguir define o peso do tráfego para cada revisão como 50%:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --revision-weight <REVISION_1>=50 <REVISION_2>=50

Certifique-se de substituir os valores de espaço reservado cercados por <> seus próprios valores.

Este comando define o peso do tráfego para <revisão LABEL_1> para 80% e <revisão LABEL_2> para 20%:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --label-weight <LABEL_1>=80 <LABEL_2>=20

  1. Vá para seu aplicativo de contêiner no portal do Azure.
  2. Selecione Gerenciamento de revisões no menu do lado esquerdo.
  3. Se o modo de revisão for Único, defina o modo como múltiplo.
    1. Selecione Escolher modo de revisão.
    2. Selecione Múltiplas: várias revisões ativas simultaneamente.
    3. Selecione Aplicar.
    4. Aguarde até que o Modo de Revisão atualize para Múltiplo. Captura de ecrã da definição do modo de revisão de gestão de revisões.
  4. Selecione Mostrar revisões inativas.
  5. Se você não tiver várias revisões, poderá criar uma nova revisão.
    1. Selecione Criar nova revisão.
    2. Você pode usar as configurações padrão ou personalizar a revisão.
    3. Insira um Nome/Sufixo para a revisão.
    4. Selecione Criar. Captura de tela de Criar e implantar nova revisão.
    5. Aguarde a implantação da revisão.
  6. Selecione Ativo para as revisões para as quais deseja rotear o tráfego.
  7. Introduza a percentagem de tráfego que pretende encaminhar para cada revisão na coluna Tráfego . A percentagem combinada de todo o tráfego deve ser igual a 100%.
  8. Selecione Guardar. Captura de ecrã da divisão de tráfego na Gestão de revisões.

Habilite a divisão de tráfego adicionando as configuration.ingress.traffic propriedades à ingress seção do seu modelo de aplicativo de contêiner. Você pode especificar as revisões por nome com a revisionName propriedade ou por rótulo de revisão com a label propriedade.

O exemplo a seguir define 100% do tráfego para a última revisão implantada:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
        {
          "latestRevision": true,
          "weight": 100
        }
      ]
    },
  },

O exemplo a seguir mostra o tráfego dividindo entre duas revisões por nome:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "revisionName": "my-example-app--5g3ty20",
              "weight": 50
          },
          {
              "revisionName": "my-example-app--qcfkbsv",
              "weight": 50
            }
        ],
    },
  },

O exemplo a seguir mostra a divisão do tráfego entre duas revisões por rótulo:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "weight": 50,
              "label": "v-2"
          },
          {
              "weight": 50,
              "label": "v-1"
          }
        ],
    },
  },

Casos de utilização

Os cenários a seguir descrevem definições de configuração para casos de uso comuns. Os exemplos são mostrados no formato JSON, mas você também pode usar o portal do Azure ou a CLI do Azure para configurar a divisão de tráfego.

Iteração rápida

Em situações em que você está frequentemente iterando o desenvolvimento de seu aplicativo de contêiner, você pode definir regras de tráfego para sempre deslocar todo o tráfego para a revisão implantada mais recente.

O modelo de exemplo a seguir roteia todo o tráfego para a última revisão implantada:

"ingress": { 
  "traffic": [
    {
      "latestRevision": true,
      "weight": 100
    }
  ]
}

Quando estiver satisfeito com a última revisão, você pode bloquear o tráfego para essa revisão atualizando as ingress configurações para:

"ingress": { 
  "traffic": [
    {
      "latestRevision": false, // optional
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    }
  ]
}

Atualizar a revisão existente

Considere uma situação em que você tenha uma revisão em boas condições que atenda 100% do seu tráfego, mas queira emitir uma atualização para seu aplicativo. Você pode implantar e testar novas revisões usando seus pontos de extremidade diretos sem afetar a revisão principal que serve o aplicativo.

Quando estiver satisfeito com a revisão atualizada, você poderá transferir uma parte do tráfego para a nova revisão para teste e verificação.

O modelo a seguir move 20% do tráfego para a revisão atualizada:

"ingress": {
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 80
    },
    {
      "revisionName": "myapp--newerrevision",
      "weight": 20
    }
  ]
}

Microsserviços de preparo

Ao criar microsserviços, convém manter os pontos de extremidade de produção e preparo para o mesmo aplicativo. Use rótulos para garantir que o tráfego não alterne entre revisões diferentes.

O modelo de exemplo a seguir aplica rótulos a diferentes revisões.

"ingress": { 
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    },
    {
      "revisionName": "myapp--98fdgt",
      "weight": 0,
      "label": "staging"
    }
  ]
}

Próximos passos