En este documento se describe cómo configurar una pasarela de NAT de salida para Google Distributed Cloud. Esta pasarela proporciona direcciones IP de SNAT persistentes y deterministas para el tráfico de salida de tus clústeres. Cuando ejecutas cargas de trabajo que tienen tráfico de usuarios de salida (fuera de tus clústeres), tus clientes quieren identificar este tráfico mediante algunas direcciones IP deterministas. Esto permite a tus clientes establecer medidas de seguridad basadas en IP, como políticas de listas de permitidos.
Esta página está dirigida a especialistas en redes que diseñan y desarrollan la red de su organización, así como instalan, configuran y ofrecen asistencia para los equipos de red. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas de usuario habituales de GKE.
La pasarela de NAT de salida se habilita mediante dos recursos personalizados. En un espacio de nombres determinado, el recurso personalizado NetworkGatewayGroup especifica las direcciones IP flotantes que se pueden configurar en la interfaz de red de un nodo que se elija para actuar como pasarela. El recurso personalizado EgressNatPolicy te permite especificar políticas de enrutamiento de salida para controlar el tráfico en la puerta de enlace de salida.
Si no configuras una pasarela NAT de salida o si el tráfico de salida no cumple las reglas de selección de tráfico, el tráfico de salida de un pod determinado a un destino fuera del clúster se enmascarará con la dirección IP del nodo en el que se esté ejecutando el pod. En este caso, no hay ninguna garantía de que todo el tráfico de salida de un pod concreto tenga la misma dirección IP de origen o se enmascare con la misma dirección IP de nodo.
La pasarela de NAT de salida es una oferta de redes avanzada basada en Dataplane V2.
Cómo funciona la pasarela de NAT de salida
La lógica de selección del tráfico de salida se basa en un selector de espacio de nombres, un selector de pods y un conjunto de intervalos de direcciones IP de destino en notación de bloque CIDR. Para ilustrar cómo funciona la pasarela de NAT de salida, vamos a analizar el flujo de un paquete de un pod a un consumidor externo y la respuesta correspondiente. Supongamos que la subred de nodos tiene direcciones IP en el bloque CIDR 192.168.1.0/24.
En el siguiente diagrama se muestra la arquitectura de red del tráfico de salida a través de un nodo de pasarela.
El flujo de paquetes a través de la pasarela de NAT de salida podría ser el siguiente:
El tráfico de salida se genera desde un pod con la dirección IP
10.10.10.1en un nodo con la dirección IP192.168.1.1.La dirección de destino del tráfico es un endpoint fuera del clúster.
Si el tráfico coincide con una regla de salida, el programa eBPF lo dirige al nodo de la pasarela en lugar de enmascararlo directamente con la dirección IP del nodo.
El nodo de la pasarela recibe el tráfico de salida.
El nodo de la pasarela enmascara la dirección IP de origen del tráfico de origen,
10.10.10.1, con la dirección IP de salida de origen,192.168.1.100, especificada en el recurso personalizadoEgressNATPolicy.El tráfico de retorno vuelve al nodo de la pasarela con el destino
192.168.1.100.El nodo de la pasarela hace coincidir el conntrack del tráfico de retorno con el del tráfico de salida original y reescribe la dirección IP de destino como
10.10.10.1.10.10.10.1se trata como tráfico dentro del clúster, se dirige al nodo original y se devuelve al pod original.
Configurar direcciones IP flotantes para el tráfico de nodos
El recurso personalizado NetworkGatewayGroup es un componente incluido de Google Distributed Cloud. El recurso gestiona una lista de una o más direcciones IP flotantes que se usan para el tráfico de salida de los nodos de tu clúster. Los nodos participantes se determinan mediante el espacio de nombres especificado. El grupo de pasarelas de red hace que una dirección IP flotante esté disponible en todo momento con el mejor esfuerzo posible. Si un nodo que usa una dirección IP flotante deja de funcionar, el operador de red avanzado mueve la dirección IP asignada al siguiente nodo disponible. Todo el tráfico de salida de la carga de trabajo que utilice esa dirección IP también se moverá.
Incluya los detalles del grupo de pasarela de red (anotación y especificación) en el archivo de configuración del clúster al crear un clúster 1.34.0-gke.566.
Crea el recurso personalizado NetworkGatewayGroup.
Para habilitar Network Gateway Group, defina el campo spec.clusterNetwork.advancedNetworking en true en el archivo de configuración del clúster al crear un clúster, tal como se muestra en el siguiente ejemplo:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
clusterNetwork:
...
advancedNetworking: true
...
Cuando cree el recurso personalizado NetworkGatewayGroup, defina su espacio de nombres como el espacio de nombres del clúster y especifique una lista de direcciones IP flotantes, tal como se muestra en el siguiente ejemplo:
kind: NetworkGatewayGroup
apiVersion: networking.gke.io/v1
metadata:
namespace: cluster-cluster1
name: default
spec:
floatingIPs:
- 192.168.1.100
- 192.168.1.101
- 192.168.1.102
El operador de redes avanzadas asigna las IPs flotantes a los nodos en función de los siguientes criterios:
- Subred de nodos: la dirección IP flotante debe coincidir con la subred del nodo.
- Rol del nodo (plano de control o trabajador): los nodos de trabajador tienen prioridad sobre los nodos del plano de control a la hora de asignar direcciones IP flotantes.
- Si un nodo tiene una dirección IP flotante, el operador prioriza las asignaciones a los nodos que aún no tienen una dirección IP flotante asignada.
La asignación de direcciones a nodos se encuentra en la sección status cuando obtienes el objeto NetworkGatewayGroup. Ten en cuenta que el objeto NetworkGatewayGroup está en el espacio de nombres kube-system. Si un nodo de pasarela no funciona, el operador de red avanzado asigna las direcciones IP flotantes al siguiente nodo disponible.
Verificar la configuración de la pasarela
Una vez que hayas aplicado los cambios en la configuración de la pasarela, puedes usar kubectl
para comprobar el estado de la pasarela y recuperar las direcciones IP flotantes
especificadas para la pasarela.
Usa el siguiente comando para comprobar el estado de
NetworkGatewayGroupy ver cómo se asignan las direcciones IP flotantes:kubectl -n kube-system get networkgatewaygroups.networking.gke.io default -o yamlLa respuesta de un clúster con dos nodos,
worker1yworker2, podría tener este aspecto:kind: NetworkGatewayGroup apiVersion: networking.gke.io/v1 metadata: namespace: kube-system name: default spec: floatingIPs: - 192.168.1.100 - 192.168.1.101 - 192.168.1.102 status: nodes: worker1: Up worker2: Up // Or Down floatingIPs: 192.168.1.100: worker1 192.168.1.101: worker2 192.168.1.102: worker1
Definir reglas de selección de tráfico
El recurso personalizado EgressNATPolicy especifica reglas de selección de tráfico y asigna una dirección IP determinista al tráfico de salida que abandona el clúster.
Cuando especifique el recurso personalizado, deberá incluir egress (con al menos una regla), destinationCIDRs y egressSourceIP.
Usa kubectl apply para crear el EgressNATPolicy recurso personalizado. En las siguientes secciones se proporcionan detalles y ejemplos para definir la especificación.
Especificar reglas de enrutamiento de salida
El recurso personalizado EgressNatPolicy te permite especificar las siguientes reglas para el tráfico de salida:
Debe especificar una o varias reglas de selección de tráfico de salida en la sección
egress.- Cada regla consta de un
podSelectory unnamespaceSelector. - La selección se basa en una etiqueta de espacio de nombres,
namespaceSelector.matchLabels.user, y una etiqueta de pod,podSelector.matchLabels.role. - Si un pod coincide con alguna de las reglas (la coincidencia usa una relación OR), se selecciona para el tráfico de salida.
- Cada regla consta de un
Especifique las direcciones de destino permitidas en la sección
destinationCIDRs.destinationCIDRstoma una lista de bloques CIDR.- Si el tráfico saliente de un pod tiene una dirección IP de destino que se encuentra dentro del intervalo de cualquiera de los bloques CIDR especificados, se selecciona para el tráfico de salida.
En el siguiente ejemplo, se permite el tráfico de salida de un pod cuando se cumplen los siguientes criterios:
- El pod está etiquetado con
role: frontend. - El pod está en un espacio de nombres etiquetado como
user: aliceouser: paul. - El pod se comunica con direcciones IP del bloque CIDR
8.8.8.0/24.
kind: EgressNATPolicy
apiVersion: networking.gke.io/v1
metadata:
name: egress
spec:
sources:
- namespaceSelector:
matchLabels:
user: alice
podSelector:
matchLabels:
role: frontend
- namespaceSelector:
matchLabels:
user: paul
podSelector:
matchLabels:
role: frontend
action: SNAT
destinations:
- cidr: 8.8.8.0/24
gatewayRef:
name: default
namespace: kube-system
Para obtener más información sobre el uso de etiquetas, consulta el artículo Etiquetas y selectores de la documentación de Kubernetes.
Obtener una dirección IP de origen para el tráfico de salida
El recurso personalizado EgressNATPolicy (política) usa los valores gatewayRef.name y gatewayRef.namespace para encontrar un objeto NetworkGatewayGroup (gateway).
La política usa una de las direcciones IP flotantes de la pasarela como dirección IP de origen del tráfico de salida. Si hay varias direcciones IP flotantes en la pasarela coincidente, la política utiliza la primera dirección IP de la lista floatingIPs e ignora las demás. En el caso de la pasarela de ejemplo, la primera dirección de la lista floatingIPs es 192.168.1.100. Si hay campos o valores no válidos en la sección gatewayRef, no se podrá aplicar el objeto de la política.
Varias políticas de salida y varios objetos de pasarela
Como se ha descrito en la sección anterior, cada objeto egressNATPolicy (política) usa la primera dirección IP de la lista floatingIPs del objeto de pasarela que coincida con gatewayRef.name y gatewayRef.namespace. Puede crear varias políticas y, si tiene intención de usar diferentes direcciones IP, debe crear varios objetos NetworkGatewayGroup y hacer referencia a ellos respectivamente.
Cada recurso NetworkGatewayGroup debe contener direcciones IP flotantes únicas.
Para configurar varios objetos EgressNATPolicy de forma que usen la misma dirección IP, utiliza el mismo gatewayRef.name y gatewayRef.namespace para ambos.
Para configurar varias políticas de salida y varios objetos de pasarela, sigue estos pasos:
Crea objetos de pasarela en el espacio de nombres
kube-systempara gestionar cada dirección IP flotante. Por lo general, cada política de salida debe tener un objeto de pasarela correspondiente para asegurarse de que se asigne la dirección IP correcta.A continuación, verifica cada objeto de pasarela con
kubectlpara obtener el estado de asignación de las direcciones IP flotantes:kind: NetworkGatewayGroup apiVersion: networking.gke.io/v1 metadata: namespace: kube-system name: gateway1 spec: floatingIPs: - 192.168.1.100 status: ... floatingIPs: 192.168.1.100: worker1 --- kind: NetworkGatewayGroup apiVersion: networking.gke.io/v1 metadata: namespace: kube-system name: gateway2 spec: floatingIPs: - 192.168.1.101 status: ... floatingIPs: 192.168.1.101: worker2 --- kind: NetworkGatewayGroup apiVersion: networking.gke.io/v1 metadata: namespace: kube-system name: gateway3 spec: floatingIPs: - 192.168.1.102 status: ... floatingIPs: 192.168.1.102: worker1Crea varias políticas que hagan referencia a los objetos de la pasarela, como
gateway1, que se ha creado en el paso anterior:kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: egress1 spec: ... gatewayRef: name: gateway1 namespace: kube-system --- kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: egress2 spec: ... gatewayRef: name: gateway2 namespace: kube-system --- kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: egress3 spec: ... gatewayRef: name: gateway3 namespace: kube-system
(Opcional) Especificar los nodos en los que se colocarán las direcciones IP flotantes
NetworkGatewayGroup recursos admiten selectores de nodos. Para especificar un subconjunto de nodos que se tienen en cuenta para alojar una dirección IP flotante, puedes añadir el selector de nodos al objeto NetworkGatewayGroup, tal como se muestra en el siguiente ejemplo:
kind: NetworkGatewayGroup
apiVersion: networking.gke.io/v1
metadata:
namespace: cluster-cluster1
name: default
spec:
floatingIPs:
- 192.168.1.100
- 192.168.1.101
- 192.168.1.102
nodeSelector:
node-type: "egressNat"
El selector de nodos coincide con los nodos que tienen la etiqueta especificada y solo se tienen en cuenta estos nodos para alojar una dirección IP flotante. Si especificas varios selectores, su lógica es aditiva, por lo que un nodo debe coincidir con cada etiqueta para que se tenga en cuenta a la hora de alojar una dirección IP flotante. Si no hay muchos nodos con etiquetas coincidentes, un selector de nodos puede reducir las cualidades de alta disponibilidad (HA) de la colocación de direcciones IP flotantes.
Conmutación por error rápida para una pasarela de NAT de salida de alta disponibilidad
En los clústeres de la versión 1.34 y posteriores, puedes configurar la pasarela de NAT de salida con una conmutación por error rápida. Si tienes varias direcciones IP flotantes y configuras la conmutación por error rápida, se proporciona una salida de alta disponibilidad. Esta función proporciona una mejor distribución de la carga del tráfico de salida y una conmutación por error más rápida para minimizar el tiempo de inactividad. En lugar de depender de un solo nodo de pasarela a la vez (activo-inactivo), el clúster distribuye el tráfico saliente entre varios nodos de pasarela y todas las direcciones IP flotantes configuradas en un recurso NetworkGatewayGroup.
Este modelo activo-activo tiene las siguientes ventajas principales:
Distribución de la carga: el tráfico saliente de diferentes endpoints de origen, como los pods, se distribuye entre todos los nodos de pasarela disponibles, lo que reduce la carga de cualquier nodo y aumenta el ancho de banda de salida total disponible.
Conmutación por error rápida: si falla un nodo de la pasarela de salida, el tráfico se redirige automáticamente a los nodos en buen estado restantes. El objetivo es que el tráfico cambie rápidamente a la réplica de seguridad. Aunque se interrumpan las conexiones del nodo que ha fallado, se establecerán nuevas conexiones inmediatamente a través de otras pasarelas, lo que minimizará el tiempo de inactividad.
Diferencias principales
Configurar la pasarela de NAT de salida para que se produzca una conmutación por error rápida cambia el funcionamiento de la pasarela de NAT de salida:
| Competencia | Activo-en espera (predeterminado) | Activo-activo (conmutación por error rápida) |
|---|---|---|
| Uso de IPs flotantes | El EgressNATPolicy solo usa la primera dirección IP flotante del NetworkGatewayGroup. |
Todas las direcciones IP flotantes que se indican en el
NetworkGatewayGroup distribuyen activamente el tráfico de salida. |
| Conmutación por error | Si el nodo de la pasarela falla, la misma dirección IP flotante se mueve a otro nodo, lo que puede provocar una interrupción del tráfico. | Si un nodo de la pasarela falla, el tráfico se redirige a otra dirección IP correcta de otro nodo. Las nuevas conexiones se enrutan inmediatamente a través de las pasarelas en buen estado, mientras que las conexiones con estado existentes en el nodo con errores se terminan. |
| Tráfico | Todo el tráfico de una política determinada pasa por un único nodo de pasarela. | El tráfico se distribuye entre varios nodos de puerta de enlace en función de un hash coherente del endpoint de origen, como un pod. |
Configurar la conmutación por error rápida
Para configurar la función, debe seguir dos pasos principales:
Especifica varias direcciones IP flotantes.
Configure el
NetworkGatewayGroupcon un grupo de al menos dos direcciones IP flotantes para disfrutar de las ventajas de la alta disponibilidad y la distribución de carga. Usar más direcciones IP flotantes mejora la fiabilidad de salida y el rendimiento.Aquí tienes un ejemplo de configuración:
apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: egress-gateways namespace: cluster-admin spec: nodeSelector: # Selects nodes that are designated as egress gateways node-role.kubernetes.io/egress: "" floatingIPs: - "192.168.1.100" - "192.168.1.101" - "192.168.1.102"Para habilitar la conmutación por error rápida, añade la anotación
networking.gke.io/egressnat-ha: "enable"al recurso personalizadoEgressNATPolicy:kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: egress annotations: networking.gke.io/egressnat-ha: "enable" spec: ...
Reglas de selección de tráfico de salida y políticas de red
La pasarela de NAT de salida es compatible con las APIs de políticas de red. Las políticas de red se evalúan primero y tienen prioridad sobre las reglas de selección de tráfico de la pasarela de NAT de salida. Por ejemplo, si el tráfico de salida activa una política de red que provoca que se descarte el paquete, las reglas de la puerta de enlace de salida no comprobarán el paquete. Solo cuando la política de red permita que el paquete salga, se evaluarán las reglas de selección de tráfico de salida para decidir cómo se gestiona el tráfico, ya sea mediante la pasarela NAT de salida o mediante el enmascaramiento directo con la dirección IP del nodo en el que se ejecuta el pod.
Limitaciones
Estas son las limitaciones actuales de la pasarela de NAT de salida:
La pasarela NAT de salida solo está habilitada para el modo IPv4.
Las direcciones IP de salida deben estar en el mismo dominio de capa 2 que las direcciones IP de los nodos.