Configurar el modo de reenvío del balanceo de carga

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

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

El modo de reenvío del balanceo de carga solo se puede configurar al crear un clúster.

Balanceo de carga SNAT

La traducción de direcciones de red de origen (SNAT) es el modo de reenvío predeterminado del balanceo de carga de Dataplane V2. Sin embargo, en el modo SNAT, la dirección IP del cliente no se conserva en los pods de backend. Cuando el paquete del cliente llega al nodo del balanceador de carga, se traduce y se reenvía al nodo de trabajo de destino con el pod backend. El pod de backend ve que la solicitud procede del nodo del balanceador de carga, en lugar de la ubicación del cliente. Como resultado, la respuesta se devuelve al nodo del balanceador de carga, se traduce de nuevo y se envía al cliente.

Flujo de paquetes para SNAT

Con el modo de reenvío SNAT para el balanceo de carga 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 carga y el altavoz de MetalLB que se ejecuta en ese nodo anuncia su dirección IP 172.16.20.16.

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

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

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

Flujo de paquetes del balanceo de carga de Dataplane V2 en modo SNAT

Balanceo de carga de DSR

El retorno directo del servidor (DSR) soluciona los problemas del balanceo de carga SNAT. En el modo DSR, el nodo del balanceador de carga usa opciones de IP para guardar la dirección de origen del cliente. El nodo de trabajador puede recuperar el paquete original y reenviarlo al pod de backend. El pod de backend puede ver que el paquete procede de la dirección IP del cliente en lugar de la dirección IP del nodo del balanceador de carga. Por lo tanto, el paquete de retorno vuelve directamente a la dirección IP del cliente en lugar de volver al nodo del balanceador de carga.

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

Flujo de paquetes de DSR

Con el modo de reenvío DSR para el balanceo de carga 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 al nodo del balanceador de carga y el altavoz 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 de trabajo y usa las opciones de IP para guardar la dirección IP y el puerto de origen del cliente original.

  • Dataplane V2 en el nodo de trabajador reenvía el paquete al pod 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 del modo DSR:

Flujo de paquetes del balanceo de carga de Dataplane V2 en modo SNAT

Habilitar el modo DSR

Para habilitar el modo DSR, añade el campo spec.clusterNetwork.forwardMode al archivo de configuración del clúster y asigna el valor dsr. Como se ha indicado anteriormente, el modo SNAT está habilitado de forma predeterminada. Puedes especificar el modo SNAT explícitamente configurando forwardMode como snat. El modo de reenvío del balanceo de carga de Dataplane V2 solo se puede configurar al crear el 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.