Agente de enmascaramiento de IP

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 se usa para realizar 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. Cuando el enmascaramiento de IP se aplica a un paquete emitido por un Pod, GKE cambia la dirección de origen del paquete de la IP del Pod a la dirección IP del nodo subyacente. Enmascarar la fuente 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.

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 en GKE

GKE ejecuta el enmascaramiento de IP o SNAT si se cumplen las siguientes condiciones:

Para los clústeres en modo Standard:

Para clústeres en modo Autopilot:

  • La versión de GKE es 1.23.4-gke.1600 o posterior, o 1.22.7-gke.1500 o posterior.
  • El clúster se creó con GKE Dataplane V2 habilitado.
  • Se implementó la política NAT de salida.

En la siguiente tabla, se describen los resultados válidos de enmascaramiento en función del modo y la configuración del clúster:

Cluster mode Configuración del clúster Comportamiento de la SNAT
Estándar

GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a los destinos especificados en la lista de nonMasqueradeCIDRs.

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 nonMasqueradeCIDRs.

Estándar

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.

Estándar

GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a todos los destinos.

Para cambiar este comportamiento, asegúrate de que ip-masq-agent esté instalado y que especificaste una lista de nonMasqueradeCIDRs en el ConfigMap de ip-masq-agent.

Autopilot
  • El clúster está ejecutando la política NAT de salida, y
  • La versión del clúster es 1.23.4-gke.1600 o posterior, o 1.22.7-gke.1500 o posterior, y
  • Creaste el clúster con GKE Dataplane V2 habilitado.

GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a un conjunto de destinos predeterminados sin enmascarar.

GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a los rangos de IP internas de los Pods, Services y nodos del clúster. Puedes identificar estos destinos con el hash gke-{CLUSTER_SHORT_HASH}.

Para obtener más información, consulta Política de NAT de salida.

Casos de enmascaramiento

En la siguiente tabla, se resumen las posibles situaciones de SNAT en función del modo del clúster, el comportamiento esperado y la configuración del clúster de GKE correspondiente:

