Compartilhar 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 no 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 introduzir gradualmente uma nova revisão em implantações azul-verde ou em testes A/B.

A divisão do tráfego é baseada no peso (porcentagem) do tráfego que é roteado 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 pelo nome da revisão ou rótulo da revisão.

Esse 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 divisão de tráfego

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

O comando a seguir define o peso do tráfego para cada revisão em 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 entre <> pelos seus próprios valores.

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

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

  1. Acesse o 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últiplo: Várias revisões ativas simultaneamente.
    3. Escolha Aplicar.
    4. Aguarde até que o Modo de Revisão atualize para Múltiplo. Captura de tela da configuração do modo de revisão do gerenciamento de revisão.
  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 você deseja rotear o tráfego.
  7. Insira a porcentagem de tráfego que você deseja rotear para cada revisão na coluna Tráfego. A porcentagem combinada de todo o tráfego deve ser igual a 100%.
  8. Selecione Salvar. Captura de tela da divisão de tráfego no gerenciamento de revisão.

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

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 a divisão de tráfego 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 de 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 uso

Os cenários a seguir descrevem as 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 com iterações frequentes no desenvolvimento do aplicativo de contêiner, você pode definir regras de tráfego para deslocar sempre 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 revisão mais recente, você poderá bloquear o tráfego para essa revisão atualizando as configurações ingress para:

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

Atualizar a revisão existente

Considere uma situação em que você sabe que uma revisão é boa e atende a 100% do tráfego, mas quer emitir uma atualização do aplicativo. Você pode implantar e testar novas revisões pontos de extremidade diretos sem afetar a revisão principal que atende ao aplicativo.

Quando estiver satisfeito com a revisão atualizada, você poderá transferir uma parte do tráfego à 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
    }
  ]
}

Processo de preparo de microsserviços

Ao criar microsserviços, talvez você queira manter pontos de extremidade de produção e preparação 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óximas etapas