Agente de mascaramento de IP


Nesta página, explicamos como o mascaramento de IP do Google Kubernetes Engine (GKE) funciona e fornecemos opções de configuração para diferentes cenários.

Visão geral do mascaramento de IP

O mascaramento de IP é uma forma de conversão de endereços de rede de origem (SNAT) de muitos para um. O GKE pode usar o mascaramento de IP para alterar os endereços IP de origem dos pacotes enviados dos pods.

Para uma visão geral do mascaramento de IP em qualquer implementação do Kubernetes, confira o Guia do usuário do agente de mascaramento de IP (em inglês).

Mascaramento de IP do GKE

Quando o mascaramento de IP é aplicado a um pacote emitido por um pod, o GKE altera o endereço de origem do pacote do IP do pod para o IP do nó. Mascarar o endereço IP de origem de um pacote é útil quando um destinatário está configurado para receber pacotes apenas dos endereços IP do nó do cluster.

Em nós do Linux, o GKE configura regras iptables. O GKE usa o DaemonSet ip-masq-agent para configurar o plano de dados adequado.

Os pools de nós do Windows Server não dão suporte ao mascaramento de IP.

Mascaramento de IP para clusters do Standard

Nos clusters do Standard, o comportamento de mascaramento de IP é regido por três fatores:

A seguinte tabela resume as configurações de mascaramento de IP dos clusters do GKE no Standard:

Configuração do cluster Comportamento de SNAT resultante

O DaemonSet ip-masq-agent está presente no cluster, e existe uma lista nonMasqueradeCIDRs personalizada no ConfigMap ip-masq-agent.

O GKE preserva os endereços IP do pod de origem quando se trata dos pacotes enviados para destinos especificados na lista nonMasqueradeCIDRs.

O GKE altera os endereços IP do pod de origem para endereços IP do nó de origem quando se trata dos pacotes enviados a destinos nonMasqueradeCIDRsnão especificados na lista.

O DaemonSet ip-masq-agent está presente no cluster, mas uma lista nonMasqueradeCIDRs personalizada não existe no ConfigMap ip-masq-agent ou o ConfigMap ip-masq-agent não está presente.

O GKE preserva os endereços IP do pod de origem quando se trata dos pacotes enviados a um conjunto de destinos padrão não mascarados.

O GKE altera os endereços IP do pod de origem para endereços IP de nó de origem quando se trata de pacotes enviados a destinos fora dos destinos padrão não mascarados.

O DaemonSet ip-masq-agent não está presente no cluster e você criou o cluster sem a flag --disable-default-snat.

O GKE preserva os endereços IP do pod de origem quando se trata dos pacotes enviados a um conjunto de destinos padrão não mascarados.

O GKE altera os endereços IP do pod de origem para endereços IP de nó de origem quando se trata de pacotes enviados a destinos fora dos destinos padrão não mascarados.

O DaemonSet ip-masq-agent não está presente no cluster e você criou o cluster com a flag --disable-default-snat.

O GKE preserva os endereços IP de pod de origem quando se trata dos pacotes enviados para todos os destinos.

Consulte Como preservar origens de endereços IPv4 do pod para destinos da Internet para conferir considerações importantes sobre roteamento quando você preservar endereços de origem IPv4 do pod e precisar rotear pacotes para a Internet.

Mascaramento de IP para clusters do Autopilot

Nos clusters do Autopilot, o GKE sempre implanta um DaemonSet ip-masq-agent. É possível controlar o comportamento de mascaramento de IP usando um EgressNATPolicy, exceto para pacotes enviados por pods aos intervalos de nós, pods ou serviços do cluster. Para usar um EgressNATPolicy, o cluster do Autopilot precisa atender a estes dois requisitos:

  • O cluster precisa usar o GKE 1.23.4-gke.1600 ou posterior ou 1.22.7-gke.1500 ou posterior.
  • O cluster precisa ter sido criado com o GKE Dataplane V2 ativado.

A seguinte tabela resume as configurações de mascaramento de IP dos clusters do GKE no Autopilot:

