En esta página se explica cómo funciona el enmascaramiento de IP en Google Kubernetes Engine (GKE) y se ofrecen opciones de configuración para diferentes situaciones.
En esta página se da por hecho que conoces el enmascaramiento de IP en Kubernetes.
Enmascaramiento IP de GKE
GKE puede usar el enmascaramiento de IP para cambiar las direcciones IP de origen de los paquetes enviados desde los pods. Cuando se aplica el enmascaramiento de IP a un paquete emitido por un pod, GKE cambia la dirección IP de origen del paquete de la dirección IP del pod a la dirección IP del nodo subyacente. La suplantación de la dirección IP de origen de un paquete es útil cuando un destinatario está configurado para recibir paquetes solo de las direcciones IP de los nodos del clúster.
En los nodos de Linux, GKE configura reglas de iptables
.
GKE usa ip-masq-agent
DaemonSet
para configurar el plano de datos adecuado.
No se admite el enmascaramiento de IP con los grupos de nodos de Windows Server.
Enmascaramiento de IP en clústeres estándar
En los clústeres estándar, el comportamiento de enmascaramiento de IP del clúster se rige por tres factores:
- Si has implementado el
ip-masq-agent
DaemonSet en el clúster o si GKE lo ha implementado automáticamente. Para obtener información sobre los casos en los que GKE despliega automáticamente el DaemonSetip-masq-agent
, consulta Cuándo se despliega automáticamente elip-masq-agent
. - Si has creado una lista personalizada
nonMasqueradeCIDRs
en elip-masq-agent
configMap. - En los casos en los que no se haya desplegado ningún
ip-masq-agent
DaemonSet en el clúster, independientemente de si has creado 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 configuraciones de enmascaramiento de IP para clústeres de GKE estándar:
Configuración de clúster | Comportamiento de SNAT resultante |
---|---|
El DaemonSet |
GKE conserva las direcciones IP de los pods de origen de los paquetes enviados a los destinos especificados en la lista GKE cambia las direcciones IP de los pods de origen por las direcciones IP de los nodos de origen de los paquetes enviados a destinos que no se especifican en la lista |
El |
GKE conserva las direcciones IP de los pods de origen de los paquetes enviados a un conjunto de destinos predeterminados sin enmascaramiento. GKE cambia las direcciones IP de los pods de origen por las direcciones IP de los nodos de origen de los paquetes enviados a destinos que no son de enmascaramiento predeterminados. |
El |
GKE conserva las direcciones IP de los pods de origen de los paquetes enviados a un conjunto de destinos predeterminados sin enmascaramiento. GKE cambia las direcciones IP de los pods de origen por las direcciones IP de los nodos de origen de los paquetes enviados a destinos que no son de enmascaramiento predeterminados. |
El DaemonSet |
GKE conserva las direcciones IP de los pods de origen de los paquetes enviados a todos los destinos. Consulta Conservar la dirección IPv4 de los pods de origen a los destinos de Internet para ver consideraciones importantes sobre el enrutamiento cuando conserves las direcciones IPv4 de origen de los pods y necesites enrutar paquetes a Internet. |
Enmascaramiento de IP en clústeres de Autopilot
En los clústeres de Autopilot, GKE siempre despliega un ip-masq-agent
DaemonSet. Excepto en el caso de los paquetes enviados por pods a los intervalos de nodos, pods o servicios del clúster, puedes controlar el comportamiento de la suplantación de IP mediante un EgressNATPolicy
. Para usar un EgressNATPolicy
, tu clúster de Autopilot debe cumplir estos dos requisitos:
- El clúster debe usar la versión 1.23.4-gke.1600 de GKE o una posterior, o la versión 1.22.7-gke.1500 o una posterior.
- El clúster debe haberse creado con GKE Dataplane V2 habilitado.
En la siguiente tabla se resumen las configuraciones de enmascaramiento de IP para clústeres de GKE Autopilot:
Configuración de clústeres de Autopilot | Comportamiento de SNAT resultante |
---|---|
El clúster incluye un |
GKE conserva las direcciones IP de los pods de origen de los paquetes enviados a los destinos especificados en GKE cambia las direcciones IP de los pods de origen por las direcciones IP de los nodos de origen de los paquetes enviados a destinos no especificados en |
El clúster no incluye un |
Se aplican tanto la política
|
Ejemplos de configuración
Despliega las siguientes secciones para ver ejemplos de enmascaramiento de IP y de configuración según el tipo de clúster.
Referencia de configuración avanzada
Cuando la ip-masq-agent
se implementa automáticamente
En los clústeres del modo Autopilot, GKE siempre despliega un ip-masq-agent
DaemonSet.
En los clústeres estándar, GKE despliega un ip-masq-agent
DaemonSet cuando la marca --disable-default-snat
no está definida 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 intervalo de direcciones IP de pods que no se ajusta a
10.0.0.0/8
.
Para que el ip-masq-agent
DaemonSet sea eficaz, también debes especificar la lista nonMasqueradeCIDRs
en el ip-masq-agent
ConfigMap. Para obtener más información, consulta cómo configurar un agente de enmascaramiento de IP.
Cuando hay un ip-masq-agent
DaemonSet en un clúster, GKE actualiza y reconcilia un pod de servicio en cada nodo del clúster.
Destinos predeterminados sin enmascaramiento
Los destinos predeterminados sin enmascaramiento 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 pueden aplicar a clústeres con las siguientes configuraciones:
Tu clúster tiene un
ip-masq-agent
DaemonSet, pero no se ha especificado ningunanonMasqueradeCIDRs
lista en suip-masq-agent
ConfigMap. Esto incluye el caso en el que tu clúster tiene un DaemonSetip-masq-agent
, pero no tiene ningún ConfigMapip-masq-agent
.Tu clúster no tiene un
ip-masq-agent
DaemonSet, y la--disable-default-snat
marca no está definida.
Los destinos predeterminados sin enmascaramiento no se pueden aplicar a clústeres con las siguientes configuraciones:
Tu clúster tiene un
ip-masq-agent
DaemonSet y has especificado unanonMasqueradeCIDRs
lista personalizada en elip-masq-agent
ConfigMap. Una listanonMasqueradeCIDRs
personalizada siempre tiene prioridad sobre los destinos predeterminados que no son de suplantación de identidad cuando el clúster tiene unip-masq-agent
DaemonSet.Tu clúster no tiene un
ip-masq-agent
DaemonSet, y la--disable-default-snat
marca está definida. Consulta Efecto de la marca--disable-default-snat
para obtener más información sobre esta configuración.
Efecto de la bandera --disable-default-snat
La marca --disable-default-snat
cambia el comportamiento predeterminado de SNAT de GKE para que se conserven las direcciones IP de origen
de los pods en los paquetes enviados a todos los destinos.
GKE implementa el comportamiento predeterminado de SNAT sin desplegar ningún ip-masq-agent
DaemonSet en el clúster.
La marca --disable-default-snat
no tiene ningún efecto cuando un clúster incluye un DaemonSet ip-masq-agent
:
Como los clústeres de Autopilot siempre incluyen un
ip-masq-agent
DaemonSet, la marca--disable-default-snat
no tiene ningún efecto en los clústeres de Autopilot.En los clústeres estándar, si despliega un
ip-masq-agent
DaemonSet o si GKE despliega automáticamente unip-masq-agent
DaemonSet, la marca--disable-default-snat
no tiene ningún significado para el clúster, aunque esté definida.--disable-default-snat
Cuando hay unip-masq-agent
DaemonSet en el clúster, los destinos que no son de enmascaramiento se especifican de forma explícita en una listanonMasqueradeCIDRs
delip-masq-agent
ConfigMap o en los destinos predeterminados que no son de enmascaramiento cuando no se define ninguna listanonMasqueradeCIDRs
.
Puedes definir la marca --disable-default-snat
actualizando un clúster después de que se haya creado. Siempre que el clúster no tenga ningún ip-masq-agent
DaemonSet
implementado, la inhabilitación de la SNAT predeterminada se aplicará después de que el clúster haya sustituido todos sus nodos, lo que puede tardar varias horas. Esto se debe a que GKE respeta las ventanas de mantenimiento que hayas configurado al sustituir nodos del clúster. Si no has configurado ninguna ventana de mantenimiento, debes reiniciar manualmente los nodos del clúster para que la marca --disable-default-snat
tenga algún efecto.
Suplantación de identidad de enlace local
El intervalo 169.254.0.0/16
se usa para las direcciones IP locales con enlace. El enmascaramiento de enlace local consiste en cambiar la dirección IP de un pod de origen por la dirección IP de un nodo de origen para los paquetes enviados a los destinos 169.254.0.0/16
.
Los clústeres de Autopilot siempre conservan las direcciones IP de los pods de origen de los paquetes enviados a destinos 169.254.0.0/16
.
De forma predeterminada, los clústeres estándar también conservan las direcciones IP de los pods de origen de los paquetes enviados a 169.254.0.0/16
destinos.
Para habilitar el enmascaramiento de IP de enlace local en un clúster estándar, debes hacer lo siguiente:
- Asegúrate de que el parámetro
masqLinkLocal
exista y esté definido comoTrue
en el archivoip-masq-agent
configMap. Si el parámetromasqLinkLocal
no está presente en el configMapip-masq-agent
, el valor predeterminado esFalse
. Para obtener más información, consulta Comprobar elip-masq-agent
ConfigMap,crear elip-masq-agent
ConfigMap y editar unip-masq-agent
ConfigMap. - Asegúrate de que tu clúster tiene implementado el DaemonSet
ip-masq-agent
. Para obtener más información, consulta Comprobar elip-masq-agent
DaemonSet y Desplegar elip-masq-agent
DaemonSet.
Contenedores de diagnóstico y pods con hostNetwork: true
A menos que especifiques una dirección IP de origen personalizada para los paquetes, los pods que se ejecuten con hostNetwork: true
y los contenedores de diagnóstico enviarán paquetes con orígenes que coincidan con la dirección IP del nodo. En el caso de los pods que se ejecutan con hostNetwork: true
, GKE asigna al pod la dirección IP del nodo. GKE no gestiona las direcciones IP de los contenedores de diagnóstico, incluidos los contenedores para depurar problemas de nodos con Toolbox.
Los clústeres de Autopilot no admiten la ejecución de pods con
spec.hostNetwork: true
. Como no se puede acceder a los nodos de un clúster de Autopilot mediante SSH, no puedes ejecutar contenedores de diagnóstico en ellos.
Conservar las fuentes de direcciones IPv4 de los pods en los destinos de Internet
Si la configuración de enmascaramiento de IP de tu clúster es una de las siguientes, GKE conserva las fuentes de direcciones IP de los pods para los paquetes enviados a todos los destinos, incluidos los de Internet:
- En los clústeres estándar con un
ip-masq-agent
DaemonSet, si has definidononMasqueradeCIDRs
como0.0.0.0
en elip-masq-agent
ConfigMap. - En los clústeres estándar sin
ip-masq-agent
DaemonSet, si has definido la marca--disable-default-snat
. - En los clústeres Autopilot, si edita el valor predeterminado de
EgressNATPolicy
de forma que
spec.action
seaNoSNAT
yspec.destinations
contengaCidr: 0.0.0.0/0
.
Las fuentes IPv4 de los pods son direcciones IPv4 internas, lo que significa que no se pueden enrutar en Internet. Por lo tanto, cuando conserves las direcciones IPv4 de los pods de origen para los paquetes enviados a Internet, tendrás que usar una técnica como una de las siguientes para enrutar los paquetes después de que salgan de los nodos del clúster:
- Asegúrate de que tu red de VPC tenga una ruta predeterminada con el salto siguiente de la pasarela de Internet predeterminada y configura una pasarela Cloud NAT para proporcionar servicios NAT públicos a al menos los intervalos de direcciones IPv4 secundarias de la subred que usan los pods de tu clúster. Para obtener más información, consulta la sección Interacción con GKE del artículo sobre la descripción general de Cloud NAT.
- Configura tu red de VPC para que use una ruta predeterminada personalizada cuyo siguiente salto sea una instancia de VM o un balanceador de carga de red interno de transferencia directa, donde la VM o los back-ends del balanceador de carga se hayan configurado para enrutar paquetes a Internet en nombre de los pods.
Restaurar el comportamiento predeterminado de SNAT
Para restaurar el comportamiento predeterminado de SNAT cuando hay un ip-masq-agent
DaemonSet en un clúster, elimina el ip-masq-agent
ConfigMap asociado. El DaemonSet ip-masq-agent
restaura el comportamiento predeterminado de enmascaramiento de IP en los nodos que gestiona.
Para restaurar el comportamiento predeterminado de SNAT cuando no haya ningún DaemonSet ip-masq-agent
en un clúster, tendrás que actualizar el grupo de nodos (asegúrate de que --disable-default-snat
no esté definido en el clúster).
Efecto de la política NAT de salida en clústeres de Autopilot
La política de NAT de salida de GKE te permite configurar el enmascaramiento de IP en clústeres de Autopilot. Puedes usar la definición de recurso personalizado (CRD) de la política de NAT de salida de GKE para cambiar las direcciones IP de origen de los paquetes enviados desde los pods.
Por motivos de seguridad o de agotamiento de direcciones IP, puedes enmascarar las direcciones IP de los pods con el intervalo de direcciones IP de los nodos para el tráfico saliente a redes locales. Por ejemplo, puedes usar un intervalo que no sea RFC-1918 para los clústeres de Autopilot y un intervalo RFC-1918 para los nodos. Sin embargo, si los pods deben comunicarse con redes locales que también usan un intervalo que no es RFC 1918, las direcciones IP pueden superponerse. Para evitar la pérdida de tráfico, puedes configurar una política de NAT de salida para no anunciar los intervalos que no sean RFC-1918 de los pods a las redes on-premise. La política de NAT de salida enmascara el intervalo no RFC-1918 de los pods para usar el intervalo RFC-1918 del nodo. Asegúrate de que el intervalo de nodos no se solape con ningún intervalo local, ya que podría provocar un bucle de tráfico.
GKE aplica el comportamiento de enmascaramiento de IP en los clústeres de Autopilot mediante el siguiente proceso:
- GKE despliega el controlador de NAT de salida y el
ip-masq-agent
. - Crea la política de NAT de salida.
- El controlador de GKE traduce la política a
ip-masq-agent
ConfigMap. - El
ip-masq-agent
DaemonSet lee el ConfigMap y, a continuación, GKE aplica el comportamiento de enmascaramiento de IP.
Políticas generadas automáticamente
GKE admite las dos políticas de NAT de salida generadas automáticamente siguientes:
- Valor predeterminado: estas políticas se pueden editar.
- Gestionadas por GKE: estas políticas son fijas y no se pueden editar.
Política predeterminada
GKE predefine un conjunto de intervalos de direcciones IP predeterminados. Cuando se envían paquetes a estos destinos, tu clúster no enmascara las fuentes de direcciones IP y conserva las direcciones IP de los pods de origen. Para cambiar estos intervalos de direcciones IP predeterminados, consulta Editar e implementar la política de NAT de salida.
El siguiente manifiesto 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 intervalos de CIDR son los mismos que los intervalos de destino predeterminados sin enmascaramiento.
Gestionado por la política de GKE
La política de NAT de salida de GKE reserva un intervalo estático de direcciones IP necesarias para mantener el funcionamiento del clúster. Este intervalo estático contiene los intervalos de direcciones IP de los pods, los servicios y los nodos del clúster, y puede solaparse con la política predeterminada.
Puedes identificar esta política por un hash dinámico de 8 bytes (gke-{CLUSTER_SHORT_HASH}
) que asigna GKE. No puedes editar esta política.
El siguiente manifiesto describe una política gestionada 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>
Siguientes pasos
- Consulta cómo usar la política de NAT de salida para configurar el enmascaramiento de IP en clústeres de Autopilot.
- Consulta cómo configurar un agente de enmascaramiento de IP en clústeres estándar.
- Consulta la información general sobre la red de GKE.
- Aprende a configurar redes autorizadas.