En esta página, se explica cómo funciona el enmascaramiento de IP en Google Kubernetes Engine (GKE) y se proporcionan opciones de configuración para diferentes situaciones.
Descripción general del enmascaramiento de IP
masquerading de IP es una forma de traducción de direcciones de red (SNAT) que realiza traducciones de direcciones IP de muchos a uno. GKE puede usar el enmascaramiento de IP para cambiar las direcciones IP de origen de los paquetes que se envían desde los Pods.
Si quieres obtener una descripción general más general del enmascaramiento de IP en cualquier implementación de Kubernetes, consulta la guía del usuario del agente de enmascaramiento de IP.
Enmascaramiento de IP de GKE
Cuando el enmascaramiento de IP se aplica a un paquete emitido por un Pod, GKE cambia la dirección IP de origen del paquete de la IP del Pod a la dirección IP del nodo subyacente. Enmascarar la dirección IP de origen de un paquete es útil cuando un destinatario está configurado para recibir paquetes solo de las direcciones IP del nodo del clúster.
En los nodos de Linux, GKE configura reglas de iptables
.
GKE usa el DaemonSet ip-masq-agent
para configurar el plano de datos adecuado.
El enmascaramiento de IP no es compatible con los grupos de nodos de Windows Server.
Enmascaramiento de IP para clústeres de Standard
En los clústeres estándar, el comportamiento de enmascaramiento de IP del clúster se rige por tres factores:
- Ya sea que hayas implementado o GKE implementó de forma automática el DaemonSet
ip-masq-agent
en el clúster. Para obtener información sobre las situaciones en las que GKE implementa de forma automática el DaemonSetip-masq-agent
, consulta Cuando se implementaip-masq-agent
de forma automática. - Si creaste una lista
nonMasqueradeCIDRs
personalizada en el ConfigMap deip-masq-agent
. - En los casos en que no se implemente un DaemonSet
ip-masq-agent
en el clúster, verifica si creaste el clúster con la marca--disable-default-snat
. Para obtener más información sobre esta marca, consulta Efecto de la marca--disable-default-snat
.
En la siguiente tabla, se resumen las opciones de configuración de enmascaramiento de IP para clústeres de GKE Standard:
Configuración del clúster | Comportamiento resultante de la SNAT |
---|---|
El DaemonSet |
GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a los destinos especificados en la lista de GKE cambia las direcciones IP del Pod de origen por las direcciones IP del nodo de origen para los paquetes enviados a destinos no especificados en la lista de |
El DaemonSet |
GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a un conjunto de destinos predeterminados sin enmascarar. GKE cambia las direcciones IP del Pod de origen por las direcciones IP de nodo de origen para los paquetes enviados a destinos fuera de los destinos predeterminados sin enmascarar. |
El DaemonSet |
GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a un conjunto de destinos predeterminados sin enmascarar. GKE cambia las direcciones IP del Pod de origen por las direcciones IP de nodo de origen para los paquetes enviados a destinos fuera de los destinos predeterminados sin enmascarar. |
El DaemonSet |
GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a todos los destinos. Revisa Preserva las fuentes de direcciones IPv4 del Pod a los destinos de Internet para obtener consideraciones de enrutamiento importantes cuando conservas las direcciones de origen IPv4 de Pod y necesitas enrutar paquetes a Internet. |
Enmascaramiento de IP para clústeres de Autopilot
En los clústeres de Autopilot, GKE siempre implementa un DaemonSet ip-masq-agent
. Excepto por los paquetes que envían los Pods a los rangos de nodos, Pods o servicios del clúster, puedes controlar el comportamiento de enmascaramiento de IP con un EgressNATPolicy
. Para usar un EgressNATPolicy
, tu clúster de Autopilot debe cumplir con los siguientes requisitos:
- El clúster debe usar la versión 1.23.4-gke.1600 de GKE o una posterior, o 1.22.7-gke.1500 o posterior.
- El clúster se debe haber creado con GKE Dataplane V2 habilitado.
En la siguiente tabla, se resumen las opciones de configuración de enmascaramiento de IP para los clústeres de GKE de Autopilot:
Configuración del clúster de Autopilot | Comportamiento resultante de la SNAT |
---|---|
El clúster incluye una |
GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a los destinos especificados en GKE cambia las direcciones IP del Pod de origen por las direcciones IP del nodo de origen para los paquetes enviados a destinos no especificados en |
El clúster no incluye una |
Se aplican la política predeterminada
|
Ejemplos de configuración
Expande las siguientes secciones para ver ejemplos de configuración y enmascaramiento de IP según el tipo de clúster.
Referencia de configuración avanzada
Cuando ip-masq-agent
se implementa de forma automática
En los clústeres de Autopilot, GKE siempre implementa un DaemonSet ip-masq-agent
.
En los clústeres estándar, GKE implementa un DaemonSet ip-masq-agent
cuando la marca --disable-default-snat
no está configurada y el clúster usa una de las siguientes combinaciones de configuración:
El clúster no usa GKE Dataplane V2 y la aplicación de la política de red está habilitada.
El clúster usa un rango de direcciones IP de Pod que no se ajusta a
10.0.0.0/8
.
Para que el DaemonSet ip-masq-agent
sea eficaz, también debes especificar la lista nonMasqueradeCIDRs
en el ConfigMap de ip-masq-agent
. Para obtener más información, consulta cómo configurar un agente de enmascaramiento de IP.
Cuando un DaemonSet ip-masq-agent
está presente en un clúster, GKE actualiza y concilia un Pod de entrega en cada nodo del clúster.
Destinos predeterminados sin enmascarar
Los destinos predeterminados sin enmascarar son los siguientes:
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
Los destinos predeterminados sin enmascarar se aplican a los clústeres con la siguiente configuración:
Tu clúster tiene un DaemonSet
ip-masq-agent
, pero no una listanonMasqueradeCIDRs
especificada en suip-masq-agent
ConfigMap Esto incluye el caso de que el clúster tenga un DaemonSetip-masq-agent
, pero no tenga un ConfigMapip-masq-agent
.Tu clúster no tiene un DaemonSet
ip-masq-agent
y la marca--disable-default-snat
no está configurada.
Los destinos predeterminados sin enmascarar no se aplican a los clústeres con la siguiente configuración:
Tu clúster tiene un DaemonSet
ip-masq-agent
y tienes una listanonMasqueradeCIDRs
personalizada especificada en el ConfigMapip-masq-agent
. Una listanonMasqueradeCIDRs
personalizada siempre anula los destinos predeterminados sin enmascarar cuando el clúster tiene un DaemonSetip-masq-agent
.Tu clúster no tiene un DaemonSet
ip-masq-agent
y la marca--disable-default-snat
está configurada. Consulta Efecto de la marca--disable-default-snat
para obtener más detalles sobre esta configuración.
Efecto de la marca --disable-default-snat
La marca --disable-default-snat
cambia el comportamiento predeterminado de GKE SNAT para que las direcciones IP de Pod de origen se conserven para los paquetes enviados a todos los destinos.
GKE implementa el comportamiento de SNAT predeterminado sin implementar ningún DaemonSet ip-masq-agent
en el clúster.
La marca --disable-default-snat
no tiene efecto cuando un clúster incluye un DaemonSet ip-masq-agent
:
- Debido a que los clústeres de Autopilot siempre incluyen un DaemonSet
ip-masq-agent
, la marca--disable-default-snat
no tiene efecto en los clústeres de Autopilot.
- Para clústeres de Standard: Si implementas un DaemonSet
ip-masq-agent
o siGKE implementa automáticamente un DaemonSetip-masq-agent
, la marca--disable-default-snat
no tiene significado para el clúster, incluso si--disable-default-snat
está configurado. Cuando un DaemonSetip-masq-agent
está presente en el clúster, los destinos sin enmascarar se especifican de forma explícita en una listanonMasqueradeCIDRs
del ConfigMapip-masq-agent
o desde el destinos de destino predeterminados sin enmascarar cuando no se define una listanonMasqueradeCIDRs
.
Para establecer la marca --disable-default-snat
, actualiza un clúster después de crearlo. Siempre que el clúster no tenga un DaemonSet ip-masq-agent
implementado, se inhabilita la SNAT predeterminada después de que el clúster haya reemplazado todos sus nodos, a veces horas después. Esto se debe a que GKE respeta los períodos de mantenimiento configurados cuando reemplaza los nodos en el clúster. Si no configuraste ningún período de mantenimiento, debes reiniciar de forma manual los nodos del clúster antes de que la marca --disable-default-snat
tenga efecto.
Enmascaramiento de vínculo local
El rango 169.254.0.0/16
se usa para las direcciones IP de vínculo local. El enmascaramiento de vínculos locales hace referencia al cambio de una dirección IP de Pod de origen a una dirección IP de nodo de origen para los paquetes enviados a los destinos de 169.254.0.0/16
.
Los clústeres de Autopilot siempre conservan las direcciones IP del Pod de origen para los paquetes enviados a destinos 169.254.0.0/16
.
De forma predeterminada, los clústeres estándar también conservan las direcciones IP del Pod de origen para los paquetes enviados a destinos 169.254.0.0/16
.
Para habilitar el enmascaramiento de IP de vínculo local en un clúster estándar, haz lo siguiente:
- Asegúrate de que el parámetro
masqLinkLocal
exista y esté configurado comoTrue
en el configMap deip-masq-agent
. Cuando el parámetromasqLinkLocal
no está presente en el configMap deip-masq-agent
, el valor predeterminado esFalse
. Para obtener orientación, consulta Verifica el ConfigMapip-masq-agent
, Crea el ConfigMapip-masq-agent
y Edita un ConfigMapip-masq-agent
existente. - Asegúrate de que tu clúster tenga implementado el DaemonSet de
ip-masq-agent
. Para obtener orientación, consulta Verifica el DaemonSetip-masq-agent
y, también, Implementa el DaemonSetip-masq-agent
.
Pods y contenedores de diagnóstico con hostNetwork: true
A menos que especifiques una dirección IP de origen personalizada para los paquetes, los Pods que se ejecutan con hostNetwork: true
y los contenedores de diagnóstico envían paquetes con fuentes que coinciden con la dirección IP del nodo. En los Pods que se ejecutan con hostNetwork: true
, GKE asigna al Pod la dirección IP del nodo. GKE no administra direcciones IP para contenedores de diagnóstico, incluidos los contenedores para depurar problemas de nodos mediante la caja de herramientas.
Los clústeres de Autopilot no admiten la ejecución de Pods con spec.hostNetwork: true
. Debido a que no se puede acceder a los nodos de un clúster de Autopilot mediante SSH, no puedes ejecutar contenedores de diagnóstico en ellos.
Preserva las fuentes de dirección IPv4 del Pod a los destinos de Internet
Si la configuración de enmascaramiento de IP de tu clúster es una de las siguientes opciones, GKE conserva las fuentes de direcciones IP del Pod para los paquetes enviados a todos los destinos, incluidos los de Internet:
- En clústeres estándar con un DaemonSet
ip-masq-agent
, si configurastenonMasqueradeCIDRs
en0.0.0.0
en el ConfigMapip-masq-agent
. - En clústeres estándar sin un DaemonSet
ip-masq-agent
, si configuraste la marca--disable-default-snat
.
- En los clústeres de Autopilot, si editas la EgressNATPolicy predeterminada, de modo que
spec.action
seaNoSNAT
yspec.destinations
contengaCidr: 0.0.0.0/0
.
En los clústeres públicos y privados, las fuentes IPv4 de Pod son direcciones IPv4 internas, lo que significa que no se pueden enrutar en Internet. Por lo tanto, cuando conservas las direcciones IPv4 del Pod de origen para los paquetes enviados a Internet, debes usar una técnica como una de las siguientes para enrutar paquetes después de que salgan de los nodos del clúster:
- Asegúrate de que la red de VPC tenga una ruta predeterminada con el siguiente salto de la puerta de enlace de Internet predeterminada y configura una puerta de enlace de Cloud NAT para proporcionar servicios NAT al menos a los rangos de direcciones IPv4 secundarios de la subred que usan los Pods el clúster. Para obtener más detalles, consulta Interacción de GKE en la descripción general de Cloud NAT.
- Configura la red de VPC para usar una ruta predeterminada personalizada cuyo siguiente salto sea una instancia de VM o un balanceador de cargas de red interno, en el que la VM o los backends del balanceador de cargas están configurados para enrutar paquetes a Internet en nombre de los Pods.
Cómo restablecer el comportamiento predeterminado de SNAT
Para restablecer al comportamiento de SNAT predeterminado cuando hay un DaemonSet ip-masq-agent
presente en un clúster, borra el ConfigMap de ip-masq-agent
asociado. El DaemonSet ip-masq-agent
restablece el comportamiento predeterminado de enmascaramiento de IP en los nodos que administra.
Para restablecer el comportamiento predeterminado de SNAT cuando un DaemonSet ip-masq-agent
no está presente en un clúster, deberás actualizar el grupo de nodos (asegúrate de que --disable-default-snat
no esté configurado en el clúster).
Efecto de la política de NAT de salida en los clústeres Autopilot
La política de NAT de salida de GKE te permite configurar el enmascaramiento de IP en clústeres Autopilot. Puedes usar la definición de recurso personalizado (CRD) de la política de salida de GKE para cambiar las direcciones IP de origen de los paquetes que se envían desde los Pods.
Por razones de seguridad o de agotamiento de direcciones IP, puedes enmascarar direcciones IP de Pods a un rango de direcciones IP de nodos para el tráfico saliente a redes locales. Por ejemplo, puedes usar un rango que no sea RFC-1918 en clústeres Autopilot y usar un rango RFC-1918 para los nodos. Sin embargo, si los Pods deben comunicarse con redes locales que también usen rangos que no son RFC-1918, las direcciones IP pueden superponerse. Para evitar la pérdida de tráfico, puedes configurar una política de NAT de salida a fin de no anunciar los rangos de Pods que no son RFC-1918 en redes locales. La política de NAT de salida enmascara el rango que no es RFC-1918 de los Pods para usar el rango RFC-1918 del nodo en su lugar. Asegúrate de que un rango de nodos no se superponga con ningún rango local, ya que puede causar un bucle de tráfico.
GKE aplica el comportamiento de enmascaramiento de IP para los clústeres Autopilot a través del siguiente proceso:
- GKE implementa el controlador de NAT de salida y el
ip-masq-agent
. - Creas la política de NAT de salida.
- El controlador de GKE traduce la política en el ConfigMap de
ip-masq-agent
. - El DaemonSet
ip-masq-agent
lee el ConfigMap y, luego, GKE aplica el comportamiento de enmascaramiento de IP.
Políticas generadas de forma automática
GKE admite las siguientes dos políticas de NAT de salida generadas automáticamente:
- Predeterminadas: Estas políticas se pueden editar.
- Administradas por GKE: Estas políticas son fijas y no se pueden editar.
Política predeterminada
GKE predefine un conjunto de rangos de direcciones IP predeterminados. Cuando se envían paquetes a estos destinos, tu clúster no enmascara las fuentes de las direcciones IP y conserva las direcciones IP del Pod de origen. Para cambiar estos rangos de direcciones IP predeterminados, consulta Edita e implementa la política de NAT de salida.
En el siguiente manifiesto, se describe una política de NAT de salida predeterminada:
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>
Los rangos CIDR son los mismos que los rangos de destino predeterminados sin enmascarar.
Política administrada por GKE
La política de NAT de salida de GKE reserva un rango estático de direcciones IP necesarias para preservar el funcionamiento del clúster. Este rango estático contiene los rangos de direcciones IP del Pod, del Service y del nodo del clúster y puede superponerse con la política predeterminada.
Puedes identificar esta política mediante un hash dinámico de 8 bytes (gke-{CLUSTER_SHORT_HASH}
) que GKE asigna. No puedes editar esta política.
En el siguiente manifiesto, se describe una política administrada por GKE llamada 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>
¿Qué sigue?
- Obtén más información sobre cómo usar la política de NAT de salida para configurar el enmascaramiento de IP en clústeres Autopilot.
- Lee la descripción general de redes de GKE.
- Obtén información sobre cómo configurar redes autorizadas.