Agente de máscara de IP

Esta página explica como funciona a ocultação de IP no Google Kubernetes Engine (GKE) e apresenta opções de configuração para diferentes cenários.

Esta página pressupõe que tem conhecimentos sobre a ocultação de IP no Kubernetes.

Máscara de IP do GKE

O GKE pode usar o mascaramento de IP para alterar os endereços IP de origem dos pacotes enviados a partir de pods. Quando a ocultação de IP se aplica a um pacote emitido por um pod, o GKE altera o endereço IP de origem do endereço IP do pod para o endereço IP do nó subjacente. A máscara do endereço IP de origem de um pacote é útil quando um destinatário está configurado para receber pacotes apenas dos endereços IP dos nós do cluster.

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

A ocultação de IP não é suportada com pools de nós do Windows Server.

Máscara de IP para clusters padrão

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

A tabela seguinte resume as configurações de ocultação de IP para clusters GKE padrão:

Configuração do cluster Comportamento de SNAT resultante

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

O GKE preserva os endereços IP dos pods de origem para os pacotes enviados para destinos especificados na lista nonMasqueradeCIDRs.

O GKE altera os endereços IP dos pods de origem para os endereços IP dos nós de origem para os pacotes enviados para destinos não especificados na lista nonMasqueradeCIDRs.

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

O GKE preserva os endereços IP dos pods de origem para pacotes enviados para um conjunto de destinos de não ocultação predefinidos.

O GKE altera os endereços IP dos pods de origem para os endereços IP dos nós de origem para pacotes enviados para destinos fora dos destinos de não ocultação predefinidos.

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

O GKE preserva os endereços IP dos pods de origem para pacotes enviados para um conjunto de destinos de não ocultação predefinidos.

O GKE altera os endereços IP dos pods de origem para os endereços IP dos nós de origem para pacotes enviados para destinos fora dos destinos de não ocultação predefinidos.

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

O GKE preserva os endereços IP dos pods de origem para pacotes enviados para todos os destinos.

Reveja o artigo Preservar origens de endereços IPv4 de pods para destinos na Internet para ver considerações de encaminhamento importantes quando preserva origens de endereços IPv4 de pods e precisa de encaminhar pacotes para a Internet.

Máscara de IP para clusters do Autopilot

Nos clusters do Autopilot, o GKE implementa sempre um ip-masq-agent DaemonSet. Exceto para pacotes enviados por pods para os intervalos de nós, pods ou serviços do cluster, pode controlar o comportamento de mascaramento de IP através de um EgressNATPolicy. Para usar um EgressNATPolicy, o cluster do Autopilot tem de cumprir ambos os requisitos seguintes:

  • O cluster tem de usar a versão 1.23.4-gke.1600 ou posterior do GKE, ou a versão 1.22.7-gke.1500 ou posterior.
  • O cluster tem de ter sido criado com o GKE Dataplane V2 ativado.

A tabela seguinte resume as configurações de ocultação de IP para clusters do GKE do Autopilot:

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

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

O GKE preserva os endereços IP dos pods de origem para os pacotes enviados para destinos especificados em spec.destinations[] da EgressNATPolicy. O GKE consegue isto traduzindo spec.destinations[] numa nonMasqueradeCIDRs lista num ip-masq-agent configMap.

O GKE altera os endereços IP dos pods de origem para os endereços IP dos nós de origem para os pacotes enviados para destinos não especificados em spec.destinations[] do EgressNATPolicy.

O cluster não inclui um EgressNATPolicy> personalizado.

A política predefinida EgressNATPolicy e a política Gerido pelo GKE aplicam-se ambas, o que resulta no seguinte comportamento:

Exemplos de configuração

Expanda as secções seguintes para ver exemplos de mascaramento de IP e configuração com base no tipo de cluster.

Referência de configuração avançada

Quando o ip-masq-agent é implementado automaticamente

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

Nos clusters padrão, o GKE implementa um ip-masq-agentDaemonSet quando a flag --disable-default-snatnã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 de pods que não se enquadra em 10.0.0.0/8.

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

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

Destinos não mascarados predefinidos

Os destinos não mascarados predefinidos 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 predefinidos são aplicáveis a clusters com as seguintes configurações:

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

Efeito da bandeira --disable-default-snat

A flag --disable-default-snat altera o comportamento predefinido do SNAT do GKE para que os endereços IP dos pods de origem sejam preservados para pacotes enviados para todos os destinos. O GKE implementa o comportamento de SNAT predefinido ao não implementar nenhum ip-masq-agent DaemonSet no cluster.

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

Pode definir a flag --disable-default-snat atualizando um cluster depois de ter sido criado. Desde que o cluster não tenha um ip-masq-agent DaemonSet implementado, a desativação do SNAT predefinido entra em vigor depois de o cluster substituir todos os respetivos nós, por vezes, horas mais tarde. Isto deve-se ao facto de o GKE respeitar as janelas de manutenção configuradas quando substitui nós no cluster. Se não tiver configurado nenhuma janela de manutenção, tem de fazer o ciclo dos nós no cluster manualmente antes de a flag --disable-default-snat ter algum efeito.

Link-local masquerading

O intervalo 169.254.0.0/16 é usado para endereços IP locais de ligação. A ocultação de endereços locais de ligação refere-se à alteração de um endereço IP de origem do pod para um endereço IP de origem do nó para pacotes enviados para os destinos 169.254.0.0/16.

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

Por predefinição, os clusters Standard também preservam os endereços IP dos pods de origem para pacotes enviados para destinos 169.254.0.0/16.

Pode ativar a ocultação de IP local de ligação num cluster padrão fazendo o seguinte:

