Configura el modo de reenvío del balanceo de cargas

En este documento, se describen los dos modos de reenvío de Dataplane V2 para el balanceo de cargas y cómo habilitarlos para Google Distributed Cloud. Dataplane V2 admite dos modos de reenvío para el balanceo de cargas:

  • Traducción de direcciones de red de origen (SNAT)
  • Retorno directo del servidor (DSR)

El modo de reenvío para el balanceo de cargas solo se puede configurar cuando creas un clúster.

Balanceo de cargas de SNAT

La traducción de direcciones de red de origen (SNAT) es el modo de reenvío predeterminado para el balanceo de cargas de Dataplane V2. Sin embargo, en el modo SNAT, la dirección IP del cliente no se conserva para los Pods de backend. Cuando el paquete del cliente llega al nodo del balanceador de cargas, se traduce y se reenvía al nodo trabajador de destino con el Pod de backend. El Pod de backend ve que la solicitud proviene del nodo del balanceador de cargas, en lugar de la ubicación del cliente. Como resultado, la respuesta se devuelve al nodo del balanceador de cargas, se traduce de forma inversa y se envía de vuelta al cliente.

Flujo de paquetes para la SNAT

Con el modo de reenvío SNAT para el balanceo de cargas de Dataplane V2, este es el flujo de paquetes desde un cliente externo a un Pod de backend y viceversa:

  • El servicio de tipo LoadBalancer se asigna a un nodo de balanceador de cargas, y el anunciador de MetalLB que se ejecuta en ese nodo anuncia su dirección IP 172.16.20.16.

  • El plano de datos V2 traduce la dirección IP y el puerto de origen con SNAT a <LB_NODE_IP>:52000 y reenvía el paquete al nodo trabajador.

  • La respuesta se envía de vuelta al nodo del balanceador de cargas y se traduce de forma inversa la dirección de destino.

En el siguiente diagrama, se muestra el flujo de paquetes para el modo SNAT:

Flujo de paquetes para el balanceo de cargas de Dataplane V2 en modo SNAT

Balanceo de cargas de DSR

El retorno directo del servidor (DSR) supera los problemas con el balanceo de cargas de SNAT. En el modo DSR, el nodo del balanceador de cargas usa opciones de IP para guardar la dirección de origen del cliente. El nodo trabajador puede recuperar el paquete original y reenviarlo al Pod de backend. El Pod de backend puede ver que el paquete proviene de la dirección IP del cliente en lugar de la dirección IP del nodo del balanceador de cargas. Como resultado, el paquete de retorno vuelve directamente a la dirección IP del cliente en lugar de regresar al nodo del balanceador de cargas.

Este modo no solo resuelve el problema de visibilidad de la dirección IP del cliente, sino que también ahorra ancho de banda para el nodo del balanceador de cargas. El tráfico de retorno no tiene que pasar por el nodo del balanceador de cargas, y el nodo del balanceador de cargas ya no tiene que hacer un seguimiento de las conexiones. Este enfoque ahorra memoria y libera el puerto de reenvío. En el caso de las cargas de trabajo asimétricas, en las que el tráfico de descargas es mucho mayor que el tráfico de solicitudes, el flujo de DSR reduce el ancho de banda de manera significativa.

Flujo de paquetes para DSR

Con el modo de reenvío DSR para el balanceo de cargas de Dataplane V2, este es el flujo de paquetes desde un cliente externo hacia un Pod de backend y de regreso:

  • El servicio de tipo LoadBalancer se asigna al nodo del balanceador de cargas, y el anunciador de MetalLB que se ejecuta en ese nodo anuncia su dirección IP 172.16.20.16.

  • Dataplane V2 reenvía el paquete al nodo trabajador y usa las opciones de IP para guardar la dirección IP y el puerto de origen del cliente originales.

  • Dataplane V2 en el nodo trabajador reenvía el paquete al Pod de backend.

  • El Pod de backend recupera la dirección IP y el puerto de origen, y responde al cliente.

En el siguiente diagrama, se muestra el flujo de paquetes para el modo de DSR:

Flujo de paquetes para el balanceo de cargas de Dataplane V2 en modo SNAT

Cómo habilitar el modo DSR

Para habilitar el modo DSR, agrega el campo spec.clusterNetwork.forwardMode al archivo de configuración del clúster y configúralo como dsr. Como se mencionó anteriormente, el modo SNAT está habilitado de forma predeterminada. Puedes especificar el modo SNAT de forma explícita configurando forwardMode en snat. El modo de reenvío para el balanceo de cargas de Dataplane V2 solo se puede configurar en el momento de la creación del clúster.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: lb-mode
  namespace: cluster-lb-mode
  ...
spec:

  clusterNetwork:
    forwardMode: dsr # valid options are dsr or snat
    pods:
      cidrBlocks:
      - 192.168.0.0/16
    services:
      cidrBlocks:
      - 10.96.0.0/20
...

El valor de forwardMode no se puede modificar después de crear el clúster. Antes de crear el clúster, asegúrate de haber configurado la opción correcta para tus necesidades.