As faixas de tráfego em modo flexível funcionam em conjunto com recursos de roteamento personalizado, como serviços virtuais e regras de destino, para oferecer entrada de tráfego unificada de ponta a ponta, roteamento refinado e processamento de tráfego baseado em plugins.
Introdução à funcionalidade
As faixas de tráfego em modo flexível permitem isolar versões de aplicações. O sistema direciona o tráfego para diferentes faixas com base em cabeçalhos de requisição de passagem e de orientação de tráfego. Quando os serviços dentro de uma faixa se comunicam e o serviço de destino não existe na faixa atual, o sistema encaminha o tráfego para a faixa de linha de base. Isso garante a integridade do link e simplifica o gerenciamento de tráfego.
Antes de usar faixas de tráfego em modo flexível, compreenda os conceitos a seguir.
Métodos para passar o contexto da cadeia de chamadas
Passar o contexto da cadeia de chamadas é um pré-requisito para as faixas de tráfego em modo flexível. Em uma única cadeia de chamadas, todas as requisições devem compartilhar o mesmo cabeçalho.
As faixas de tráfego em modo flexível suportam métodos comuns para passar o contexto da cadeia de chamadas. Escolha o cenário correspondente à sua aplicação.
Cenário 1: Passar um trace ID
Um trace ID é um cabeçalho de requisição com as seguintes características:
O cabeçalho de requisição é transmitido por toda a cadeia de chamadas.
O cabeçalho de requisição é exclusivo para cada cadeia de chamadas.
Um trace ID identifica exclusivamente uma cadeia de chamadas completa. Seu valor geralmente é uma string aleatória. Se sua aplicação estiver integrada a um sistema de rastreamento, ela provavelmente transmite um trace ID. Padrões comuns de rastreamento usam cabeçalhos de requisição exclusivos para trace IDs, como x-b3-trace-id e x-datadog-trace-id.
Cenário 2: Passar um cabeçalho de requisição personalizado
O código da sua aplicação já pode transmitir cabeçalhos de requisição com significado de negócio, como version ou env. Esses cabeçalhos frequentemente identificam a versão e o ambiente da cadeia de chamadas. Neste cenário, use o cabeçalho de requisição personalizado transmitido como cabeçalho de orientação de tráfego.
Cenário 3: Passar um cabeçalho de requisição baggage
Baggage é um mecanismo padrão do OpenTelemetry que transmite informações de contexto entre processos em cadeias de chamadas distribuídas ao adicionar um campo Baggage ao cabeçalho HTTP. O valor do campo consiste em um conjunto de pares chave-valor que transportam dados de contexto, como IDs de locatário, trace IDs e credenciais de segurança. Isso permite rastreamento e correlação de logs sem alterações no código. Por exemplo:
baggage: userId=alice,serverNode=DF%2028,isProduction=false
Baggage é o método recomendado para configurar faixas de tráfego em modo flexível, pois é o mecanismo padrão do OpenTelemetry para passar o contexto da cadeia de chamadas.
Para os Cenários 1 e 3: Se sua aplicação não estiver integrada a um sistema de rastreamento ou não transmitir baggage no código, use a instrumentação automática. Utilize o OpenTelemetry Operator para injetar capacidades de instrumentação automática na aplicação. Isso permite a transmissão de cabeçalhos de requisição de trace ID sem alterar o código da aplicação. Para configurar a instrumentação automática, siga as etapas no documento da comunidade. Instale o OpenTelemetry Operator, configure a instrumentação automática e adicione anotações aos Pods da aplicação. A instrumentação automática do OpenTelemetry suporta muitos padrões comuns para transmitir contexto de cadeia de chamadas distribuídas, como W3C Baggage e B3. O documento da comunidade fornece exemplos para transmitir W3C TraceContext e W3C Baggage. Para mais informações, consulte Automatic Instrumentation.
Cabeçalho de requisição de orientação de tráfego
As faixas de tráfego em modo flexível usam um cabeçalho de requisição de orientação de tráfego para marcar a cadeia de requisições. Especifique qualquer cabeçalho de requisição que não entre em conflito com os cabeçalhos de negócios existentes na aplicação. Com base no método escolhido para passar o contexto da cadeia de chamadas, as faixas garantem a inclusão do cabeçalho de orientação de tráfego em cada etapa da cadeia. O valor do cabeçalho corresponde ao nome da faixa de tráfego. Por exemplo, se você definir x-asm-prefer-tag como cabeçalho de orientação de tráfego e enviar uma requisição para um serviço em uma faixa chamada s1, as requisições subsequentes na cadeia sempre carregarão o cabeçalho x-asm-prefer-tag: s1. As faixas de tráfego usam essa tag no cabeçalho para criar ambientes isolados para diferentes versões da aplicação.
Se optar por passar um cabeçalho de requisição personalizado, use esse mesmo cabeçalho como cabeçalho de orientação de tráfego.
Visão geral dos cenários
Os cenários a seguir demonstram como rotear tráfego para faixas usando três métodos diferentes de transmissão de cabeçalhos de requisição e como configurar serviços virtuais personalizados para orientar o tráfego para faixas em modo flexível.
Referências
As faixas de tráfego possuem dois modos: Strict e Loose. Para mais informações sobre os modos e suas diferenças, consulte Visão geral das faixas de tráfego.
Para usar o mesmo cabeçalho tanto para passagem quanto para orientação no gerenciamento de tráfego de ponta a ponta, consulte Cenário 2: Passar um cabeçalho de requisição personalizado na cadeia.
Implemente faixas de tráfego usando regras como VirtualService e DestinationRule. Também é possível configurar fallback de tráfego. Se uma aplicação com uma versão ou recurso específico estiver indisponível, o sistema enviará o tráfego para uma versão de fallback designada. Para mais informações, consulte Implementar faixas de tráfego e fallback de tráfego com base em regras de tráfego.
As regras de orientação de tráfego para faixas incluem correspondências com cabeçalhos de requisição e com a URI da requisição. Para implementar regras de correspondência mais complexas ou roteamento personalizado, utilize um serviço virtual personalizado. Para detalhes de configuração, consulte Orientar tráfego para faixas em modo flexível usando um serviço virtual personalizado.