Configurar el balanceo de cargas TCP/UDP


Descripción general

Puedes crear un balanceador de cargas TCP/UDP si creas un servicio con type: LoadBalancer en su especificación. En esta página, se explican los parámetros que puedes usar para configurar los servicios de LoadBalancer. Para obtener más información sobre los balanceadores de cargas internos, consulta Usa un balanceador de cargas de red de transferencia interno. Para obtener más información específica sobre los balanceadores de cargas externos, consulta cómo exponer aplicaciones mediante servicios.

Parámetros de servicio

Los siguientes parámetros son compatibles con los servicios de balanceadores de cargas de Google Kubernetes Engine (GKE).

Función Descripción general Campo de servicio Compatibilidad con la versión de GKE
Política de tráfico interno Habilita las restricciones de tráfico interno para enrutar el tráfico interno solo a los extremos dentro del nodo desde el que se originó el tráfico. Este parámetro no es compatible con clústeres que ejecutan GKE Dataplane V2. spec:internalTrafficPolicy GKE 1.22+
Política de tráfico externo Configura si el tráfico externo tiene balanceo de cargas en los nodos de GKE. spec:externalTrafficPolicy GKE 1.14+ (1.23.4-gke.400+ para el grupo de nodos de Windows)
Rangos de origen del balanceador de cargas Configura reglas de firewall opcionales en GKE y en la VPC para permitir solo ciertos rangos de origen. spec:loadBalancerSourceRanges Todas las versiones compatibles
IP del balanceador de cargas Especifica una IP para los balanceadores de cargas. spec:loadBalancerIP Todas las versiones compatibles
Todos los puertos La capacidad del balanceador de cargas de TCP/UDP para reenviar todos los puertos, en lugar de puertos específicos N/A Para los balanceadores de cargas de red de transferencia internos compatibles con la subdivisión. Para los balanceadores de cargas externos compatibles con todas las versiones.
Niveles de servicio de red Indica el nivel de red que debe usar un balanceador de cargas de Google Cloud. Los valores válidos son Standard y Premium (valor predeterminado). metadata:annotations:cloud.google.com/network-tier GKE 1.19 o superior

Política de tráfico externo

La externalTrafficPolicy es una opción de servicio estándar que define cómo y si el tráfico entrante a un nodo de GKE tiene balanceo de cargas. Cluster es la política predeterminada, pero a menudo se usa Local para conservar la IP de origen del tráfico que ingresa a un nodo del clúster. Local inhabilita de manera eficaz el balanceo de cargas en el nodo del clúster para que el tráfico que recibe un pod local vea la dirección IP de origen original.

externalTrafficPolicy es compatible con los servicios de LoadBalancer internos (a través del balanceador de cargas de TCP/UDP), pero el comportamiento del balanceo de cargas depende del origen del tráfico y de la política de tráfico configurada.

El tráfico proveniente del exterior del clúster a un balanceador de cargas TCP/UDP tendrá el siguiente comportamiento si hay al menos un pod en buen estado del servicio en el clúster:

  • Política Cluster: El tráfico se balanceará a cualquier nodo de GKE en buen estado en el clúster y, luego, kube-proxy lo enviará a un nodo con el pod.
  • Política Local: Los nodos que no tienen uno de los pods de backend aparecen como en mal estado para el balanceador de cargas TCP/UDP. El tráfico solo se enviará a uno de los nodos del clúster restantes que tenga el pod. Kube-proxy no vuelve a enrutar el tráfico y, en su lugar, se enviará directamente al pod local con su información de encabezado de IP intacta.

Si el tráfico a una IP de servicio LoadBalancer determinada proviene de un nodo de GKE dentro del clúster, existe un comportamiento de tráfico diferente. En la siguiente tabla, se resume el comportamiento del tráfico proveniente de un nodo o pod dentro del clúster destinado a un pod miembro de un servicio LoadBalancer:

externalTrafficPolicy ¿Pod miembro del servicio que se ejecuta en el mismo nodo donde se origina el tráfico? Comportamiento del tráfico
Clúster Los paquetes se entregan a cualquier pod miembro, ya sea en el nodo o en otro diferente.
Clúster No Los paquetes se entregan a cualquier pod miembro, que debe estar en un nodo diferente.
Local Los paquetes se entregan a cualquier pod miembro en el mismo nodo.
Local No

Kubernetes versión 1.14 y anteriores: los paquetes se descartan.

Kubernetes versión 1.15 y posterior: Los paquetes se entregan a cualquier pod miembro, que debe estar en un nodo diferente.

Rangos de origen del balanceador de cargas

El array spec: loadBalancerSourceRanges especifica uno o más rangos de direcciones IP internas o externas. loadBalancerSourceRanges restringe el tráfico a través del balanceador de cargas a las IP especificadas en este campo. Con esta configuración, kube-proxy crea las reglas de iptables correspondientes en los nodos de Kubernetes. GKE también crea de forma automática una regla de firewall en tu red de VPC. Si omites este campo, tu servicio acepta el tráfico de cualquier dirección IP (0.0.0.0/0).

Para obtener más información sobre la especificación del servicio, consulta la referencia de la API de servicio.

IP del balanceador de cargas

spec: loadBalancerIP habilita la opción de elegir una dirección IP específica para el balanceador de cargas. Otro balanceador de cargas de red de transferencia interno o Service no debe usar la dirección IP. Si se omite, se asigna una IP efímera. Para obtener más información, consulta Reserva una dirección IP interna estática.

Si la dirección IP en spec: loadBalancerIP es una IP de nivel Estándar, la anotación cloud.google.com/network-tier con valor Standard es obligatoria, ya que Google Kubernetes Engine debe crear una Regla de reenvío con el mismo nivel de red que la dirección IP especificada. Desde Google Kubernetes Engine 1.17 o una versión superior, el nivel de red predeterminado para crear reglas de reenvío es Premium, sin importar el nivel de red predeterminado del proyecto.

Todos los puertos

El controlador de GKE establece de forma automática el campo allPorts en la regla de reenvío si hay 5 o más puertos en la especificación del servicio en las versiones 1.20.6 y posteriores de GKE o en las versiones 1.21 y posteriores. Este comportamiento también está disponible en las versiones 1.18 y posteriores de GKE y en las versiones 1.19 y posteriores si habilitas la subdivisión del balanceador de cargas de red de transferencia interno en el clúster.

Si creas un balanceador de cargas de red de transferencia interno de forma manual, puedes elegir el grupo de instancias de los nodos de Google Kubernetes Engine como backend. Los servicios de Kubernetes de type: NodePort están disponibles a través del balanceador de cargas de red de transferencia interno.

Niveles de servicio de red

La anotación cloud.google.com/network-tier especifica qué nivel de servicio de red se debe usar para la regla de reenvío externa y la dirección IP en GKE versión 1.19 y versiones posteriores. Los valores válidos incluyen Estándar y Premium. El valor predeterminado es Premium.

Esta anotación solo es compatible con balanceadores de cargas externos.

¿Qué sigue?