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 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 em 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 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 parâmetro ou por rótulo de revisão com o --revision-weight --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 LABEL_1 de> revisão como 80% e LABEL_2> de revisão <<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ão no menu lateral 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. Escolha Aplicar.
    4. Aguarde até que o Modo de Revisão seja atualizado para Múltiplos. Screenshot of the revision management revision mode setting.
  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. Screenshot of Create and deploy new revision.
    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. Screenshot of traffic splitting in Revision management.

Habilite ingress a divisão de tráfego adicionando as configuration.ingress.traffic propriedades à seção do seu modelo de aplicativo de contêiner. Você pode especificar as revisões por nome com a propriedade ou por rótulo de revisão com a revisionName 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 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 revisão implantada mais recente:

"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, 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 revisões diferentes.

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

Próximas etapas