O Service Mesh (ASM) oferece duas CustomResourceDefinitions (CRDs) para gerenciar faixas de tráfego: ASMSwimLaneGroup e ASMSwimLane. Juntas, elas permitem isolar versões específicas de serviços ou serviços com determinadas características em ambientes de execução independentes, chamados faixas de tráfego, e rotear as requisições correspondentes para essas versões.
Como essas CRDs funcionam em conjunto
Um ASMSwimLaneGroup define o que isolar: os serviços participantes das faixas de tráfego e o gateway de entrada responsável por rotear as requisições. Já um ASMSwimLane define como isolar: quais versões de pods pertencem a uma faixa e quais regras de roteamento se aplicam.
A relação entre eles é a seguinte:
Um único ASMSwimLaneGroup agrupa vários serviços e especifica um gateway de entrada compartilhado.
Vários recursos ASMSwimLane associam-se a esse grupo por meio do rótulo
swimlane-group: <group-name>. Cada faixa direciona o tráfego para uma versão específica dos serviços agrupados.
O ASM suporta dois modos de faixa:
Modo estrito (
isPermissive: falseou não definido) — Todas as faixas devem conter todos os serviços definidos no grupo.Modo permissivo (
isPermissive: true) — As faixas podem conter um subconjunto dos serviços do grupo. Requisições para serviços ausentes retornam à faixa de base.
Campos do ASMSwimLaneGroup
O ASMSwimLaneGroup define um grupo de faixas de tráfego, ou seja, a configuração compartilhada para serviços e roteamento de entrada em várias faixas.
ASMSwimLaneGroupSpec
A seção spec contém a configuração principal.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
Sim |
Serviços em um cluster Kubernetes participantes das faixas de tráfego. |
|
|
|
Sim |
Configuração do gateway de entrada para rotear requisições para diferentes versões de serviço. |
|
|
|
bool |
Não |
Modo do grupo de faixas. |
|
|
Não |
Configurações do modo permissivo. Obrigatório quando |
ClusterServiceRef
Referencia um serviço Kubernetes participante das faixas de tráfego.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome do serviço Kubernetes. |
|
|
string |
Sim |
Namespace do serviço Kubernetes. |
|
|
Não |
Referência ao cluster Kubernetes. Utilize este campo quando a instância do ASM gerenciar vários clusters. |
ClusterRef
Identifica um cluster Kubernetes adicionado à instância do ASM.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Não |
Nome de exibição do cluster Kubernetes. |
|
|
string |
Não |
ID do cluster Kubernetes. |
SwimLaneGroupIngressConfiguration
Configura o gateway de entrada que roteia requisições para os serviços no grupo de faixas.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
gateway | SwimLaneGatewayConfiguration | Sim | Gateway Istio associado ao gateway de entrada. |
ingressRouting | SwimLaneGroupIngressRouteConfiguration | Não | Estratégia de roteamento de requisições para o grupo de faixas. Nota Requer ASM v1.21.6.92 ou posterior. |
SwimLaneGatewayConfiguration
Especifique o gateway Istio associado ao gateway de entrada.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do gateway Istio. |
namespace | string | Sim | Namespace do gateway Istio. |
type | string | Sim | Tipo do gateway Istio. Defina como ASM, indicando um gateway Istio fornecido pelo ASM. |
SwimLaneGroupIngressRouteConfiguration
Defina a estratégia de roteamento de requisições para o grupo de faixas.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Não |
Estratégia de roteamento. Valores válidos: |
|
|
Não |
Regra unificada de correspondência de requisições para roteamento baseado em peso. Entra em vigor apenas quando |
WeightedSwimLaneIngressConfiguration
Defina a regra unificada de correspondência de requisições usada no roteamento baseado em peso.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
[]string |
Sim |
Hosts para correspondência. Devem ser declarados no gateway Istio associado ao grupo de faixas. |
|
|
Não |
Condições de correspondência de URI e cabeçalho. |
PermissiveSwimLaneGroupConfiguration
Configure o modo permissivo para um grupo de faixas de tráfego. Obrigatório quando isPermissive for true.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Cabeçalho de requisição que determina a qual faixa uma requisição pertence ao percorrer a cadeia de chamadas. Requisições que entram pelo gateway de entrada devem incluir este cabeçalho. |
|
|
string |
Sim |
Cabeçalho de passagem ponta a ponta (E2E) propagado pela cadeia de chamadas. Deve ser único por requisição quando diferente de |
|
|
string |
Não |
Nome da faixa de base. Quando uma requisição não consegue alcançar a versão do serviço de destino em sua faixa designada, ela retorna ao mesmo serviço nesta faixa de base. |
Campos do ASMSwimLane
O ASMSwimLane define uma única faixa de tráfego, ou seja, um conjunto de versões de serviço isoladas em conjunto. Associe uma faixa a um grupo de faixas adicionando o rótulo swimlane-group: <group-name> ao recurso ASMSwimLane.
ASMSwimLaneSpec
A seção spec contém a configuração principal.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
map |
Sim |
Rótulos usados para corresponder a pods dos serviços nesta faixa. Geralmente utiliza rótulos de versão, como |
|
|
Não |
Serviços implantados nesta faixa. No modo estrito, omita este campo — todas as faixas devem incluir todos os serviços do grupo. No modo permissivo, especifique os serviços desta faixa. A lista deve ser um subconjunto do campo |
|
|
|
Não |
Regras de roteamento convertidas automaticamente pelo ASM em um serviço virtual para o gateway de entrada. Se omitido, crie um serviço virtual manualmente. |
|
|
|
Não |
Peso de roteamento para esta faixa quando o grupo usa roteamento baseado em peso ( |
SwimLaneIngressRule
Defina uma regra de roteamento para o gateway de entrada. O ASM converte cada regra em parte de um serviço virtual.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
bool |
Sim |
Indica se esta regra está ativa. O serviço virtual é gerado apenas quando este valor for |
|
|
string[] |
Sim |
Hosts para correspondência. Mapeia para o campo |
|
|
string |
Não |
Nome desta regra de roteamento. Mapeia para o campo |
|
|
Não |
Condições de correspondência de requisição. Mapeia para o campo |
|
|
|
Sim |
Serviço de destino para requisições correspondidas. Mapeia para o campo |
SwimLaneIngressWeight
Especifique o peso de roteamento para uma faixa quando se utiliza roteamento baseado em peso.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
int |
Não |
Peso de roteamento para esta faixa. O padrão é |
|
|
Sim |
Serviço de destino para roteamento baseado em peso. |
SwimLaneIngressRequestMatch
Defina condições para corresponder requisições por URI ou cabeçalhos.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
Não |
Condição de correspondência de URI. Suporta |
|
|
|
map |
Não |
Condições de correspondência de cabeçalho. As chaves são nomes de cabeçalho em minúsculas com hífens (por exemplo, |
StringMatch
Defina como corresponder a um valor de string. Especifique exatamente um campo.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Não |
Correspondência exata de string. |
|
|
string |
Não |
Correspondência por prefixo. |
|
|
string |
Não |
Correspondência por expressão regular RE2. Consulte Sintaxe RE2. |
SwimLaneIngressRoute
Especifique o serviço de destino para requisições correspondidas.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
Sim |
Serviço de destino. |
RouteDestination
Identifica o serviço Kubernetes de destino.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
host | string | Sim | Nome de domínio totalmente qualificado do serviço Kubernetes. Exemplo: mocka.default.svc.cluster.local. |
portNum | int | Não | Número da porta do serviço. Exemplo: 8000. Nota Requer ASM v1.21.4.104 ou posterior. |
Tópicos relacionados
Visão geral das faixas de tráfego: Conceitos, casos de uso e comparação entre os modos estrito e permissivo.
Usar faixas de tráfego no modo estrito para gerenciar tráfego ponta a ponta
Usar faixas de tráfego no modo permissivo para gerenciar tráfego ponta a ponta