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:
- Se implementou ou o GKE implementou automaticamente o
ip-masq-agent
DaemonSet no cluster. Para saber mais acerca dos cenários em que o GKE implementa automaticamente oip-masq-agent
DaemonSet, consulte Quando oip-masq-agent
é implementado automaticamente. - Se criou uma lista personalizada
nonMasqueradeCIDRs
noip-masq-agent
configMap. - Nos casos em que não é implementado nenhum
ip-masq-agent
DaemonSet no cluster, independentemente de ter criado o cluster com a flag--disable-default-snat
. Para saber mais acerca desta flag, consulte o artigo Efeito da flag--disable-default-snat
.
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 |
O GKE preserva os endereços IP dos pods de origem para os pacotes enviados para destinos especificados na lista 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 |
O |
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 |
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 |
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 |
O GKE preserva os endereços IP dos pods de origem para os pacotes enviados para destinos especificados em 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 |
O cluster não inclui um |
A política predefinida
|
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-agent
DaemonSet 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 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-agent
DaemonSet 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:
O seu cluster tem um
ip-masq-agent
DaemonSet, mas não tem umanonMasqueradeCIDRs
lista especificada no respetivoip-masq-agent
ConfigMap. Isto inclui o caso em que o seu cluster tem um DaemonSetip-masq-agent
, mas não tem um ConfigMapip-masq-agent
.O seu cluster não tem um
ip-masq-agent
DaemonSet, e a flag--disable-default-snat
não está definida.
Os destinos não mascarados predefinidos não são aplicáveis a clusters com as seguintes configurações:
O seu cluster tem um
ip-masq-agent
DaemonSet> e tem umanonMasqueradeCIDRs
lista personalizada especificada noip-masq-agent
ConfigMap. Uma lista personalizada substitui sempre os destinos não mascarados predefinidos quando o cluster tem um DaemonSetip-masq-agent
.nonMasqueradeCIDRs
O seu cluster não tem um
ip-masq-agent
DaemonSet, e a flag--disable-default-snat
está definida. Consulte a secção Efeito da flag--disable-default-snat
para ver mais detalhes acerca desta configuração.
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
:
Uma vez que os clusters do Autopilot incluem sempre um
ip-masq-agent
DaemonSet, a flag--disable-default-snat
não tem efeito nos clusters do Autopilot.Para clusters padrão: se implementar um
ip-masq-agent
DaemonSet ou se o GKE implementar automaticamente umip-masq-agent
DaemonSet, a flag--disable-default-snat
não tem qualquer significado para o cluster, mesmo que--disable-default-snat
esteja definida. Quando umip-masq-agent
DaemonSet está presente no cluster, os destinos que não são de mascaramento são especificados explicitamente numa lista denonMasqueradeCIDRs
doip-masq-agent
ConfigMap ou nos destinos que não são de mascaramento predefinidos quando não é definida nenhuma lista denonMasqueradeCIDRs
.
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:
- Certifique-se de que o parâmetro
masqLinkLocal
existe e está definido comoTrue
noip-masq-agent
configMap. Quando o parâmetromasqLinkLocal
não está presente no configMapip-masq-agent
, a predefinição éFalse
. Para orientações, consulte os artigos Verificar oip-masq-agent
ConfigMap, Criar oip-masq-agent
ConfigMap e Editar umip-masq-agent
ConfigMap existente. - Certifique-se de que o cluster tem o
ip-masq-agent
DaemonSet implementado. Para orientação, consulte os artigos Verificar oip-masq-agent
DaemonSet e Implementar oip-masq-agent
DaemonSet.
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 ononMasqueradeCIDRs
como0.0.0.0
noip-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
sejaNoSNAT
e ospec.destinations
contenhaCidr: 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:
- O GKE implementa o controlador NAT de saída e o
ip-masq-agent
. - Cria a política de NAT de saída.
- O controlador do GKE traduz a política no
ip-masq-agent
ConfigMap. - O
ip-masq-agent
DaemonSet 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?
- Saiba como usar a política de NAT de saída para configurar a ocultação de IP em clusters do Autopilot.
- Saiba como configurar um agente de mascaramento de IP em clusters padrão.
- Leia a vista geral da rede do GKE.
- Saiba mais sobre a configuração de redes autorizadas.