Configuração do cluster do Autopilot Comportamento de SNAT resultante

O cluster inclui um EgressNATPolicy personalizado em que spec.action é NoSNAT e contém destinos não mascarados especificados em spec.destinations[].

O GKE preserva os endereços IP de origem do pod nos pacotes enviados para destinos especificados no spec.destinations[] do EgressNATPolicy. O GKE faz isso convertendo spec.destinations[] em uma lista nonMasqueradeCIDRs em um configMap ip-masq-agent.

O GKE altera os endereços IP de origem do pod para os endereços IP de origem do nó com relação aos pacotes enviados a destinos não especificados no spec.destinations[] de EgressNATPolicy.

O cluster não inclui um EgressNATPolicy personalizado.

O EgressNATPolicy padrão e a política gerenciada pelo GKE são aplicáveis e resultam no seguinte comportamento:

  • O GKE preserva os endereços IP do pod de origem quando se trata dos pacotes enviados a um conjunto de destinos padrão não mascarados.
  • O GKE altera os endereços IP do pod de origem para endereços IP de nó de origem quando se trata de pacotes enviados a destinos fora dos destinos padrão não mascarados.

Exemplos de configuração

Expanda as seções a seguir para conferir exemplos de mascaramento de IP e configuração com base no tipo de cluster.

Referência de configuração avançada

Quando ip-masq-agent é implantado automaticamente

Nos clusters do modo Autopilot, o GKE sempre implanta um DaemonSet ip-masq-agent.

Em clusters do Standard, o GKE implanta um DaemonSet ip-masq-agent quando a flag --disable-default-snat não está definida e o cluster usa uma das seguintes combinações de configuração:

  • O cluster não usa o GKE Dataplane V2 e a aplicação da política de rede está ativada.

  • O cluster usa um intervalo de endereços IP do pod que não se adéqua a 10.0.0.0/8.

Para que o DaemonSet ip-masq-agent seja eficaz, também é preciso especificar a lista de nonMasqueradeCIDRs no ConfigMap ip-masq-agent. Para mais informações, consulte como configurar um agente de mascaramento de IP.

Quando um DaemonSet ip-masq-agent está presente em um cluster, o GKE atualiza e reconcilia um pod de exibição em cada nó do cluster.

Destinos não mascarados padrão

Os destinos não mascarados padrão são:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 100.64.0.0/10
  • 192.0.0.0/24
  • 192.0.2.0/24
  • 192.88.99.0/24
  • 198.18.0.0/15
  • 198.51.100.0/24
  • 203.0.113.0/24
  • 240.0.0.0/4

Os destinos não mascarados padrão são aplicáveis a clusters com as seguintes configurações:

Os destinos não mascarados padrão não são aplicáveis a clusters com as seguintes configurações:

Efeito da sinalização --disable-default-snat

A flag --disable-default-snat altera o comportamento padrão de SNAT do GKE para que os endereços IP de origem do pod sejam preservados nos pacotes enviados a todos os destinos. O GKE implementa o comportamento SNAT padrão por meio da não implantação de nenhum DaemonSet ip-masq-agent no cluster.

A flag --disable-default-snat não tem efeito quando um cluster inclui um DaemonSet ip-masq-agent:

  • Como os clusters do Autopilot sempre incluem um DaemonSet ip-masq-agent, a flag --disable-default-snat não afeta esses clusters.

É possível definir a flag --disable-default-snat atualizando um cluster depois da criação dele. Se o cluster não tiver um DaemonSet ip-masq-agent implantado, a desativação do SNAT padrão entrará em vigor depois que o cluster substituir todos os nós, às vezes horas depois. Isso ocorre porque o GKE respeita as janelas de manutenção configuradas quando substitui os nós no cluster. Se você não tiver configurado janelas de manutenção, reinicie manualmente os nós no cluster antes que a flag --disable-default-snat entre em vigor.

Mascaramento de link local

