Configurar un balanceador de carga de red con proxy externo regional con backends de grupos de instancias de VM

Un balanceador de carga de red de proxy externo regional es un balanceador de carga de capa 4 regional basado en proxy que te permite ejecutar y escalar el tráfico de tu servicio TCP en una sola región con una dirección IP regional externa. Estos balanceadores de carga distribuyen el tráfico TCP externo de Internet a los backends de la misma región.

En esta guía se incluyen instrucciones para configurar un balanceador de carga de red con proxy externo regional con un backend de grupo de instancias gestionado (MIG).

Antes de empezar, consulta el resumen del balanceador de carga de red con proxy externo.

En este ejemplo, usaremos el balanceador de carga para distribuir el tráfico TCP entre las VMs de backend de dos grupos de instancias gestionados zonales de la región A. En este ejemplo, el servicio es un conjunto de servidores Apache configurados para responder en el puerto 110. Muchos navegadores no permiten el puerto 110, por lo que la sección de pruebas usa curl.

En este ejemplo, configurará la implementación que se muestra en el siguiente diagrama.

Ejemplo de configuración de un balanceador de carga de red de proxy externo con backends de grupos de instancias.
Ejemplo de configuración de un balanceador de carga de red de proxy externo con backends de grupos de instancias

Un balanceador de carga de red con proxy externo regional es un balanceador de carga regional. Todos los componentes del balanceador de carga (grupo de instancias de backend, servicio de backend, proxy de destino y regla de reenvío) deben estar en la misma región.

Permisos

Para seguir esta guía, debes poder crear instancias y modificar una red en un proyecto. Debes ser propietario o editor del proyecto, o bien tener todos los roles de gestión de identidades y accesos de Compute Engine que se indican a continuación.

Tarea Rol necesario
Crear redes, subredes y componentes de balanceador de carga Administrador de red de Compute (roles/compute.networkAdmin)
Añadir y eliminar reglas de cortafuegos Administrador de seguridad de Compute (roles/compute.securityAdmin)
Crear instancias Administrador de instancias de Compute (roles/compute.instanceAdmin)

Para obtener más información, consulta las siguientes guías:

Configurar la red y las subredes

Necesitas una red de VPC con dos subredes: una para los backends del balanceador de carga y otra para los proxies del balanceador de carga. Este balanceador de carga es regional. El tráfico de la red de VPC se dirige al balanceador de carga si la fuente del tráfico se encuentra en una subred de la misma región que el balanceador de carga.

En este ejemplo se usan la siguiente red VPC, región y subredes:

  • Red: una red de VPC en modo personalizado llamada lb-network

  • Subred para back-ends: una subred llamada backend-subnet en la región A que usa 10.1.2.0/24 para su intervalo de direcciones IP principal

  • Subred para proxies: una subred llamada proxy-only-subnet en la región B que usa 10.129.0.0/23 como intervalo de direcciones IP principal

Crear la red y las subredes

Consola

  1. En la Google Cloud consola, ve a la página Redes de VPC.

    Ir a redes de VPC

  2. Haz clic en Crear red VPC.

  3. En Nombre, escribe lb-network.

  4. En la sección Subredes, selecciona Personalizado en Modo de creación de subredes.

  5. Crea una subred para los back-ends del balanceador de carga. En la sección Nueva subred, introduce la siguiente información:

    • Nombre: backend-subnet
    • Región: REGION_A
    • Intervalo de direcciones IP: 10.1.2.0/24
  6. Haz clic en Listo.

  7. Haz clic en Crear.

gcloud

  1. Para crear la red de VPC personalizada, usa el comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Para crear una subred en la red lb-network de la región REGION_A, usa el comando gcloud compute networks subnets create:

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=REGION_A
    

Crear la subred de solo proxy

Una subred de solo proxy proporciona un conjunto de direcciones IP que Google usa para ejecutar proxies de Envoy en tu nombre. Los proxies terminan las conexiones del cliente y crean nuevas conexiones con los back-ends.

Todos los balanceadores de carga basados en Envoy de la región A de la red de VPC lb-network usan esta subred de solo proxy.

Consola

Si usas la consola de Google Cloud , puedes esperar y crear la subred de solo proxy más adelante en la página Balanceo de carga.

