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
- Vá para seu 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últiplas: várias revisões ativas simultaneamente.
- Selecione 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 deseja rotear o tráfego.
- 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%.
- Selecione Guardar.
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"
}
]
}