Os proxies sidecar interceptam o tráfego entre serviços para adicionar TLS mútuo, balanceamento de carga, novas tentativas e observabilidade, sem exigir alterações no código da aplicação. Este tópico descreve como definir as configurações de proxy sidecar nos níveis global, de namespace e de carga de trabalho por meio do console do ASM.
Pré-requisitos
Como funcionam os níveis de configuração
O ASM aplica as definições de proxy sidecar em quatro níveis de escopo. Um nível com prioridade maior substitui as configurações conflitantes dos níveis de menor prioridade.
|
Prioridade |
Nível |
Escopo |
Como configurar |
|
4 (mais alta) |
Pod |
Pods individuais |
Adicione anotações à especificação do Pod. Consulte Configurar um proxy sidecar adicionando anotações de recurso. |
|
3 |
Carga de trabalho |
Pods correspondentes a um seletor de rótulos dentro de um namespace |
Console do ASM > Sidecar Proxy Setting > aba workload |
|
2 |
Namespace |
Todos os Pods em um namespace |
Console do ASM > Sidecar Proxy Setting > aba Namespace |
|
1 (mais baixa) |
Global |
Todos os Pods em todos os namespaces |
Console do ASM > Sidecar Proxy Setting > aba global |
Por exemplo, se existirem tanto uma configuração global quanto uma no nível de namespace para o namespace default, a definição no nível de namespace terá precedência para as cargas de trabalho implantadas em default.
Nos níveis de namespace e de carga de trabalho, os itens não configurados herdam o valor do nível global. Esses níveis não possuem padrões independentes.
Quando usar cada nível:
|
Nível |
Use quando |
|
Global |
Você desejar uma configuração base para todas as cargas de trabalho na malha |
|
Namespace |
Um namespace específico exigir limites de recursos, regras de tráfego ou definições de ciclo de vida diferentes |
|
Carga de trabalho |
Cargas de trabalho individuais tiverem requisitos exclusivos (por exemplo, maior concorrência ou duração personalizada de drenagem) |
|
Pod |
For necessário aplicar substituições pontuais sem criar uma configuração no nível de carga de trabalho |
Visão geral dos itens de configuração
Utilize esta tabela para localizar a definição desejada e verificar se sua instância do ASM atende ao requisito de versão.
|
Categoria |
Item de configuração |
Global |
Namespace |
Carga de trabalho |
|
Definições de recursos |
Configurar recursos para o proxy Istio injetado |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
Configurar recursos do Sidecar proporcionalmente |
1.24.6.83 |
1.24.6.83 |
1.24.6.83 |
|
|
Configurar recursos para o contêiner istio-init |
1.9.7.93 |
1.10.5.34 |
1.13.4.20 |
|
|
Definir recursos do ACK que podem ser sobrealocados dinamicamente para o proxy Sidecar |
1.16.3.47 |
1.16.3.47 |
1.16.3.47 |
|
|
Número de threads do proxy Sidecar |
1.15.3.104 |
1.12.4.19 |
1.13.4.20 |
|
|
Ativar/desativar proxy Sidecar por portas ou endereços IP |
Configurar endereços para os quais o acesso externo é redirecionado ao proxy Sidecar |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
Configurar endereços para os quais o acesso externo não é redirecionado ao proxy Sidecar |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
|
Configurar portas nas quais o tráfego de entrada é redirecionado ao proxy Sidecar |
1.15.3.104 |
1.10.5.34 |
1.13.4.20 |
|
|
Configurar portas nas quais o tráfego de saída é redirecionado ao proxy Sidecar |
1.15.3.104 |
1.10.5.34 |
1.13.4.20 |
|
|
Configurar portas nas quais o tráfego de entrada não é redirecionado ao proxy Sidecar |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
|
Configurar portas nas quais o tráfego de saída não é redirecionado ao proxy Sidecar |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
|
Proxy DNS |
Ativar proxy DNS |
1.8.3.17 |
1.10.5.34 |
1.13.4.20 |
|
Gerenciar variáveis de ambiente para o proxy Sidecar |
Desligamento gracioso do Sidecar (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) |
1.15.3.104 |
1.15.3.104 |
1.15.3.104 |
|
Gerenciamento de ciclo de vida |
Inicialização graciosa do Sidecar |
1.15.3.104 |
1.12.4.58 |
1.13.4.20 |
|
Configurar duração de drenagem do proxy Sidecar na terminação do Pod |
1.9.7.93 |
1.10.5.34 |
1.13.4.20 |
|
|
Configurar ciclo de vida do proxy Sidecar |
1.9.7.93 |
1.10.5.34 |
1.13.4.20 |
|
|
Política de tráfego de saída |
Política de tráfego de saída |
Todas as versões |
1.10.5.34 |
1.13.4.20 |
|
Política de interceptação de tráfego do Sidecar |
Política de interceptação de tráfego do Sidecar |
1.15.3.25 |
1.15.3.25 |
1.15.3.25 |
|
Monitoramento |
Nível de log |
1.15.3.104 |
1.12.4.58 |
1.13.4.20 |
|
Configurar proxyStatsMatcher |
1.15.3.104 |
1.12.4.58 |
1.13.4.20 |
|
|
Parâmetros de runtime do Envoy |
Limites de conexões downstream |
1.21.6.95 |
1.21.6.95 |
1.21.6.95 |
Caso algum item de configuração não esteja disponível no seu console do ASM, atualize sua instância do ASM para a versão necessária.
Se a versão do seu ASM for V1.22 ou posterior e a versão do seu cluster Kubernetes for V1.30 ou posterior, os proxies sidecar serão implantados como contêineres sidecar nativos. O Kubernetes gerencia o ciclo de vida desses contêineres, substituindo todas as configurações de gerenciamento de ciclo de vida.
Definir configurações de proxy sidecar
Todos os itens de configuração são gerenciados na mesma página do console. O fluxo geral se aplica aos níveis global, de namespace e de carga de trabalho:
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em no nome da instância do ASM desejada. No painel de navegação à esquerda, escolha Data Plane Component Management > Sidecar Proxy Setting.
Selecione a aba de escopo (global, Namespace ou workload).
Expanda a seção de configuração relevante, defina os valores e clique em Update Settings.
Se a alteração exigir a reinicialização do Pod, reimplante as cargas de trabalho afetadas.
As seções a seguir detalham cada item de configuração.
Definições de recursos
Recursos do proxy sidecar (istio-proxy)
Defina as solicitações e os limites de recursos de CPU e memória para o contêiner istio-proxy.
|
Definição |
Descrição |
|
Resource Limits |
Máximo de CPU (núcleos) e memória (MiB) que o contêiner do proxy sidecar pode consumir. |
|
Required Resources |
Mínimo de CPU (núcleos) e memória (MiB) garantido ao contêiner do proxy sidecar durante a execução. |
Configurar no console
Na página Sidecar Proxy Setting, selecione a aba de escopo desejada e expanda Resource Settings.
No nível de namespace ou de carga de trabalho, selecione Configure Resources for istio-init Container caso também queira definir recursos para o contêiner de inicialização.
Em Resource Limits, defina CPU como
2núcleos e Memory como1025MiB. Em Required Resources, defina CPU como0.1núcleos e Memory como128MiB.Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Na saída, confirme se o campo resources do contêiner istio-proxy corresponde aos valores configurados:
spec:
containers:
- name: istio-proxy
resources:
limits:
cpu: '2'
memory: 1025Mi
requests:
cpu: 100m
memory: 128Mi
Alocação proporcional de recursos do sidecar
Em vez de definir valores fixos, aloque recursos do proxy sidecar como uma porcentagem dos recursos do contêiner da carga de trabalho. Isso substitui as definições padrão de recursos do proxy Istio.
Duas políticas de cálculo estão disponíveis:
Recursos máximos do contêiner: Usa o maior limite de CPU ou memória entre todos os contêineres no Pod como base.
Contêiner especificado: Usa um contêiner nomeado como base. Se o contêiner nomeado não existir, aplicam-se os recursos padrão do proxy Istio. A anotação do Pod
scaled-resource.inject.istio.alibabacloud.com/container-reftem prioridade sobre um nome de contêiner especificado manualmente.
Independentemente da política:
Se o contêiner base não tiver
limits, o proxy sidecar não terá limites configurados.Se o contêiner base não tiver
requests, o sistema aloca recursos mínimos: CPU100m, memória128Mi.Tanto
requestsquantolimitspara CPU devem ser de pelo menos100me, para memória, de pelo menos128Mi. Valores calculados abaixo desses limiares são automaticamente elevados ao mínimo.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.
Selecione Configure sidecar resources by ratio.
Defina a porcentagem de Proportion of Resources, opcionalmente selecione uma Computing Policy e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Exemplos de resultados com um contêiner de carga de trabalho configurado com requests: {cpu: 300m, memory: 512Mi} e limits: {cpu: 500m, memory: 1Gi}:
|
Proporção |
Requests do Sidecar |
Limits do Sidecar |
|
50% |
cpu: 150m, memory: 256Mi |
cpu: 250m, memory: 512Mi |
|
20% |
cpu: 100m, memory: 128Mi |
cpu: 100m, memory: 204Mi |
Quando o contêiner da carga de trabalho não tem requests configurado e a proporção é de 50%:
resources:
requests:
cpu: 100m # Minimum fallback
memory: 128Mi # Minimum fallback
limits:
cpu: 250m
memory: 512Mi
Quando o contêiner da carga de trabalho não tem limits configurado e a proporção é de 50%:
resources:
requests:
cpu: 150m
memory: 256Mi
# No limits set
Recursos do contêiner istio-init
Defina solicitações e limites de recursos para o contêiner istio-init — o contêiner de inicialização que configura as regras de interceptação de tráfego do iptables antes do início do proxy sidecar.
|
Definição |
Descrição |
|
Resource Limits |
Máximo de CPU (núcleos) e memória (MiB) para o contêiner istio-init. |
|
Required Resources |
Mínimo de CPU (núcleos) e memória (MiB) para o contêiner istio-init durante a execução. |
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.
No nível de namespace ou de carga de trabalho, selecione Configure Resources for istio-init Container.
Em Resource Limits, defina CPU como
1núcleo e Memory como512MiB. Em Required Resources, defina CPU como0.1núcleos e Memory como128MiB.Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme os recursos do contêiner istio-init:
spec:
initContainers:
- name: istio-init
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
Recursos sobrealocados dinamicamente do ACK
Aloque recursos sobrealocados dinamicamente para os contêineres do proxy sidecar e istio-init. Essa definição só entra em vigor quando o Pod possui o rótulo koordinator.sh/qosClass, indicando que a sobrealocação dinâmica de recursos do ACK está ativada.
As unidades de recurso para recursos sobrealocados dinamicamente usam kubernetes.io/batch-cpu (em milinúcleos) e kubernetes.io/batch-memory (em MiB).
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.
Selecione Set ACK Resources That Can Be Dynamically Overcommitted for Sidecar Proxy e configure o seguinte:
|
Componente |
Definição |
Valores de exemplo |
|
Proxy sidecar (istio-proxy) |
Resource Limits |
CPU: |
|
Required Resources |
CPU: |
|
|
Contêiner istio-init |
Resource Limits |
CPU: |
|
Required Resources |
CPU: |
Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme se ambos os contêineres usam tipos de recursos em lote:
spec:
containers:
- name: istio-proxy
resources:
limits:
kubernetes.io/batch-cpu: 2k
kubernetes.io/batch-memory: 2Gi
requests:
kubernetes.io/batch-cpu: '200'
kubernetes.io/batch-memory: 256Mi
initContainers:
- name: istio-init
resources:
limits:
kubernetes.io/batch-cpu: 1k
kubernetes.io/batch-memory: 1Gi
requests:
kubernetes.io/batch-cpu: '100'
kubernetes.io/batch-memory: 128Mi
Threads de trabalho do proxy sidecar
Defina o número de threads de trabalho do Envoy para o proxy sidecar. O valor deve ser um inteiro não negativo. Quando definido como 0, a contagem de threads é determinada automaticamente com base nos limites de recursos de CPU do proxy sidecar (ou nas solicitações de recursos, caso não haja limites definidos).
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.
No nível de namespace ou de carga de trabalho, defina Number of Sidecar Proxy Threads como
3.Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme o argumento --concurrency no contêiner istio-proxy:
spec:
containers:
- name: istio-proxy
args:
- proxy
- sidecar
- '--concurrency'
- '3'
Interceptação de tráfego por porta ou endereço IP
Controle qual tráfego o proxy sidecar intercepta especificando intervalos de endereços IP e números de porta. Essas definições são gerenciadas na seção Enable/Disable Sidecar Proxy by Ports or IP Addresses.
A tabela a seguir resume todas as definições de interceptação de tráfego e o parâmetro do istio-init que cada uma controla:
|
Definição |
Direção |
Efeito |
Parâmetro do istio-init |
|
Redirecionar endereços (incluir) |
Saída |
Intercepta o tráfego apenas para esses intervalos CIDR. Padrão: |
|
|
Ignorar endereços (excluir) |
Saída |
Pula a interceptação para esses intervalos CIDR. Tem precedência sobre a lista de inclusão. |
|
|
Redirecionar portas - entrada (incluir) |
Entrada |
Intercepta o tráfego de entrada apenas nestas portas. Padrão: |
|
|
Ignorar portas - entrada (excluir) |
Entrada |
Pula a interceptação para tráfego de entrada nestas portas. Efetivo apenas quando as portas de redirecionamento forem |
|
|
Redirecionar portas - saída (incluir) |
Saída |
Intercepta o tráfego de saída para estas portas de destino. |
|
|
Ignorar portas - saída (excluir) |
Saída |
Pula a interceptação para tráfego de saída para estas portas, independentemente de outras definições. |
|
Tráfego de saída: redirecionar endereços (lista de inclusão)
Especifique intervalos de endereços IP em notação CIDR, separados por vírgulas. O proxy sidecar intercepta o tráfego de saída apenas para destinos dentro desses intervalos. O valor padrão * intercepta todo o tráfego de saída.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Addresses to Which External Access Is Redirected to Sidecar Proxy.
Insira
192.168.0.0/16,10.1.0.0/24e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -i no contêiner istio-init reflete os intervalos CIDR configurados:
initContainers:
- name: istio-init
args:
- '-i'
- '192.168.0.0/16,10.1.0.0/24'
Tráfego de saída: ignorar endereços (lista de exclusão)
Especifique intervalos de endereços IP em notação CIDR, separados por vírgulas. O tráfego de saída para destinos dentro desses intervalos ignora o proxy sidecar.
Se um endereço IP aparecer tanto na lista de redirecionamento quanto na lista de exclusão, a lista de exclusão terá precedência — o proxy sidecar não interceptará o tráfego para esse endereço.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Addresses to Which External Access Is Not Redirected to Sidecar Proxy.
Insira
10.1.0.0/24e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -x no contêiner istio-init inclui o intervalo CIDR configurado juntamente com o CIDR padrão do host (192.168.0.1/32):
initContainers:
- name: istio-init
args:
- '-x'
- '192.168.0.1/32,10.1.0.0/24'
Tráfego de entrada: redirecionar portas (lista de inclusão)
Especifique números de porta separados por vírgulas. O proxy sidecar intercepta o tráfego de entrada apenas nessas portas. O valor padrão * intercepta todo o tráfego de entrada.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Ports on Which Inbound Traffic Redirected to Sidecar Proxy.
Insira
80,443e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -b no contêiner istio-init reflete as portas configuradas:
initContainers:
- name: istio-init
args:
- '-b'
- '80,443'
Tráfego de entrada: ignorar portas (lista de exclusão)
Especifique números de porta separados por vírgulas. O tráfego de entrada nessas portas ignora o proxy sidecar.
Essa definição só entra em vigor quando Ports on Which Inbound Traffic Redirected to Sidecar Proxy estiver definido com o valor padrão * (interceptar todo o tráfego de entrada).
Por padrão, o proxy sidecar já exclui suas próprias portas de aplicação: 15090, 15021, 15081, 9191 e 15020.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Ports on Which Inbound Traffic Not Redirected to Sidecar Proxy.
Insira
8000e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -d no contêiner istio-init inclui a porta 8000 juntamente com as portas excluídas por padrão:
initContainers:
- name: istio-init
args:
- '-d'
- '15090,15021,15081,9191,15020,8000'
Tráfego de saída: redirecionar portas (lista de inclusão)
Especifique números de porta separados por vírgulas. O proxy sidecar intercepta o tráfego de saída apenas para essas portas de destino.
Mesmo que uma porta esteja nesta lista, o proxy sidecar não interceptará uma solicitação se o endereço IP de destino estiver na lista de endereços ignorados ou se a porta de destino estiver na lista de portas de saída ignoradas.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Ports on Which Outbound Traffic Redirected to Sidecar Proxy.
Insira
80,443e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -q no contêiner istio-init reflete as portas configuradas:
initContainers:
- name: istio-init
args:
- '-q'
- '80,443'
Tráfego de saída: ignorar portas (lista de exclusão)
Especifique números de porta separados por vírgulas. O tráfego de saída para essas portas ignora o proxy sidecar, independentemente de qualquer definição de endereço de redirecionamento ou porta de redirecionamento.
Configurar no console
Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.
No nível de namespace ou de carga de trabalho, selecione Ports on Which Outbound Traffic Not Redirected to Sidecar Proxy.
Insira
8000e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
O parâmetro -o no contêiner istio-init reflete a porta configurada:
initContainers:
- name: istio-init
args:
- '-o'
- '8000'
Proxy DNS
Quando ativado, o proxy sidecar intercepta solicitações DNS da carga de trabalho e as resolve localmente usando seus mapeamentos de IP para domínio em cache. A maioria das consultas é resolvida sem contatar um servidor DNS remoto, o que melhora o desempenho e a disponibilidade do DNS. As consultas que o sidecar não consegue resolver são encaminhadas para o servidor DNS upstream.
Para mais informações, consulte Usar o recurso de proxy DNS em uma instância do ASM.
O proxy DNS não é suportado para proxies sidecar em clusters ACK Serverless ou Pods baseados em Elastic Container Instance (ECI) devido a restrições de permissão de rede.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda DNS Proxy.
No nível de namespace ou de carga de trabalho, selecione Enable DNS Proxy, ative a chave e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme se o contêiner istio-proxy tem ambas as variáveis de ambiente relacionadas a DNS definidas como true:
env:
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: 'true'
- name: ISTIO_META_DNS_CAPTURE
value: 'true'
Variáveis de ambiente
Adicione variáveis de ambiente personalizadas ao contêiner do proxy sidecar.
Desligamento gracioso (EXIT_ON_ZERO_ACTIVE_CONNECTIONS)
Quando ativado, o proxy sidecar executa as seguintes ações durante a terminação do Pod:
O processo
pilot-agentimpede o Envoy de aceitar novas conexões de entrada.Após uma espera de 5 segundos, o
pilot-agentverifica a contagem de conexões ativas do Envoy.Assim que as conexões ativas chegam a zero, o
pilot-agentencerra o processo do Envoy.
Isso reduz as solicitações perdidas durante a terminação e minimiza o tempo de desligamento.
Quando EXIT_ON_ZERO_ACTIVE_CONNECTIONS está definido como true, a definição Sidecar Proxy Drain Duration at Pod Termination não tem efeito.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Manage Environment Variables for Sidecar Proxy.
No nível de namespace ou de carga de trabalho, selecione Sidecar Graceful Shutdown.
Ative a chave e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme a variável de ambiente no contêiner istio-proxy:
env:
- name: EXIT_ON_ZERO_ACTIVE_CONNECTIONS
value: 'true'
Gerenciamento de ciclo de vida
Inicialização graciosa
Por padrão, o proxy sidecar inicia antes dos contêineres da aplicação em um Pod. Isso evita perda de tráfego que poderia ocorrer se o tráfego de entrada chegasse à aplicação antes que o proxy sidecar estivesse pronto.
Desative essa definição para iniciar o proxy sidecar e os contêineres da aplicação simultaneamente. Isso pode acelerar implantações em clusters com muitos Pods onde o servidor de API está sob carga intensa.
Configurar no console (exemplo: nível global)
Na página Sidecar Proxy Setting, selecione a aba global e expanda Lifecycle Management.
Desative a chave ao lado de Sidecar Graceful Startup e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Quando desativado, a variável de ambiente PROXY_CONFIG do contêiner istio-proxy contém "holdApplicationUntilProxyStarts":false, e nenhum campo de ciclo de vida padrão é declarado.
Duração de drenagem na terminação do Pod
Depois que um Pod começa a terminar, o proxy sidecar continua processando o tráfego de entrada existente por um período configurável antes de fechar as conexões. Esse período é a duração de drenagem. O padrão é 5s.
Se alguma API servida pela carga de trabalho levar mais tempo para responder do que a duração de drenagem, aumente este valor para evitar que solicitações em andamento sejam descartadas.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Lifecycle Management.
No nível de namespace ou de carga de trabalho, selecione Sidecar Proxy Drain Duration at Pod Termination.
Insira
10se clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme se o contêiner istio-proxy tem a duração de drenagem configurada:
env:
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: '10'
- name: PROXY_CONFIG
value: >-
{..."terminationDrainDuration":"10s"}
Hooks de ciclo de vida personalizados
Personalize os hooks de ciclo de vida do contêiner do Kubernetes para o contêiner do proxy sidecar fornecendo o campo lifecycle no formato JSON. Isso substitui a configuração padrão de ciclo de vida.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Lifecycle Management.
No nível de namespace ou de carga de trabalho, selecione Lifecycle of Sidecar Proxy.
Insira a configuração de ciclo de vida em JSON:
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"sleep 13"
]
}
}
}
Neste exemplo:
postStart: Aguarda opilot-agente o Envoy iniciarem completamente após a criação do contêiner.preStop: Aguarda 13 segundos antes de o contêiner ser parado, permitindo que as solicitações em andamento sejam concluídas.
Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme se o contêiner istio-proxy possui os hooks de ciclo de vida esperados:
lifecycle:
postStart:
exec:
command:
- pilot-agent
- wait
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 13
Política de tráfego de saída
Controle se o proxy sidecar permite que as cargas de trabalho acessem serviços fora do registro de serviços do ASM. Serviços externos são aqueles não registrados na malha — seja por meio da descoberta de serviços do Kubernetes ou por recursos ServiceEntry declarados manualmente.
|
Política |
Comportamento |
|
ALLOW_ANY (padrão) |
O proxy sidecar encaminha solicitações para serviços externos. |
|
REGISTRY_ONLY |
O proxy sidecar bloqueia conexões para serviços externos. Solicitações para serviços não registrados retornam HTTP 502. |
Esta é uma definição de nível global. Para configurar a política de tráfego de saída no nível de namespace ou de carga de trabalho, acesse Traffic Management Center > Sidecar Traffic Configuration no console do ASM.
Configurar no console
Na aba global da página Sidecar Proxy Setting, expanda Outbound Traffic Policy.
Selecione REGISTRY_ONLY e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
Implante uma carga de trabalho de teste com a injeção de sidecar ativada. O exemplo a seguir usa uma aplicação sleep mínima:
apiVersion: v1
kind: ServiceAccount
metadata:
name: sleep
---
apiVersion: v1
kind: Service
metadata:
name: sleep
labels:
app: sleep
service: sleep
spec:
ports:
- port: 80
name: http
selector:
app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleep
spec:
replicas: 1
selector:
matchLabels:
app: sleep
template:
metadata:
labels:
app: sleep
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: sleep
containers:
- name: sleep
image: curlimages/curl
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/sleep/tls
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sleep-secret
optional: true
kubectl apply -f sleep.yaml -n default
Em seguida, tente acessar um serviço externo a partir da carga de trabalho de teste:
kubectl exec -it <sleep-pod-name> -c sleep -- curl www.aliyun.com -v
Uma resposta 502 Bad Gateway confirma que o proxy sidecar está bloqueando o acesso ao serviço externo não registrado:
> GET / HTTP/1.1
> Host: www.aliyun.com
< HTTP/1.1 502 Bad Gateway
< server: envoy
Modo de interceptação de tráfego
Por padrão, o proxy sidecar usa o modo REDIRECT do iptables para interceptar o tráfego de entrada. Nesse modo, a aplicação vê o IP do proxy sidecar como o endereço de origem e não consegue identificar o IP original do cliente.
Mude para o modo TPROXY (proxy transparente) para preservar o IP de origem original do cliente. Consulte Preservar o endereço IP de origem de um cliente quando o cliente acessa serviços no ASM.
O modo TPROXY não suporta CentOS. Se seus Pods executam em nós CentOS, use o modo REDIRECT padrão.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Sidecar Traffic Interception Mode.
No nível de namespace ou de carga de trabalho, marque a caixa de seleção Sidecar Traffic Interception Mode.
Selecione TPROXY e clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme se tanto a variável de ambiente do istio-proxy quanto o argumento de inicialização do istio-init usam TPROXY:
# In istio-proxy container:
env:
- name: PROXY_CONFIG
value: >-
{..."interceptionMode":"TPROXY",...}
# In istio-init container:
initContainers:
- name: istio-init
args:
- '-m'
- TPROXY
Monitoramento
Nível de log
Defina o nível de log do proxy Envoy para o contêiner do proxy sidecar. O nível padrão é info.
Níveis disponíveis: debug, trace, info, warning, error, critical, off.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Monitoring Statistics.
No nível de namespace ou de carga de trabalho, selecione Log Level.
Selecione
errorna lista suspensa e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme o argumento --proxyLogLevel no contêiner istio-proxy:
containers:
- name: istio-proxy
args:
- '--proxyLogLevel=error'
Métricas personalizadas do Envoy (proxyStatsMatcher)
Por padrão, o proxy sidecar relata apenas um subconjunto de métricas do Envoy para minimizar a sobrecarga de desempenho. Use proxyStatsMatcher para coletar métricas adicionais correspondendo nomes de métricas com prefixos, sufixos ou expressões regulares.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Monitoring Statistics.
Selecione proxyStatsMatcher e Regular Expression Match.
Insira
.*outlier_detection.*para coletar métricas de disjuntor (circuit breaker).Clique em Update Settings.
Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme o proxyStatsMatcher na variável de ambiente PROXY_CONFIG:
env:
- name: PROXY_CONFIG
value: >-
{..."proxyStatsMatcher":{"inclusionRegexps":[".*outlier_detection.*"]},...}
Parâmetros de runtime do Envoy
Limites de conexões downstream
Por padrão, o proxy sidecar não limita conexões downstream, o que pode ser explorado em cenários de negação de serviço. Consulte ISTIO-SECURITY-2020-007 para detalhes.
Defina um número máximo de conexões downstream para proteger suas cargas de trabalho.
Configurar no console
Na página Sidecar Proxy Setting, selecione uma aba de escopo.
Na seção Envoy Runtime Parameters, insira
5000ao lado de Limits on Downstream Connections e clique em Update Settings.Reimplante as cargas de trabalho para aplicar a alteração.
Verificar
kubectl get pod -n <namespace> <pod-name> -o yaml
Confirme o campo runtimeValues na variável de ambiente PROXY_CONFIG:
env:
- name: PROXY_CONFIG
value: >-
{..."runtimeValues":{"overload.global_downstream_max_connections":"5000"},...}
Gerenciar configurações no nível de carga de trabalho
No nível de carga de trabalho, múltiplas configurações de proxy sidecar podem coexistir para diferentes cargas de trabalho dentro do mesmo namespace.
Criar uma configuração no nível de carga de trabalho
Na página Sidecar Proxy Setting, clique em na aba workload e depois clique em Create.
Defina os itens de configuração e clique em Create.
Atualizar uma configuração no nível de carga de trabalho
Na aba workload, localize a configuração desejada e clique em Update na coluna Actions.
Modifique as definições e clique em Update.
Excluir uma configuração no nível de carga de trabalho
Na aba workload, localize a configuração desejada e clique em Delete na coluna Actions.
Na caixa de diálogo de confirmação, clique em OK.
Reimplantar cargas de trabalho
A maioria das alterações nas configurações do proxy sidecar exige a reinicialização do Pod. Reimplante as cargas de trabalho afetadas para aplicar as novas definições.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Deployments.
Reimplante as cargas de trabalho usando um dos seguintes métodos:
|
Cenário |
Passos |
|
Carga de trabalho única |
Localize a carga de trabalho desejada e clique em More > Redeploy na coluna Actions. |
|
Múltiplas cargas de trabalho |
Selecione as cargas de trabalho desejadas e clique em Batch Redeploy na parte inferior da página. |
Verificar configurações globais
Após atualizar as configurações de proxy sidecar no nível global, verifique se a instância do ASM aplicou as alterações:
No painel de navegação à esquerda, escolha ASM Instance > Base Information.
Confirme se o Status é Running.