O intervalo 169.254.0.0/16 é usado para endereços IP de link local. Mascaramento de link local se refere à alteração de um endereço IP do pod de origem para um endereço IP do nó de origem para pacotes enviados para os destinos 169.254.0.0/16.

Os clusters do Autopilot sempre preservam endereços IP do pod de origem nos pacotes enviados para destinos 169.254.0.0/16.

Por padrão, os clusters padrão também preservam os endereços IP do pod de origem nos pacotes enviados para os destinos 169.254.0.0/16.

É possível ativar o mascaramento de IP de link local em um cluster padrão fazendo o seguinte:

Contêineres e pods de diagnóstico com hostNetwork: true

A menos que você especifique um endereço IP de origem personalizado para os pacotes, os pods em execução com hostNetwork: true e os contêineres de diagnóstico enviam pacotes com origens correspondentes ao endereço IP do nó. Para pods em execução com hostNetwork: true, o GKE atribui ao pod o endereço IP do nó. O GKE não gerencia os endereços IP dos contêineres de diagnóstico, incluindo os contêineres de depuração de problemas de nó, usando a caixa de ferramentas.

Os clusters do Autopilot não oferecem suporte à execução de pods com spec.hostNetwork: true. Como os nós de um cluster do Autopilot não podem ser acessados usando SSH, não é possível executar contêineres de diagnóstico neles.

Como preservar as origens de endereços IPv4 do pod para destinos da Internet

Se a configuração de mascaramento de IP do cluster for uma das seguintes, o GKE preservará as origens de endereços IP do pod nos pacotes enviados para todos os destinos, incluindo destinos da Internet:

  • Em clusters padrão com um DaemonSet ip-masq-agent, se você definiu nonMasqueradeCIDRs como 0.0.0.0 no ConfigMap ip-masq-agent.
  • Em clusters padrão sem um DaemonSet ip-masq-agent, se você tiver definido a sinalização --disable-default-snat.

Em clusters públicos e particulares, as origens IPv4 do pod são endereços IPv4 internos, o que significa que não são roteáveis na Internet. Consequentemente, quando você preserva os endereços IPv4 do pod de origem para os pacotes enviados à Internet, é necessário usar uma técnica como uma das seguintes para rotear pacotes depois que eles saem dos nós do cluster:

  • Verifique se a rede VPC tem uma rota padrão com o próximo salto padrão do gateway da Internet e configure um gateway do Cloud NAT para fornecer serviços NAT públicos a pelo menos os intervalos de endereços IPv4 secundários da sub-rede usados pelos pods em seu cluster. Para mais detalhes, consulte Interação com o GKE na visão geral do Cloud NAT.
  • Configure sua rede VPC para usar uma rota padrão personalizada em que o próximo salto seja uma instância de VM ou o balanceador de carga de rede de passagem interna, em que a VM ou os back-ends do balanceador de carga foram configurados para rotear pacotes para a Internet em nome dos pods.

Efeito da política NAT de saída em clusters do Autopilot

A política NAT de saída do GKE permite configurar o mascaramento de IP nos clusters do Autopilot. É possível usar a definição de recurso personalizado (CRD) da política NAT de saída do GKE para alterar os endereços IP de origem dos pacotes enviados pelos pods.

Por motivos de segurança ou de esgotamento de endereço IP, é possível mascarar os endereços IP do intervalo de endereços IP do pod para o nó com relação ao tráfego de saída enviado às redes locais. Por exemplo, é possível usar um intervalo que não seja RFC-1918 para os clusters do Autopilot e um intervalo que seja RFC-1918 para os nós. No entanto, se os pods precisarem se comunicar com redes locais que também usam um intervalo não RFC-1918, os endereços IP poderão se sobrepor. Para evitar a perda de tráfego, configure uma política de saída NAT para não divulgar os intervalos não RFC-1918 dos pods para redes locais. A política de saída NAT mascara o intervalo não RFC-1918 dos pods para usar o intervalo RFC-1918 do nó. Verifique se um intervalo de nó não está se sobrepondo a nenhum intervalo local ou isso pode causar um loop de tráfego.

