O ASM inclui um injetor de sidecar que adiciona automaticamente um proxy sidecar aos novos pods. Configure as políticas de injeção para controlar quais pods recebem um sidecar, otimizar o uso de recursos e simplificar o gerenciamento. Também é possível ajustar a configuração de recursos do injetor para adequá-lo ao tamanho e à carga do cluster.
Pré-requisitos
Configurar políticas de injeção automática
Use rótulos de namespace ou rótulos e anotações de pod para controlar quais pods recebem um sidecar.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Sidecar Proxy injection, na seção Injection strategy configuration management, configure a política de injeção automática.
Um sidecar é injetado automaticamente em um pod somente quando ele atende simultaneamente às condições definidas em The labels of the pod's namespace must meet the conditions. e em The pod's own labels/annotations must meet the conditions..
Condição de correspondência
Descrição
The labels of the pod's namespace must meet the conditions.
Define a condição baseada nos rótulos do namespace do pod.
-
Include istio-injection: enabled: O pod torna-se elegível para injeção automática quando seu namespace contém o rótulo istio-injection: enabled.
-
A injeção do sidecar ocorre se o namespace do pod não tiver o rótulo istio-injection: disabled.
The pod's own labels/annotations must meet the conditions.
Especifica a condição baseada nos rótulos ou anotações do próprio pod.
-
O sidecar é injetado caso o pod não tenha o rótulo ou anotação sidecar.istio.io/inject: "false".
-
Include sidecar.istio.io/inject: "true" or Selected by AlwaysInjectSelector: O pod atende aos critérios de injeção automática quando contém o rótulo ou anotação sidecar.istio.io/inject: "true".
Nota-
Para instâncias do ASM anteriores à v1.12, a injeção automática funciona apenas por correspondência de anotações de pod.
-
Nas versões v1.12 e posteriores, há suporte para injeção automática tanto por rótulos quanto por anotações de pod.
Os rótulos têm precedência sobre as anotações. Por exemplo, se um pod tiver simultaneamente o rótulo sidecar.istio.io/inject: "true" e a anotação sidecar.istio.io/inject: "false", o sistema considerará que ele possui o rótulo sidecar.istio.io/inject: "true".
-
NotaSe você configurar a política para injetar o sidecar exceto quando um namespace tiver o rótulo istio-injection: disabled ou um pod tiver o rótulo sidecar.istio.io/inject: false, o ASM adicionará automaticamente o rótulo istio-injection: disabled ao namespace kube-system para proteger os componentes do sistema.
-
-
(Opcional) Abaixo da seção Injection strategy configuration management, clique em Show Advanced Settings para definir opções avançadas.
Parâmetro
Descrição
The label selector which selector pods to be injected istio-proxy (AlwaysInjectSelector)
Seletor de rótulos de pod configurável. Os pods correspondentes a este seletor sempre recebem a injeção, comportando-se como se tivessem o rótulo ou anotação sidecar.istio.io/inject:"true".
The label selector which selector pods which will never be injected (NeverInjectSelector)
Seletor de rótulos de pod configurável. Os pods correspondentes nunca recebem a injeção, agindo como se tivessem o rótulo ou anotação sidecar.istio.io/inject:"false".
NotaTanto o AlwaysInjectSelector quanto o NeverInjectSelector são seletores de rótulos de pod e seguem a mesma lógica de configuração. Cada seletor pode conter múltiplas expressões de seleção de rótulos, uma por linha. Um pod será selecionado se seus rótulos corresponderem a qualquer uma das expressões listadas.
Cada expressão de seleção de rótulos compõe-se de três partes:
Chave: A chave do rótulo do pod a ser correspondida.
-
Operador: Define a lógica de correspondência. Estão disponíveis quatro operadores:
In: Corresponde se o valor do rótulo do pod estiver dentro do conjunto de valores especificado.
NotIn: Corresponde se o valor do rótulo do pod não estiver no conjunto de valores especificado.
Exists: Corresponde se o pod tiver um rótulo com a chave especificada.
DoesNotExist: Corresponde se o pod não tiver um rótulo com a chave especificada.
Valor: O conjunto de valores usado para comparação ao utilizar os operadores In ou NotIn.
Na parte inferior da página, clique em Update Settings.
Configurar o injetor de sidecar
O injetor de sidecar é um serviço de admission webhook implantado no cluster Kubernetes do plano de dados. Ele injeta automaticamente os proxies sidecar, mas não atua como um proxy sidecar. Os serviços e workloads desse componente residem no namespace istio-system do cluster Kubernetes e seus nomes começam com istio-sidecar-injector. Ajuste as configurações de recursos e o número de réplicas do injetor para garantir disponibilidade durante a injeção simultânea de muitos pods. Para configurar monitoramento de métricas e regras de alerta para o serviço de admission webhook do injetor, consulte Gerenciamento de alertas do Container Service e Métricas de monitoramento do componente kube-apiserver.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Sidecar Proxy injection, na seção Injection service, ajuste as configurações do injetor de sidecar e clique em Update Settings na parte inferior da página.
Parâmetro
Descrição
Resource Settings for Sidecar Injection
Defina os Limits on Resources e os Required Resources para o contêiner do injetor de sidecar.
-
Limits on Resources: Estabelece os limites de CPU e memória para o contêiner do injetor. A unidade para limites de CPU é núcleos (cores) e para memória é MiB.
-
Required Resources: Especifica as solicitações de recursos de CPU e memória para o contêiner do injetor. As unidades seguem o padrão de núcleos para CPU e MiB para memória.
pod replicas
Quantidade de réplicas para o injetor de sidecar.
NotaAumentar o número de réplicas melhora a disponibilidade do serviço de injeção durante a criação simultânea de diversos pods. Para garantir alta disponibilidade, defina pelo menos 2 réplicas.
Rewrite App Probe
Determina se as verificações de integridade do pod devem ser reescritas durante a injeção. Para saber se é necessário ativar essa reescrita, consulte Ativar redirecionamento de verificação de integridade para aplicações em uma malha de serviços.
Sidecar-injector NodeSelector
Permite especificar rótulos de nó para controlar onde os pods do injetor de sidecar serão implantados.
Clique em Add Match Label e insira o Name e o Value de um rótulo de nó existente no cluster do plano de dados para definir os nós de implantação.
-
Exemplo 1: Desativar injeção para pods específicos
-
Configure a política de injeção automática.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Sidecar Proxy injection, ajuste as configurações na seção Injection strategy configuration management.
A configuração abaixo injeta automaticamente um sidecar em todos os pods de um namespace rotulado com istio-injection: enabled, exceto se o pod tiver o rótulo ou anotação sidecar.istio.io/inject: "false".
Parâmetro
Descrição
The labels of the pod's namespace must meet the conditions.
Selecione Include istio-injection: enabled.
The pod's own labels/annotations must meet the conditions.
Escolha Not Include sidecar.istio.io/inject: "false" or Selected by NeverInjectSelector.
-
Crie um namespace global e ative a injeção automática para ele.
Na página de detalhes da instância do ASM, navegue até no painel de navegação à esquerda. Na página exibida, clique em Create.
No painel Create Namespace, insira um Name para o namespace (por exemplo, test1). Clique em Add ao lado de Tag, defina o Name como istio-injection e o Value como enabled, e clique em OK.
No topo da página, clique em Sync Automatic Sidecar Injection to Kubernetes Cluster para sincronizar o namespace global com o cluster Kubernetes do plano de dados.
-
Implante uma aplicação.
Implante a aplicação
detailsno namespacetest1do cluster ACK no plano de dados. Para mais informações, consulte Implantar uma aplicação em um cluster associado a uma instância do ASM.-
Verifique se o proxy sidecar foi injetado no pod da aplicação.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
No topo da página Deployments, defina o Namespace como test1 e clique no nome da aplicação details.
Na aba Pods, observe que o pod
details-v1contém duas imagens: a imagem do proxy sidecar do Istio (proxyv2) e a imagem da aplicação (examples-bookinfo-details-v1). O status Running indica que a injeção do sidecar ocorreu com sucesso.
-
Adicione um rótulo ao pod para desativar a injeção automática.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Deployments, localize a aplicação
detailsno namespace test1 e clique em More > View YAML na coluna Actions.-
Na caixa de diálogo Edit, modifique a configuração YAML e clique em Update.
-
Para versões do ASM 1.12.4 e posteriores: no parâmetro labels, adicione um rótulo com a Chave
sidecar.istio.io/injecte o Valor"false", definido comosidecar.istio.io/inject: 'false'.spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: details version: v1 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: sidecar.istio.io/inject: "false" app: details version: v1 Para versões do ASM anteriores à 1.12.4: No parâmetro annotations, adicione uma anotação com a Chave
sidecar.istio.io/injecte o Valor"false", resultando emsidecar.istio.io/inject: "false".
-
-
Confirme que a injeção automática está desativada para o pod do serviço
details, permanecendo ativa para o namespacetest1.Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
No topo da página Deployments, defina o Namespace como test1 e clique no nome da aplicação
details.Na aba Pods, verifique se o pod
details-v1apresenta o status Running e contém apenas a imagemdocker.io/istio/examples-bookinfo-details-v1:1.16.2. Isso confirma que o sidecar do Istio não foi injetado neste pod.
-
Configure a política de injeção automática.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Injection strategy configuration management, ajuste as opções na seção Injection strategy configuration management e clique em Update Settings na parte inferior da página.
Esta configuração injeta automaticamente um sidecar em pods que possuem o rótulo sidecar.istio.io/inject: "true" em qualquer namespace, excluindo pods situados em namespaces com o rótulo istio-injection: disabled.
Parâmetro
Descrição
The labels of the pod's namespace must meet the conditions.
Selecione Not include istio-injection: disabled.
The pod's own labels/annotations must meet the conditions.
Escolha Include sidecar.istio.io/inject: "true" or Selected by AlwaysInjectSelector.
No cluster ACK, crie um namespace chamado test2 sem nenhum rótulo. Para mais detalhes, consulte Gerenciar namespaces e cotas.
No namespace
test2do cluster ACK, implante a aplicaçãoreviews. Consulte Implantar uma aplicação em um cluster associado a uma instância do ASM para obter instruções.-
Adicione um rótulo ao pod para ativar a injeção automática.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
No topo da página Deployments, defina o Namespace como test2. Na linha referente ao serviço
reviews, clique em More > View YAML na coluna Actions.-
Na caixa de diálogo Edit YAML, sob o parâmetro labels, adicione o rótulo
sidecar.istio.io/inject: "true"e clique em Update.NotaPara configurar a injeção automática de Pod via rótulos, a versão do Service Mesh ASM deve ser 1.12.4 ou superior. Para saber como atualizar sua instância, veja Atualizar uma instância do ASM.
spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: reviews version: v1 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: reviews sidecar.istio.io/inject: 'true' version: v1
-
Valide se a política de injeção automática para o pod foi configurada corretamente.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
No topo da página Deployments, defina o Namespace como test2 e clique no nome da aplicação
reviews.Na aba Pods, a lista de imagens do pod
reviews-v1exibe tanto a imagem do proxy sidecar do Istio (proxyv2) quanto a imagem do contêiner da aplicação (examples-bookinfo-reviews-v1). O status Running confirma que o sidecar foi injetado com êxito.
As políticas de injeção aplicam-se apenas a pods recém-criados. Reinicie os pods em execução para que a nova política tenha efeito. Consulte Reiniciar um pod para mais informações.
Caso suas aplicações habilitadas para Istio ainda utilizem uma versão antiga do proxy sidecar após uma atualização do plano de controle, siga as instruções em Atualizar proxies sidecar para atualizá-los.
É possível configurar consumo de recursos, política de interceptação de tráfego, proxy DNS e ciclo de vida de um proxy sidecar em diferentes níveis, como global, namespace, workload e pod. Veja Configurar um proxy sidecar para detalhes.
Exemplo 2: Configurar injeção por pod individual
É possível definir uma política de injeção para um pod específico em vez de aplicá-la a todo um namespace.