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:
- Se você implantou ou o GKE implantou automaticamente o
DaemonSet
ip-masq-agent
no cluster. Para saber mais sobre os cenários em que o GKE implanta automaticamente o DaemonSetip-masq-agent
, consulte Quando oip-masq-agent
é implantado automaticamente. - Se você criou uma lista
nonMasqueradeCIDRs
personalizada no configMapip-masq-agent
. - Nos casos em que nenhum DaemonSet
ip-masq-agent
foi implantado no cluster, é analisado se você criou o cluster com a flag--disable-default-snat
. Para saber mais sobre essa flag, consulte Efeito da flag--disable-default-snat
.
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 |
O GKE preserva os endereços IP do pod de origem
quando se trata dos pacotes enviados para destinos especificados
na lista 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 |
O DaemonSet |
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 |
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 |
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 |
O GKE preserva os endereços IP de origem do pod nos pacotes
enviados para destinos especificados no
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
|
O cluster não inclui um |
O
|
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:
O cluster tem um DaemonSet
ip-masq-agent
, mas nenhuma listanonMasqueradeCIDRs
especificada no ConfigMapip-masq-agent
. Isso inclui o caso em que o cluster tem um DaemonSetip-masq-agent
, mas não tem um ConfigMapip-masq-agent
.O cluster não tem um DaemonSet
ip-masq-agent
e a flag--disable-default-snat
não está definida.
Os destinos não mascarados padrão não são aplicáveis a clusters com as seguintes configurações:
O cluster tem um DaemonSet
ip-masq-agent
e você tem uma listanonMasqueradeCIDRs
personalizada especificada no ConfigMapip-masq-agent
. Uma listanonMasqueradeCIDRs
personalizada sempre substitui os destinos não mascarados padrão quando o cluster tem um DaemonSetip-masq-agent
.O cluster não tem um DaemonSet
ip-masq-agent
e a flag--disable-default-snat
está definida. Consulte Efeito da flag--disable-default-snat
para mais detalhes sobre essa configuração.
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.
- Para clusters padrão: se você implantar um DaemonSet
ip-masq-agent
ou se o GKE implantar automaticamente um DaemonSetip-masq-agent
, a flag--disable-default-snat
não terá significado para o cluster, mesmo que--disable-default-snat
esteja definido. Quando um DaemonSetip-masq-agent
está presente no cluster, destinos não mascarados são especificados explicitamente em uma listanonMasqueradeCIDRs
do ConfigMapip-masq-agent
ou dos destinos não mascarados padrão quando nenhuma listanonMasqueradeCIDRs
é definida.
É 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:
- Verifique se o parâmetro
masqLinkLocal
existe e está definido comoTrue
no configMapip-masq-agent
. Quando o parâmetromasqLinkLocal
não está presente no configMapip-masq-agent
, o padrão éFalse
. Consulte Como verificar o ConfigMapip-masq-agent
, Como criar o ConfigMapip-masq-agent
e Como editar um ConfigMapip-masq-agent
. - Verifique se o cluster tem o DaemonSet
ip-masq-agent
implantado. Para orientação, consulte Como verificar o DaemonSetip-masq-agent
e Como implantar o DaemonSetip-masq-agent
.
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ê definiunonMasqueradeCIDRs
como0.0.0.0
no ConfigMapip-masq-agent
. - Em clusters padrão sem um DaemonSet
ip-masq-agent
, se você tiver definido a sinalização--disable-default-snat
.
- Nos clusters do Autopilot, se você editar a EgressNATPolicy padrão, de modo que
spec.action
sejaNoSNAT
e aspec.destinations
contenhaCidr: 0.0.0.0/0
.
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.
Como restaurar para o comportamento padrão do SNAT
Para restaurar o comportamento SNAT padrão quando um DaemonSet ip-masq-agent
estiver
presente em um cluster, exclua o ConfigMap ip-masq-agent
associado. O
DaemonSet ip-masq-agent
restaura o comportamento padrão de mascaramento de IP nos
nós que ele gerencia.
Para restaurar o comportamento padrão do SNAT quando um DaemonSet ip-masq-agent
não estiver presente em um cluster, será necessário fazer upgrade do pool de nós.
Verifique se --disable-default-snat
não está definido no cluster.
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:
- O GKE implanta o controlador NAT de saída e o
ip-masq-agent
. - Você cria a política de saída NAT.
- O controlador do GKE converte a política no ConfigMap
ip-masq-agent
. - 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
- Saiba como usar a política de NAT de saída para configurar o mascaramento de IP em clusters do Autopilot.
- Saiba como configurar um agente de mascaramento de IP em clusters padrão.
- Leia a visão geral da rede do GKE.
- Saiba sobre como configurar redes autorizadas.