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 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 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 seja atualizado para Múltiplo. 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 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. Screenshot of traffic splitting in Revision management.

Habilite a ingress 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 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