Cluster mode Situación Comportamiento de la SNAT Configuración del clúster
Estándar Enmascara a destinos fuera de 100.64.0.0/24 y 10.0.0.0/8
  • El clúster conserva las direcciones IP del Pod de origen (sin enmascarar) para los paquetes enviados a los destinos 100.64.0.0/24 y 10.0.0.0/8.
  • El clúster cambia las direcciones IP del Pod de origen (enmascaramiento) a direcciones IP de nodo para paquetes enviados a todos los demás destinos.
  • Implementa el DaemonSet ip-masq-agent:
  • Configura la lista nonMasqueradeCIDRs en el ConfigMap ip-masq-agent como [100.64.0.0/24,10.0.0.0/8].
  • Para obtener más información, consulta cómo crear el ConfigMap ip-masq-agent.

    Estándar Enmascaramiento a destinos fuera de los destinos predeterminados sin enmascarar.

    El clúster conserva las direcciones IP del Pod de origen (sin enmascarar) para los paquetes enviados a los destinos predeterminados sin enmascarar.

  • Crea el clúster sin la marca --disable-default-snat.
  • Asegúrate de que una o ambas de las siguientes afirmaciones sean verdaderas:
    • El DaemonSet ip-masq-agent no esté implementado, o
    • Asegúrate de que la clave nonMasqueradeCIDRs falte en el ConfigMap de ip-masq-agent.
  • Para obtener más información, consulta cómo borrar ip-masq-agent.

    Estándar No se enmascara a ningún destino en clústeres de modo Standard

    El clúster conserva las direcciones IP del Pod de origen (sin enmascarar) para los paquetes enviados a todos los destinos.

    Configura tu clúster como una de las siguientes opciones:
  • Opción 1:
    • Crea el clúster con la marca --disable-default-snat.
    • Asegúrate de que una o ambas sean verdaderas:
      • Asegúrate de que el DaemonSet ip-masq-agent no esté implementado, o
      • Asegúrate de que la clave nonMasqueradeCIDRs falte en el ConfigMap de ip-masq-agent.
  • Opción 2:
    • Implementa el DaemonSet ip-masq-agent:
    • Configura la lista nonMasqueradeCIDRs en el ConfigMap ip-masq-agent como [0.0.0.0/0].
  • Para obtener más información, consulta cómo configurar ip-masq-agent.

    Autopilot No se enmascara a ningún destino en clústeres de modo Autopilot

    El clúster conserva las direcciones IP del Pod de origen (sin enmascarar) para los paquetes enviados a todos los destinos sin afectar la comunicación del clúster entre nodos, Pods y Services.

  • Crea un clúster en las versiones 1.23.4-gke.1600 o posterior, o 1.22.7-gke.1500 o posterior, con GKE Dataplane V2 habilitado.
  • Quita la política predeterminada y todas las políticas creadas de forma personalizada.
  • Implementa una política de NAT de salida nueva y configura un CIDR con el rango 0.0.0.0/0.
  • Para obtener más información, consulta cómo implementar una nueva política de NAT de salida.

    Autopilot No se enmascara el tráfico saliente a entornos locales con rangos PUPI (IP pública de uso privado).

    Se puede acceder a la IP del Pod desde las redes locales y tiene reglas de firewall y enrutamiento configuradas para permitirlo. Puedes conservar la dirección IP de origen del tráfico que proviene de los Pods.

    Crea una nueva política de NAT de salida que contenga las direcciones IP públicas de uso privado (PUPI).

    Para obtener más información, consulta cómo implementar una nueva política de NAT de salida.

    Pods y contenedores de diagnóstico con hostNetwork: true

    El enmascaramiento de IP no se aplica a los paquetes enviados desde los siguientes contenedores. A menos que especifiques una dirección IP de origen personalizada para los paquetes, estos contenedores envían paquetes con fuentes establecidas en la dirección IP interna principal del nodo:

    Cuando se instala ip-masq-agent

    El DaemonSet ip-masq-agent se instala de forma automática en los nodos del clúster si creaste el clúster sin la marca --disable-default-snat y se cumplen una o más de las siguientes condiciones:

    • El clúster tiene habilitada la política de red.
    • El rango de direcciones IP del pod del clúster no coincide o no está dentro de 10.0.0.0/8.
    • El clúster tiene Workload Identity habilitado.

    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.

    Destinos predeterminados sin enmascarar

    En la siguiente tabla, se resumen los rangos de destino predeterminados sin enmascarar de GKE.

    Versiones de GKE Rangos de destino
    Versiones anteriores a 1.14 Varía según la versión y el tipo de imagen.
    Versiones iguales o posteriores a las siguientes:
  • 1.14.1-gke.14
  • 1.14.2-gke.1
  • 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 solo son relevantes cuando el clúster cumple con las siguientes condiciones:

    Para un clúster que cumple con las condiciones anteriores, GKE realiza las siguientes acciones:

    • El clúster conserva las direcciones IP del Pod de origen si el destino del paquete está en la lista de destinos predeterminados sin enmascarar.
    • El clúster cambia las direcciones IP de origen de la dirección IP del Pod a la dirección IP del nodo que ejecuta el Pod, si el destino del paquete no está en la lista de destinos predeterminados sin enmascarar.

    Si configuras el clúster en el que se implementa el DaemonSet ip-masq-agent y se especifica una lista nonMasqueradeCIDRs en el ConfigMap ip-masq-agent, los destinos predeterminados sin enmascarar ya no se aplican. Esto se debe a que los destinos sin enmascarar se especifican en la lista nonMasqueradeCIDRs en su lugar.

    Efecto de la marca --disable-default-snat

    En el siguiente ejemplo, se describe el propósito de la marca --disable-default-snat:

    • Cuando creas un clúster con la marca --disable-default-snat, GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a todos los destinos si se cumple una o ambas de las siguientes condiciones:

      • El DaemonSet ip-masq-agent no está implementado.
      • La lista nonMasqueradeCIDRs no se especifica en el ConfigMap ip-masq-agent (incluido el caso en el que el ConfigMap ip-masq-agent no se especifica en absoluto).

      Si tu clúster cumple con una o ambas de estas condiciones, GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a cualquier destino.

    • Si tu clúster tiene Pods que usan direcciones IP públicas usadas de forma privada, debes crear el clúster con la marca --disable-default-snat.

    • La marca --disable-default-snat no anula una configuración y un DaemonSet ip-masq-agent válidos. Si configuras el clúster de modo que se implemente el DaemonSet ip-masq-agent y se especifique una lista nonMasqueradeCIDRs en el ConfigMap ip-masq-agent, la marca --disable-default-snat ya no es relevante. Con este DaemonSet y su configuración, los destinos sin enmascarar se especifican de forma explícita en la lista nonMasqueradeCIDRs, por lo que el enmascaramiento es implícito para los paquetes enviados a destinos que no se incluyen en la lista nonMasqueradeCIDRs.

    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 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 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:

    1. GKE implementa el controlador de NAT de salida y el ip-masq-agent.
    2. Creas la política de NAT de salida.
    3. El controlador de GKE traduce la política en el ConfigMap de ip-masq-agent.
    4. 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 dos políticas de NAT de salida generadas de forma automática, predeterminadas y administradas por GKE. Las políticas predeterminadas se pueden editar. Las políticas de GKE administradas 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>
    

    Enmascaramiento a destinos de vínculos locales

    Los destinos de las direcciones IP de vínculo local se ajustan al rango de IP 169.254.0.0/16. De forma predeterminada, GKE conserva las direcciones IP del Pod de origen para los paquetes enviados a 169.254.0.0/16. Esta configuración predeterminada se aplica a todas las versiones de GKE, sin importar si se cumplen las siguientes condiciones:

    • Se implementó el DaemonSet ip-masq-agent.
    • La lista nonMasqueradeCIDRs se especifica en el ConfigMap de ip-masq-agent.
    • La marca --disable-default-snat se especifica cuando se crea el clúster.

    Si deseas configurar GKE para cambiar las direcciones IP del Pod de origen a direcciones IP de nodo cuando envías paquetes a 169.254.0.0/16, implementa el DaemonSet ip-masq-agent y configura masqLinkLocal como verdadero en el ConfigMap ip-masq-agent. Cuando masqLinkLocal no está configurado, GKE supone que masqLinkLocal es falso.

    ¿Qué sigue?