Si quieres crear la subred de solo proxy ahora, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Redes de VPC.

    Ir a redes de VPC

  2. Haz clic en el nombre de la red de VPC: lb-network.

  3. Haz clic en Añadir subred.

  4. En Nombre, escribe proxy-only-subnet.

  5. En Región, selecciona REGION_A.

  6. En Propósito, selecciona Proxy gestionado regional.

  7. En Intervalo de direcciones IP, introduce 10.129.0.0/23.

  8. Haz clic en Añadir.

gcloud

Para crear la subred de solo proxy, usa el comando gcloud compute networks subnets create:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION_A \
    --network=lb-network \
    --range=10.129.0.0/23

Crear reglas de cortafuegos

En este ejemplo, se crean las siguientes reglas de cortafuegos:

  • fw-allow-ssh. Una regla de entrada aplicable a las instancias que se van a balancear de carga que permita la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puede elegir un intervalo de IPs de origen más restrictivo para esta regla. Por ejemplo, puede especificar solo los intervalos de IPs del sistema desde el que inicia sesiones SSH. En este ejemplo se usa la etiqueta de destino allow-ssh.

  • fw-allow-health-check. Una regla de entrada, aplicable a las instancias con balanceo de carga, que permite todo el tráfico TCP de los sistemas de comprobación de estado (en 130.211.0.0/22 y 35.191.0.0/16). En este ejemplo, se usa la etiqueta de destino allow-health-check. Google Cloud

  • fw-allow-proxy-only-subnet. Una regla de entrada que permita que las conexiones de la subred de solo proxy lleguen a los backends.

Sin estas reglas de cortafuegos, la regla denegar predeterminada de entrada bloquea el tráfico entrante a las instancias de backend.

Las etiquetas de destino definen las instancias de backend. Si no se incluyen las etiquetas de destino, las reglas de cortafuegos se aplican a todas las instancias de backend de la red de VPC. Cuando cree las VMs de backend, asegúrese de incluir las etiquetas de destino especificadas, tal como se muestra en Crear un grupo de instancias gestionado.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de cortafuegos.

    Ir a Políticas de cortafuegos

  2. Haz clic en Crear regla de cortafuegos para crear la regla que permita las conexiones SSH entrantes. Rellena los siguientes campos:

    • Nombre: fw-allow-ssh
    • Red: lb-network
    • Sentido del tráfico: entrada
    • Acción tras coincidencia: Permitir
    • Objetivos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-ssh
    • Filtro de origen: Intervalos de IPv4
    • Intervalos de IPv4 de origen: 0.0.0.0/0
    • Protocolos y puertos:
      • Elige Protocolos y puertos especificados.
      • Selecciona la casilla TCP y, a continuación, introduce 22 como número de puerto.
  3. Haz clic en Crear.

  4. Vuelve a hacer clic en Crear regla de cortafuegos para crear la regla que permita las comprobaciones del estado deGoogle Cloud :

    • Nombre: fw-allow-health-check
    • Red: lb-network
    • Sentido del tráfico: entrada
    • Acción tras coincidencia: Permitir
    • Objetivos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-health-check
    • Filtro de origen: Intervalos de IPv4
    • Intervalos de IPv4 de origen: 130.211.0.0/22 y 35.191.0.0/16
    • Protocolos y puertos:

      • Elige Protocolos y puertos especificados.
      • Selecciona la casilla TCP y, a continuación, introduce 80 como número de puerto.

      Como práctica recomendada, limita esta regla a los protocolos y puertos que coincidan con los que usa tu comprobación del estado. Si usas tcp:80 para el protocolo y el puerto, Google Cloud puede usar HTTP en el puerto 80 para ponerse en contacto con tus VMs, pero no puede usar HTTPS en el puerto 443 para hacerlo.

  5. Haz clic en Crear.

  6. Haz clic en Crear regla de cortafuegos por tercera vez para crear la regla que permita que los servidores proxy del balanceador de carga se conecten a los backends:

    • Nombre: fw-allow-proxy-only-subnet
    • Red: lb-network
    • Sentido del tráfico: entrada
    • Acción tras coincidencia: Permitir
    • Objetivos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-proxy-only-subnet
    • Filtro de origen: Intervalos de IPv4
    • Intervalos de IPv4 de origen: 10.129.0.0/23
    • Protocolos y puertos:
      • Elige Protocolos y puertos especificados.
      • Seleccione la casilla TCP y, a continuación, introduzca 80 como número de puerto.
  7. Haz clic en Crear.

