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
- Acesse o aplicativo de contêiner no portal do Azure.
- Selecione Gerenciamento de revisões no menu do lado esquerdo.
- Se o modo de revisão for Único, defina o modo como múltiplo.
- Selecione Escolher modo de revisão.
- Selecione Múltiplo: Várias revisões ativas simultaneamente.
- Escolha Aplicar.
- Aguarde até que o Modo de Revisão atualize para Múltiplo.
- Selecione Mostrar revisões inativas.
- Se você não tiver várias revisões, poderá criar uma nova revisão.
- Selecione Criar nova revisão.
- Você pode usar as configurações padrão ou personalizar a revisão.
- Insira um Nome/Sufixo para a revisão.
- Selecione Criar.
- Aguarde a implantação da revisão.
- Selecione Ativo para as revisões para as quais você deseja rotear o tráfego.
- 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%.
- Selecione Salvar.
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"
}
]
}