Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configure Sidecar proxy

Última atualização: Jun 28, 2026

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.

Nota

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.

Importante

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:

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. 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.

  3. Selecione a aba de escopo (global, Namespace ou workload).

  4. Expanda a seção de configuração relevante, defina os valores e clique em Update Settings.

  5. 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

  1. Na página Sidecar Proxy Setting, selecione a aba de escopo desejada e expanda Resource Settings.

  2. 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.

  3. Em Resource Limits, defina CPU como 2 núcleos e Memory como 1025 MiB. Em Required Resources, defina CPU como 0.1 núcleos e Memory como 128 MiB.

  4. Clique em Update Settings.

  5. 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-ref tem prioridade sobre um nome de contêiner especificado manualmente.

Importante

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: CPU 100m, memória 128Mi.

  • Tanto requests quanto limits para CPU devem ser de pelo menos 100m e, para memória, de pelo menos 128Mi. Valores calculados abaixo desses limiares são automaticamente elevados ao mínimo.

Configurar no console

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.

  2. Selecione Configure sidecar resources by ratio.

  3. Defina a porcentagem de Proportion of Resources, opcionalmente selecione uma Computing Policy e clique em Update Settings.

  4. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.

  2. No nível de namespace ou de carga de trabalho, selecione Configure Resources for istio-init Container.

  3. Em Resource Limits, defina CPU como 1 núcleo e Memory como 512 MiB. Em Required Resources, defina CPU como 0.1 núcleos e Memory como 128 MiB.

  4. Clique em Update Settings.

  5. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.

  2. 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: 2000 milinúcleos, Memória: 2048 MiB

Required Resources

CPU: 200 milinúcleos, Memória: 256 MiB

Contêiner istio-init

Resource Limits

CPU: 1000 milinúcleos, Memória: 1024 MiB

Required Resources

CPU: 100 milinúcleos, Memória: 128 MiB

  1. Clique em Update Settings.

  2. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Resource Settings.

  2. No nível de namespace ou de carga de trabalho, defina Number of Sidecar Proxy Threads como 3.

  3. Clique em Update Settings.

  4. 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: * (todos).

-i

Ignorar endereços (excluir)

Saída

Pula a interceptação para esses intervalos CIDR. Tem precedência sobre a lista de inclusão.

-x

Redirecionar portas - entrada (incluir)

Entrada

Intercepta o tráfego de entrada apenas nestas portas. Padrão: * (todas).

-b

Ignorar portas - entrada (excluir)

Entrada

Pula a interceptação para tráfego de entrada nestas portas. Efetivo apenas quando as portas de redirecionamento forem *.

-d

Redirecionar portas - saída (incluir)

Saída

Intercepta o tráfego de saída para estas portas de destino.

-q

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.

-o

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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Addresses to Which External Access Is Redirected to Sidecar Proxy.

  3. Insira 192.168.0.0/16,10.1.0.0/24 e clique em Update Settings.

  4. 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.

Importante

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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Addresses to Which External Access Is Not Redirected to Sidecar Proxy.

  3. Insira 10.1.0.0/24 e clique em Update Settings.

  4. 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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Ports on Which Inbound Traffic Redirected to Sidecar Proxy.

  3. Insira 80,443 e clique em Update Settings.

  4. 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.

Importante

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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Ports on Which Inbound Traffic Not Redirected to Sidecar Proxy.

  3. Insira 8000 e clique em Update Settings.

  4. 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.

Importante

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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Ports on Which Outbound Traffic Redirected to Sidecar Proxy.

  3. Insira 80,443 e clique em Update Settings.

  4. 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

  1. Expanda Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  2. No nível de namespace ou de carga de trabalho, selecione Ports on Which Outbound Traffic Not Redirected to Sidecar Proxy.

  3. Insira 8000 e clique em Update Settings.

  4. 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.

Importante

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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda DNS Proxy.

  2. No nível de namespace ou de carga de trabalho, selecione Enable DNS Proxy, ative a chave e clique em Update Settings.

  3. 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:

  1. O processo pilot-agent impede o Envoy de aceitar novas conexões de entrada.

  2. Após uma espera de 5 segundos, o pilot-agent verifica a contagem de conexões ativas do Envoy.

  3. Assim que as conexões ativas chegam a zero, o pilot-agent encerra o processo do Envoy.

Isso reduz as solicitações perdidas durante a terminação e minimiza o tempo de desligamento.

Importante

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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Manage Environment Variables for Sidecar Proxy.

  2. No nível de namespace ou de carga de trabalho, selecione Sidecar Graceful Shutdown.

  3. Ative a chave e clique em Update Settings.

  4. 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)

  1. Na página Sidecar Proxy Setting, selecione a aba global e expanda Lifecycle Management.

  2. Desative a chave ao lado de Sidecar Graceful Startup e clique em Update Settings.

  3. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Lifecycle Management.

  2. No nível de namespace ou de carga de trabalho, selecione Sidecar Proxy Drain Duration at Pod Termination.

  3. Insira 10s e clique em Update Settings.

  4. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Lifecycle Management.

  2. No nível de namespace ou de carga de trabalho, selecione Lifecycle of Sidecar Proxy.

  3. 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 o pilot-agent e 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.

  1. Clique em Update Settings.

  2. 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.

Nota

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

  1. Na aba global da página Sidecar Proxy Setting, expanda Outbound Traffic Policy.

  2. Selecione REGISTRY_ONLY e clique em Update Settings.

  3. 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.

Importante

O modo TPROXY não suporta CentOS. Se seus Pods executam em nós CentOS, use o modo REDIRECT padrão.

Configurar no console

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Sidecar Traffic Interception Mode.

  2. No nível de namespace ou de carga de trabalho, marque a caixa de seleção Sidecar Traffic Interception Mode.

  3. Selecione TPROXY e clique em Update Settings.

  4. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Monitoring Statistics.

  2. No nível de namespace ou de carga de trabalho, selecione Log Level.

  3. Selecione error na lista suspensa e clique em Update Settings.

  4. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo e expanda Monitoring Statistics.

  2. Selecione proxyStatsMatcher e Regular Expression Match.

  3. Insira .*outlier_detection.* para coletar métricas de disjuntor (circuit breaker).

  4. Clique em Update Settings.

  5. 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

  1. Na página Sidecar Proxy Setting, selecione uma aba de escopo.

  2. Na seção Envoy Runtime Parameters, insira 5000 ao lado de Limits on Downstream Connections e clique em Update Settings.

  3. 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

  1. Na página Sidecar Proxy Setting, clique em na aba workload e depois clique em Create.

  2. Defina os itens de configuração e clique em Create.

Atualizar uma configuração no nível de carga de trabalho

  1. Na aba workload, localize a configuração desejada e clique em Update na coluna Actions.

  2. Modifique as definições e clique em Update.

Excluir uma configuração no nível de carga de trabalho

  1. Na aba workload, localize a configuração desejada e clique em Delete na coluna Actions.

  2. 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.

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Deployments.

  3. 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:

  1. No painel de navegação à esquerda, escolha ASM Instance > Base Information.

  2. Confirme se o Status é Running.