gcloud

  1. Crea la regla de cortafuegos fw-allow-ssh para permitir la conectividad SSH a las VMs con la etiqueta de red allow-ssh. Si omite source-ranges, Google Cloud interpreta que la regla se aplica a cualquier fuente.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. Crea la regla fw-allow-health-check para permitir Google Cloud las comprobaciones del estado. En este ejemplo, se permite todo el tráfico TCP de los verificadores de comprobación del estado. Sin embargo, puede configurar un conjunto de puertos más reducido para satisfacer sus necesidades.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=allow-health-check \
        --rules=tcp:80
    
  3. Crea la regla de fw-allow-proxy-only-subnet para permitir que los proxies de Envoy de la región se conecten a tus backends. Asigna --source-ranges a los intervalos asignados de tu subred de solo proxy. En este ejemplo, 10.129.0.0/23.

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.129.0.0/23 \
        --target-tags=allow-proxy-only-subnet \
        --rules=tcp:80
    

Reservar la dirección IP del balanceador de carga

Reserva una dirección IP estática para el balanceador de carga.

Consola

  1. En la Google Cloud consola, ve a la página Reservar una dirección estática.

    Ir a Reservar una dirección estática

  2. Elige un nombre para la nueva dirección.

  3. En Nivel de servicio de red, selecciona Estándar.

  4. En Versión de IP, selecciona IPv4. No se admiten direcciones IPv6.

  5. En Type (Tipo), selecciona Regional (Regional).

  6. En Región, selecciona REGION_A.

  7. Deje la opción Adjunto a configurada como Ninguno. Una vez que hayas creado el balanceador de carga, esta dirección IP se adjuntará a la regla de reenvío del balanceador de carga.

  8. Haz clic en Reservar para reservar la dirección IP.

gcloud

  1. Para reservar una dirección IP externa estática, usa el comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME  \
        --region=REGION_A \
        --network-tier=STANDARD
    

    Sustituye ADDRESS_NAME por el nombre que quieras asignar a esta dirección.

  2. Para ver el resultado, usa el comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME
    

Crear un grupo de instancias gestionado

En esta sección se muestra cómo crear dos backends de grupo de instancias administrado (MIG) en la región A para el balanceador de carga. El MIG proporciona instancias de VM que ejecutan los servidores Apache de backend de este ejemplo. Normalmente, un balanceador de carga de red de proxy externo regional no se usa para el tráfico HTTP, pero el software Apache se usa con frecuencia para las pruebas.

Consola

Crear una plantilla de instancia

  1. En la consola, ve a la página Plantillas de instancia. Google Cloud

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancia.

  3. En Nombre, escribe ext-reg-tcp-proxy-backend-template.

  4. Asegúrate de que el disco de arranque esté configurado con una imagen de Debian, como Debian GNU/Linux 12 (bookworm). En estas instrucciones se usan comandos que solo están disponibles en Debian, como apt-get.

  5. Haz clic en Advanced options (Opciones avanzadas).

  6. Haga clic en Redes y configure los siguientes campos:

    1. En el caso de las etiquetas de red, introduce allow-ssh, allow-health-check y allow-proxy-only-subnet.
    2. En Interfaces de red, selecciona lo siguiente:
      • Red: lb-network
      • Subred: backend-subnet
  7. Haz clic en Gestión. Introduce la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio:

     #! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://metadata.google.internal/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2
     
  8. Haz clic en Crear.

Crea un grupo de instancias gestionado

  1. En la consola, ve a la página Grupos de instancias. Google Cloud

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias.

  3. Selecciona Nuevo grupo de instancias gestionado (sin reconocimiento del estado). Para obtener más información, consulta Crear un MIG con discos con estado.

  4. En Nombre, escribe mig-a.

  5. En Ubicación, selecciona Una sola zona.

  6. En Región, selecciona REGION_A.

  7. En Zona, selecciona ZONE_A.

  8. En Plantilla de instancia, selecciona ext-reg-tcp-proxy-backend-template.

  9. Especifica el número de instancias que quieres crear en el grupo.

    En este ejemplo, especifica las siguientes opciones para Escalado automático:

    • En Modo de autoescalado, selecciona Off:do not autoscale.
    • En Número máximo de instancias, introduce 2.
  10. En Asignación de puertos, haz clic en Añadir puerto.

    • En Nombre de la portabilidad, introduce tcp80.
    • En Número de puerto, introduce 80.
  11. Haz clic en Crear.

  12. Para crear un segundo grupo de instancias gestionado, repite los pasos de la sección Crear un grupo de instancias gestionado y usa los siguientes ajustes:

    • Nombre: mig-b
    • Zona: ZONE_B

    Mantén el resto de los ajustes.

