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