No modo ambient do Service Mesh (ASM), o componente Ztunnel carrega sua configuração de runtime do ConfigMap ztunnel-config no namespace istio-system. O campo config.yaml nesse ConfigMap define as configurações de política de egress, observabilidade L7 e outros ajustes. O Ztunnel monitora o arquivo em busca de alterações e as aplica automaticamente, sem necessidade de reinicialização.
Configuração
O ConfigMap ztunnel-config tem a seguinte estrutura:
apiVersion: v1
kind: ConfigMap
metadata:
name: ztunnel-config
namespace: istio-system
data:
ztunnel-config.yaml: |
l7Config:
enabled: false
egressPolicies: [ ]
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
|
Não |
Configuração para observabilidade L7. Se não especificado, usa os valores padrão. |
|
|
|
Não |
Regras de política de egress para tráfego destinado a services fora do cluster. Se vazio ou não especificado, todo o tráfego de egress é permitido por padrão. |
As configurações de EgressPolicy aplicam-se apenas a services fora do cluster. Services registrados dentro do cluster, como os resources Service e ServiceEntry, não são afetados.
Exemplos de configuração
Exemplo 1: Ativar logs de acesso L7
Ative a geração de logs de acesso L7. O Ztunnel analisa o tráfego HTTP e TLS e gera logs de acesso.
l7Config:
enabled: true
Exemplo 2: Negar acesso a blocos CIDR privados
Negue o acesso de todos os namespaces a blocos CIDR privados, sem ativar a observabilidade L7.
egressPolicies:
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
policy: Deny
Exemplo 3: Ativar logs de acesso L7 e controle de egress em camadas
Combine logs de acesso L7 com controle de egress em camadas: permita passthrough para um namespace específico, negue acesso ao service de metadados em portas específicas e bloqueie o acesso a blocos CIDR privados.
l7Config:
enabled: true
egressPolicies:
# Allow passthrough for the egress-gateway namespace to prevent the fallback rule from blocking the egress proxy itself.
- namespaces:
- egress-gateway
policy: Passthrough
# Deny access to the cloud provider's metadata service on ports 80 and 443.
- matchCidrs:
- 169.254.169.254/32
- fd00:ec2::254/128
matchPorts:
- 80
- 443
policy: Deny
# Deny access to private CIDR blocks.
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- fc00::/7
policy: Deny
Detalhes dos campos
L7Config
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
|
Não |
Ativa a observabilidade de tráfego L7. Padrão: |
A observabilidade L7 suporta atualmente apenas a geração de logs de acesso. A coleta de métricas no nível de requisição e o rastreamento distribuído ainda não têm suporte.
Os protocolos suportados são HTTP e TLS.
Ativar este recurso pode adicionar uma sobrecarga de desempenho de aproximadamente 5%. Avalie os requisitos da sua carga de trabalho antes de ativá-lo.
Campos HTTP adicionais
Com a observabilidade L7 ativada, cada transação de requisição/resposta HTTP gera uma entrada de log de acesso separada com os seguintes campos adicionais:
|
Campo |
Descrição |
Valor de exemplo |
|
|
Método da requisição HTTP |
|
|
|
Caminho da requisição |
|
|
|
Versão do protocolo |
|
|
|
Host da requisição |
|
|
|
Código de status da resposta HTTP |
|
|
|
Cabeçalho de requisição |
|
|
|
Tamanho do corpo da requisição em bytes, por requisição |
|
|
|
Tamanho do corpo da resposta em bytes, por requisição |
|
|
|
Tempo total de uma única requisição, do envio ao recebimento da resposta |
|
Campos TLS adicionais
Com a observabilidade L7 ativada para tráfego TLS (não HTTP sobre TLS), o Ztunnel analisa a mensagem de handshake ClientHello e adiciona os seguintes campos à entrada de log:
|
Campo |
Descrição |
Valor de exemplo |
|
|
Valor fixo |
|
|
|
Server Name Indication (SNI) da mensagem ClientHello |
|
|
|
Primeiro protocolo Application-Layer Protocol Negotiation (ALPN) da mensagem ClientHello. Se nenhum ALPN for especificado, o valor é |
|
EgressPolicy
Cada regra EgressPolicy consiste em três condições de correspondência (namespaces, matchCidrs e matchPorts) e uma ação de policy. O Ztunnel avalia as regras de cima para baixo e aplica a primeira cujas condições correspondam integralmente.
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
|
Não |
Lista de namespaces de cliente aos quais a regra se aplica. Se vazia, corresponde a todos os namespaces. |
|
|
|
Não |
Lista de intervalos de endereços ip de destino no formato CIDR. Se vazia, corresponde a todos os endereços ip de destino. Para controlar o tráfego IPv4 e IPv6, configure os respectivos intervalos CIDR separadamente. |
|
|
|
Não |
Lista de portas de destino. Se vazia, corresponde a todas as portas. |
|
|
|
Sim |
Ação a executar. Valores válidos:
|
EgressPolicyAction
Valores disponíveis para o campo policy:
|
Valor |
Descrição |
|
|
Encaminha o tráfego diretamente para o endereço ip de destino via TCP, ignorando o proxy do mesh. |
|
|
Descarta a requisição imediatamente, impedindo que ela chegue ao destino. |
Restrições de configuração
O Ztunnel avalia as regras em
egressPoliciessequencialmente e aplica a primeira cujas condiçõesnamespaces,matchCidrsematchPortscorrespondam integralmente. As regras subsequentes são ignoradas.O campo
namespacescorresponde ao namespace do cliente (origem da requisição), não ao namespace do service de destino.O campo
matchCidrscorresponde ao endereço ip de destino, não ao nome de domínio. Para controlar o tráfego com base em nomes de domínio, registre o service externo como umServiceEntryno mesh.O campo
matchPortscorresponde à porta de destino (porta remota da requisição), não à porta de origem do cliente.Se uma requisição não corresponder a nenhuma regra em
egressPolicies, a ação padrão éPassthrough.O Ztunnel carrega automaticamente as alterações de configuração por meio de monitoramento de arquivos, sem exigir a reinicialização do pod. Se o formato da configuração for inválido, o Ztunnel mantém a última configuração válida conhecida.