gcloud

Las instrucciones de la CLI de Google Cloud de esta guía presuponen que usas Cloud Shell u otro entorno con bash instalado.

  1. Para crear una plantilla de instancia de VM con un servidor HTTP, usa el comando gcloud compute instance-templates create:

    gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \
        --region=REGION_A \
        --network=lb-network \
        --subnet=backend-subnet \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
           apt-get update
           apt-get install apache2 -y
           a2ensite default-ssl
           a2enmod ssl
           vm_hostname="$(curl -H "Metadata-Flavor:Google" \
           http://metadata.google.internal/computeMetadata/v1/instance/name)"
           echo "Page served from: $vm_hostname" | \
           tee /var/www/html/index.html
           systemctl restart apache2'
    
  2. Crea un grupo de instancias gestionado en la zona ZONE_A:

    gcloud compute instance-groups managed create mig-a \
        --zone=ZONE_A \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    
  3. Crea un grupo de instancias gestionado en la zona ZONE_B:

    gcloud compute instance-groups managed create mig-b \
        --zone=ZONE_B \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    

Configurar el balanceador de carga

Consola

Iniciar la configuración

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en Crear balanceador de carga.
  3. En Tipo de balanceador de carga, selecciona Balanceador de carga de red (TCP/UDP/SSL) y haz clic en Siguiente.
  4. En Proxy o pasarela, selecciona Balanceador de carga de proxy y haz clic en Siguiente.
  5. En Público o interno, selecciona Público (externo) y haz clic en Siguiente.
  6. Para la implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo regionales y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. En Nombre, escribe my-ext-tcp-lb.
  2. En Región, selecciona REGION_A.
  3. En Red, selecciona lb-network.

Reservar una subred de solo proxy

  1. Haz clic en Reservar subred.
  2. En Nombre, escribe proxy-only-subnet.
  3. En Intervalo de direcciones IP, introduce 10.129.0.0/23.
  4. Haz clic en Añadir.

Configurar los backends

  1. Haz clic en Configuración de backend.
  2. En Tipo de backend, selecciona Grupo de instancias.
  3. En Protocolo, selecciona TCP.
  4. En Puerto con nombre, introduce tcp80.
  5. Configura el primer backend:
    1. En Nuevo backend, selecciona el grupo de instancias mig-a.
    2. En Números de puerto, introduce 80.
    3. Conserva el resto de los valores predeterminados y haz clic en Hecho.
  6. Configura el segundo backend:
    1. Haz clic en Añadir backend.
    2. En Nuevo backend, selecciona el grupo de instancias mig-b.
    3. En Números de puerto, introduce 80.
    4. Conserva el resto de los valores predeterminados y haz clic en Hecho.
  7. Configura la comprobación del estado:
    1. En Comprobación del estado, selecciona Crear una comprobación del estado.
    2. Asigna el nombre tcp-health-check a la comprobación del estado.
    3. En Protocolo, selecciona TCP.
    4. Define Puerto como 80.
  8. Mantenga el resto de los valores predeterminados y haga clic en Guardar.
  9. En la Google Cloud consola, comprueba que haya una marca de verificación junto a Configuración de backend. Si no es así, comprueba que has completado todos los pasos.

Configurar el frontend

  1. Haz clic en Configuración de frontend.
  2. En Nombre, escribe ext-reg-tcp-forwarding-rule.
  3. En Nivel de servicio de red, selecciona Estándar.
  4. En Dirección IP, selecciona la dirección IP reservada anteriormente: LB_IP_ADDRESS
  5. En Número de puerto, introduce 110. La regla de reenvío solo reenvía los paquetes con un puerto de destino coincidente.
  6. En Protocolo de proxy, selecciona Desactivado porque el protocolo PROXY no funciona con el software del servidor HTTP Apache. Para obtener más información, consulta el protocolo PROXY.
  7. Haz clic en Listo.
  8. En la Google Cloud consola, comprueba que haya una marca de verificación junto a Configuración de frontend. Si no es así, comprueba que has completado todos los pasos anteriores.