O GKE impõe o comportamento de mascaramento de IP para clusters do Autopilot por meio do seguinte processo:

  1. O GKE implanta o controlador NAT de saída e o ip-masq-agent.
  2. Você cria a política de saída NAT.
  3. O controlador do GKE converte a política no ConfigMap ip-masq-agent.
  4. O DaemonSet ip-masq-agent lê o ConfigMap e, em seguida, o GKE impõe o comportamento de mascaramento de IP.

Políticas geradas automaticamente

O GKE é compatível com as duas seguintes políticas NAT de saída geradas automaticamente:

  • Padrão: essas políticas são editáveis.
  • Gerenciado pelo GKE: essas políticas são fixas e não são editáveis.

Política padrão

O GKE predefine um conjunto de intervalos de endereços IP padrão. Quando os pacotes são enviados para esses destinos, o cluster não mascara as origens de endereço IP de origem e preserva os endereços IP do pod de origem. Para alterar esses intervalos de endereços IP padrão, consulte Editar e implantar a política NAT de saída.

O manifesto a seguir descreve uma política de NAT de saída padrão:

    Name:         default
    Namespace:
    Labels:       <none>
    Annotations:  <none>
    API Version:  networking.gke.io/v1
    Kind:         EgressNATPolicy
    Metadata:
      Creation Timestamp:  2022-03-16T21:05:45Z
      Generation:          2
      Managed Fields:
        API Version:  networking.gke.io/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:spec:
            .:
            f:action:
          f:status:
        Manager:      egress-nat-controller
        Operation:    Update
        Time:         2022-03-16T21:05:45Z
        API Version:  networking.gke.io/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:spec:
            f:destinations:
        Manager:         kubectl
        Operation:       Update
        Time:            2022-03-17T01:58:13Z
      Resource Version:  189346
      UID:               06acbb5a-23ba-4c2a-bb34-9b6ed8c4a87f
    Spec:
      Action:  NoSNAT
      Destinations:
        Cidr:  10.0.0.0/8
        Cidr:  172.16.0.0/12
        Cidr:  192.168.0.0/16
        Cidr:  240.0.0.0/4
        Cidr:  192.0.2.0/24
        Cidr:  198.51.100.0/24
        Cidr:  203.0.113.0/24
        Cidr:  100.64.0.0/10
        Cidr:  198.18.0.0/15
        Cidr:  192.0.0.0/24
        Cidr:  192.88.99.0/24
    Status:
    Events:  <none>

Os intervalos CIDR são iguais aos intervalos padrão de destino não mascarados.

Gerenciado pela política do GKE

A política NAT de saída do GKE reserva um intervalo estático de endereços IP necessários para preservar a operação do cluster. Esse intervalo estático contém os intervalos de endereços IP do pod, do serviço e do nó e pode se sobrepor à política padrão.

É possível identificar essa política com um hash dinâmico de 8 bytes (gke-{CLUSTER_SHORT_HASH}) que o GKE atribui. Não é possível editar esta política.

O manifesto a seguir descreve uma política gerenciada pelo GKE chamada gke-bbfa6c0e-1:

    Name:         gke-bbfa6c0e-1
    Namespace:
    Labels:       <none>
    Annotations:  <none>
    API Version:  networking.gke.io/v1
    Kind:         EgressNATPolicy
    Metadata:
      Creation Timestamp:  2022-03-16T21:05:46Z
      Generation:          1
      Managed Fields:
        API Version:  networking.gke.io/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:spec:
            .:
            f:action:
            f:destinations:
          f:status:
        Manager:         egress-nat-controller
        Operation:       Update
        Time:            2022-03-16T21:05:46Z
      Resource Version:  11699
      UID:               0201b5de-a6f6-4926-822b-31ed7cdee2c6
    Spec:
      Action:  NoSNAT
      Destinations:
        Cidr:  10.119.128.0/17
        Cidr:  10.120.0.0/22
        Cidr:  10.128.0.0/20
    Status:
    Events:  <none>

A seguir