Contentores e agrupamentos de diagnóstico com hostNetwork: true

A menos que especifique um endereço IP de origem personalizado para pacotes, os pods em execução com hostNetwork: true e contentores de diagnóstico enviam pacotes com origens correspondentes ao endereço IP do nó. Para pods executados com hostNetwork: true, o GKE atribui ao pod o endereço IP do nó. O GKE não gere endereços IP para contentores de diagnóstico, incluindo contentores para resolver problemas de nós com a caixa de ferramentas.

Os clusters do Autopilot não suportam a execução de pods com spec.hostNetwork: true. Uma vez que os nós de um cluster do Autopilot não são acessíveis através de SSH, não pode executar contentores de diagnóstico neles.

Preservar as origens de endereços IPv4 dos pods para destinos na Internet

Se a configuração de mascaramento de IP do seu cluster for uma das seguintes: o GKE preserva as origens dos endereços IP dos pods para pacotes enviados para todos os destinos, incluindo destinos da Internet:

  • Em clusters padrão com um ip-masq-agent DaemonSet, se tiver definido o nonMasqueradeCIDRs como 0.0.0.0 no ip-masq-agent ConfigMap.
  • Em clusters padrão sem um ip-masq-agent DaemonSet, se tiver definido o sinalizador --disable-default-snat.
  • Nos clusters do Autopilot, se editar a EgressNATPolicy predefinida de modo que o spec.action seja NoSNAT e o spec.destinations contenha Cidr: 0.0.0.0/0.

As origens IPv4 dos pods são endereços IPv4 internos, o que significa que não são encaminháveis na Internet. Consequentemente, quando preserva os endereços IPv4 do pod de origem para pacotes enviados para a Internet, tem de usar uma técnica como uma das seguintes para encaminhar pacotes depois de saírem dos nós do cluster:

  • Certifique-se de que a sua rede VPC tem uma rota predefinida com o próximo salto do gateway de Internet predefinido e configure um gateway Cloud NAT para fornecer serviços NAT públicos, pelo menos, aos intervalos de endereços IPv4 secundários da sub-rede usados pelos pods no seu cluster. Para mais detalhes, consulte a interação do GKE na vista geral do Cloud NAT.
  • Configure a sua rede VPC para usar uma rota predefinida personalizada cujo salto seguinte seja uma instância de VM ou um Network Load Balancer de passagem interno, em que a VM ou os back-ends do balanceador de carga foram configurados para encaminhar pacotes para a Internet em nome dos pods.

Restaurar o comportamento de SNAT predefinido

Para restaurar o comportamento SNAT predefinido quando um ip-masq-agent DaemonSet está presente num cluster, elimine o ip-masq-agent ConfigMap associado. O ip-masq-agent DaemonSet restaura o comportamento de mascaramento de IP predefinido nos nós que gere.

Para restaurar o comportamento predefinido do SNAT quando um ip-masq-agent DaemonSet não está presente num cluster, tem de atualizar o conjunto de nós (certifique-se de que --disable-default-snat não está definido no cluster).

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

A política NAT de saída do GKE permite-lhe configurar a ocultação de IP em clusters do Autopilot. Pode usar a definição de recursos personalizados (CRD) da política de NAT de saída do GKE para alterar os endereços IP de origem dos pacotes enviados a partir dos pods.

Por motivos de segurança ou esgotamento de endereços IP, pode mascarar endereços IP do intervalo de endereços IP do pod para o intervalo de endereços IP do nó para tráfego de saída para redes no local. Por exemplo, pode usar um intervalo não RFC-1918 para clusters do Autopilot e usar um intervalo RFC-1918 para os nós. No entanto, se os pods tiverem de comunicar com redes no local que também usam o intervalo não RFC-1918, os endereços IP podem sobrepor-se. Para evitar a perda de tráfego, pode configurar uma política de NAT de saída para não anunciar os intervalos não RFC-1918 dos pods às redes no local. A política de NAT de saída oculta o intervalo não RFC-1918 dos pods para usar o intervalo RFC-1918 do nó. Certifique-se de que um intervalo de nós não se sobrepõe a nenhum intervalo no local, caso contrário, pode causar um ciclo de tráfego.

O GKE aplica o comportamento de mascaramento de IP para clusters do Autopilot através do seguinte processo:

  1. O GKE implementa o controlador NAT de saída e o ip-masq-agent.
  2. Cria a política de NAT de saída.
  3. O controlador do GKE traduz a política no ip-masq-agent ConfigMap.
  4. O ip-masq-agentDaemonSet lê o ConfigMap e, em seguida, o GKE aplica o comportamento de ocultação de IP.

Políticas geradas automaticamente

O GKE suporta as seguintes duas políticas de NAT de saída geradas automaticamente:

  • Predefinição: estas políticas são editáveis.
  • Geridas pelo GKE: estas políticas são fixas e não são editáveis.

Política predefinida

O GKE predefine um conjunto de intervalos de endereços IP predefinidos. Quando os pacotes são enviados para estes destinos, o seu cluster não oculta as origens dos endereços IP e preserva os endereços IP dos pods de origem. Para alterar estes intervalos de endereços IP predefinidos, consulte o artigo Edite e implemente a política de NAT de saída.

O manifesto seguinte descreve uma política de NAT de saída predefinida:

    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 os mesmos que os intervalos de destino não mascarados predefinidos.

Gerido pela política do GKE

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

Pode identificar esta política por um hash dinâmico de 8 bytes (gke-{CLUSTER_SHORT_HASH}) que o GKE atribui. Não pode editar esta política.

O seguinte manifesto descreve uma política gerida pelo GKE denominada 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>

O que se segue?