Revisar y finalizar

  1. Haz clic en Revisar y finalizar.
  2. Revisa los ajustes de configuración de tu balanceador de carga.
  3. Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usa para crear el balanceador de carga.
  4. Haz clic en Crear.

gcloud

  1. Crea una comprobación del estado regional:

    gcloud compute health-checks create tcp tcp-health-check \
        --region=REGION_A \
        --use-serving-port
    
  2. Crea un servicio de backend:

    gcloud compute backend-services create ext-reg-tcp-proxy-bs \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=TCP \
        --port-name=tcp80 \
        --region=REGION_A \
        --health-checks=tcp-health-check \
        --health-checks-region=REGION_A
    
  3. Añade grupos de instancias a tu servicio de backend:

    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-a \
        --instance-group-zone=ZONE_A \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
     
    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-b \
        --instance-group-zone=ZONE_B \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
    
  4. Crea un proxy TCP de destino:

    gcloud compute target-tcp-proxies create ext-reg-tcp-target-proxy \
        --backend-service=ext-reg-tcp-proxy-bs \
        --proxy-header=NONE \
        --region=REGION_A
    

    Si quieres activar el encabezado de proxy, configúralo como PROXY_V1 en lugar de NONE. En este ejemplo, no habilites el protocolo PROXY porque no funciona con el software del servidor HTTP de Apache. Para obtener más información, consulta el protocolo PROXY.

  5. Crea la regla de reenvío. En --ports, especifica un número de puerto único entre 1 y 65535. En este ejemplo se usa el puerto 110. La regla de reenvío solo reenvía los paquetes con un puerto de destino coincidente.

    gcloud compute forwarding-rules create ext-reg-tcp-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=STANDARD \
        --network=lb-network \
        --region=REGION_A \
        --target-tcp-proxy=ext-reg-tcp-target-proxy \
        --target-tcp-proxy-region=REGION_A \
        --address=LB_IP_ADDRESS \
        --ports=110
    

Probar el balanceador de carga

Ahora que ha configurado el balanceador de carga, puede probar a enviar tráfico a la dirección IP del balanceador de carga.

  1. Obtén la dirección IP del balanceador de carga.

    Para obtener la dirección IPv4, ejecuta el siguiente comando:

    gcloud compute addresses describe ADDRESS_NAME
    
  2. Envía tráfico a tu balanceador de carga ejecutando el siguiente comando. Sustituye LB_IP_ADDRESS por la dirección IPv4 de tu balanceador de carga.

    curl -m1 LB_IP_ADDRESS:9090
    

Opciones de configuración adicionales

En esta sección se amplía el ejemplo de configuración para ofrecer opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en el orden que prefieras.

Habilitar la afinidad de sesión

La configuración de ejemplo crea un servicio de backend sin afinidad de sesión.

En estos procedimientos se muestra cómo actualizar un servicio backend del balanceador de carga de ejemplo creado anteriormente para que use la afinidad de IP de cliente o la afinidad de cookies generada.

Cuando la afinidad de IP de cliente está habilitada, el balanceador de carga dirige las solicitudes de un cliente concreto a la misma VM de backend en función de un hash creado a partir de la dirección IP del cliente y la dirección IP del balanceador de carga (la dirección IP interna de una regla de reenvío interna).

Para habilitar la afinidad de sesión por IP de cliente, sigue estos pasos.

Consola

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haz clic en Back-ends.

  3. Haz clic en ext-reg-tcp-proxy-bs (el nombre del servicio de backend que has creado para este ejemplo) y, a continuación, en Editar.

  4. En la página Detalles del servicio backend, haz clic en Configuración avanzada.

  5. En Afinidad de sesión, selecciona IP de cliente.

  6. Haz clic en Actualizar.

gcloud

Para actualizar el servicio de backend ext-reg-tcp-proxy-bs y especificar la afinidad de sesión de la IP del cliente, usa el comando gcloud compute backend-services update ext-reg-tcp-proxy-bs:

gcloud compute backend-services update ext-reg-tcp-proxy-bs \
    --region=REGION_A \
    --session-affinity=CLIENT_IP

Siguientes pasos