Configura un balanceador de cargas de red de proxy externo regional con backends de grupos de instancias de VM

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

Esta guía contiene instrucciones para configurar un balanceador de cargas de red del proxy externo regional con un backend de grupo de instancias administrado (MIG).

Antes de comenzar, lee la descripción general del balanceador de cargas de red del proxy externo.

En este ejemplo, usaremos el balanceador de cargas para distribuir el tráfico de TCP entre las VMs de backend en dos grupos de instancias zonales administrados en la región us-west1. En este ejemplo en particular, el servicio consiste en un conjunto de servidores Apache configurados para responder en el puerto 110. Muchos navegadores no admiten el puerto 110, por lo que, en la sección de prueba, se usa curl.

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

Configuración de ejemplo del balanceador de cargas de red de proxy externo con backends de grupo de instancias
Configuración de ejemplo del balanceador de cargas de red de proxy externo con backends de grupo de instancias

Un balanceador de cargas de red de proxy externo regional es un balanceador de cargas regional. Todos los componentes del balanceador de cargas (grupos 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 de un proyecto o tener todos las siguientes roles de IAM de Compute Engine.

Tarea Función requerida
Crear redes, subredes y componentes del balanceador de cargas Administrador de red de Compute (roles/compute.networkAdmin)
Agrega y quita reglas de firewall Administrador de seguridad de Compute (roles/compute.securityAdmin)
Crea instancias Administrador de instancias de Compute (roles/compute.instanceAdmin)

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

Configura la red y las subredes

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

Este ejemplo usa la siguiente red de VPC, región y subredes:

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

  • Subred para backends: una subred llamada backend-subnet en la región us-west1 que usa 10.1.2.0/24 en su rango de direcciones IP principal

  • Subred para proxies: una subred llamada proxy-only-subnet en la región us-west1 que usa 10.129.0.0/23 en su rango de direcciones IP principal

Crea la red y las subredes

Console

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

    Ir a las redes de VPC

  2. Haz clic en Crear red de VPC.

  3. En Nombre, ingresa lb-network.

  4. En la sección Subredes, establece Modo de creación de subred como Personalizado.

  5. Crea una subred para los backends del balanceador de cargas. En la sección Nueva subred, ingresa la siguiente información:

    • Nombre: backend-subnet
    • Región: us-west1
    • Rangos 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 en la región us-west1, 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=us-west1
    

Crea la subred de solo proxy

La subred de solo proxy proporciona un conjunto de direcciones IP que Google usa para ejecutar proxies de Envoy en tu nombre. Los proxies finalizan las conexiones del cliente y crean conexiones nuevas a los backends.

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

Console

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

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

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

    Ir a las redes de VPC

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

  3. Haz clic en Agregar subred.

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

  5. En Región, selecciona us-west1.

  6. Configura Propósito como Proxy administrado regional.

  7. En Rango de direcciones IP, ingresa 10.129.0.0/23.

  8. Haz clic en Agregar.

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=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

Crea reglas de firewall

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

  • fw-allow-ssh. Es una regla de entrada, aplicable a las instancias con balanceo de cargas, y que permite la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puedes elegir un rango de IP de origen más restrictivo para esta regla; por ejemplo, puedes especificar solo los rangos de IP del sistema desde el que inicias 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 en las que se realiza el balanceo de cargas, que permite todo el tráfico de TCP de los sistemas de verificación de estado de Google Cloud (en 130.211.0.0/22 y 35.191.0.0/16). En este ejemplo, se usa la etiqueta de destino allow-health-check.

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

Sin estas reglas de firewall, la regla predeterminada de denegación de entrada bloquea el tráfico entrante a las instancias de backend.

Las etiquetas de destino definen las instancias de backend. Sin las etiquetas de destino, las reglas de firewall se aplican a todas las instancias de backend en la red de VPC. Cuando crees las VM de backend, asegúrate de incluir las etiquetas de destino especificadas, como se muestra en Crea un grupo de instancias administrado.

Console

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

    Ir a Políticas de firewall

  2. Haz clic en Crear regla de firewall para crear la regla que permite conexiones SSH entrantes. Completa los siguientes campos:

    • Nombre: fw-allow-ssh
    • Red: lb-network
    • Dirección del tráfico: Entrada
    • Acción en caso de coincidencia: Permitir
    • Destinos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-ssh
    • Filtro de fuente: Rangos de IPv4
    • Rangos de IPv4 de origen: 0.0.0.0/0
    • Protocolos y puertos:
      • Elige Protocolos y puertos especificados.
      • Selecciona la casilla de verificación TCP y, luego, ingresa 22 para el número de puerto.
  3. Haz clic en Crear.

  4. Haz clic en Crear regla de firewall por segunda vez para crear la regla que permita las verificaciones de estado de Google Cloud:

    • Nombre: fw-allow-health-check
    • Red: lb-network
    • Dirección del tráfico: Entrada
    • Acción en caso de coincidencia: Permitir
    • Destinos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-health-check
    • Filtro de fuente: Rangos de IPv4
    • Rangos 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 de verificación TCP y, luego, ingresa 80 para el número de puerto.

      Como práctica recomendada, limita esta regla solo a los protocolos y puertos que coincidan con los que usa tu verificación de estado. Si usas tcp:80 en el protocolo y el puerto, Google Cloud puede usar HTTP en el puerto 80 a fin de contactar las VM, pero no puede usar HTTPS en el puerto 443 para comunicarse con ellas.

  5. Haz clic en Crear.

  6. Haz clic en Crear regla de firewall por tercera vez para crear la regla a fin de permitir que los servidores proxy del balanceador de cargas se conecten con los backends:

    • Nombre: fw-allow-proxy-only-subnet
    • Red: lb-network
    • Dirección del tráfico: Entrada
    • Acción en caso de coincidencia: Permitir
    • Destinos: Etiquetas de destino especificadas
    • Etiquetas de destino: allow-proxy-only-subnet
    • Filtro de fuente: Rangos de IPv4
    • Rangos de IPv4 de origen: 10.129.0.0/23
    • Protocolos y puertos:
      • Elige Protocolos y puertos especificados.
      • Selecciona la casilla de verificación TCP y, luego, ingresa 80 para el número de puerto.
  7. Haz clic en Crear.

gcloud

  1. Crea la regla de firewall fw-allow-ssh para permitir la conectividad SSH a las VM con la etiqueta de red allow-ssh. Cuando omites source-ranges, Google Cloud interpreta que la regla significa 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 las verificaciones de estado de Google Cloud. Este ejemplo permite todo el tráfico de TCP proveniente de la verificación de estado. Sin embargo, puedes configurar un conjunto más limitado de puertos según tus 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 fw-allow-proxy-only-subnet para permitir que los proxies de Envoy de la región se conecten a tus backends. Configura --source-ranges en los rangos 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
    

Reserva la dirección IP del balanceador de cargas

Reserva una dirección IP externa para el balanceador de cargas Este procedimiento crea la dirección IP del balanceador de cargas en el nivel Estándar. Los balanceadores de cargas de red del proxy externos regionales admiten los Niveles de servicio de red Premium y Estándar. Sin embargo, no se admite la creación de este balanceador de cargas en el nivel Premium en la consola de Google Cloud. En su lugar, usa gcloud o la API de REST.

Console

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

    Ir a Reserva una dirección estática

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

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

  4. Para Versión de la IP, selecciona IPv4. Las direcciones IPv6 no son compatibles.

  5. En Tipo, selecciona Regional.

  6. En Región, selecciona us-west1.

  7. Deja la opción Conectado a configurada en Ninguna. Después de crear el balanceador de cargas, esta dirección IP se adjunta a la regla de reenvío del balanceador de cargas.

  8. Haz clic en Reservar si deseas 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=us-west1 \
        --network-tier=STANDARD
    

    Reemplaza ADDRESS_NAME por el nombre que deseas darle a esta dirección.

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

    gcloud compute addresses describe ADDRESS_NAME
    

Cree un grupo de instancias administrado

En esta sección, se muestra cómo crear dos backends de grupos de instancias administrados (MIG) en la región us-west1 del balanceador de cargas. El MIG proporciona instancias de VM que ejecutan los servidores Apache de backend para este ejemplo. Por lo general, no se usa un balanceador de cargas de red externo de proxy regional para el tráfico HTTP, pero Apache es un software de uso común y es fácil de configurar para realizar pruebas.

Console

Crea una plantilla de instancias

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias.

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

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

  5. Haz clic en Opciones avanzadas.

  6. Haz clic en Herramientas de redes y configura los siguientes campos:

    1. En Etiquetas de red, ingresa 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 Administración. Ingresa 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.

Cree un grupo de instancias administrado

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

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias.

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

  4. En Nombre, ingresa mig-a.

  5. En Ubicación, selecciona Zona única.

  6. En Región, selecciona us-west1.

  7. En Zona, selecciona us-west1-a.

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

  9. Especifica la cantidad de instancias que quieres crear en el grupo.

    En este ejemplo, especifica las siguientes opciones en Ajuste de escala automático:

    • En Modo de ajuste de escala automático, selecciona Off:do not autoscale.
    • En Cantidad máxima de instancias, ingresa 2.
  10. En Asignación de puertos, haz clic en Agregar puerto.

    • En Nombre del puerto, ingresa tcp80.
    • En Número de puerto, ingresa 80.
  11. Haz clic en Crear.

  12. Para crear un segundo grupo de instancias administrado, repite los pasos de Crea un grupo de instancias administrado y usa la siguiente configuración:

    • Nombre: mig-c
    • Zona: us-west1-c

    No cambies los demás parámetros de configuración.

gcloud

En las instrucciones de Google Cloud CLI de esta guía, se supone que usas Cloud Shell o algún otro entorno con bash instalado.

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

    gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \
        --region=us-west1 \
        --network=lb-network \
        --subnet=backend-subnet \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --image-family=debian-10 \
        --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 administrado en la zona us-west1-a:

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

    gcloud compute instance-groups managed create mig-c \
        --zone=us-west1-c \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    

Configura el balanceador de cargas

Console

Inicia la configuración

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

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de red (TCP/UDP/SSL) y haz clic en Siguiente.
  4. En Proxy o transferencia, selecciona Balanceador de cargas de proxy y haz clic en Siguiente.
  5. En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
  6. En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo regionales y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. En Nombre, ingresa my-ext-tcp-lb.
  2. En Región, selecciona us-west1.
  3. En Red, selecciona lb-network.

Reserva una subred de solo proxy

  1. Haz clic en Reservar subred.
  2. En Nombre, ingresa proxy-only-subnet.
  3. En Rango de direcciones IP, ingresa 10.129.0.0/23.
  4. Haga clic en Agregar.

Configura los backends

  1. Haz clic en Configuración de backend.
  2. En Tipo de backend, selecciona Grupo de instancias.
  3. En Protocol, selecciona TCP.
  4. En Puerto con nombre, ingresa tcp80.
  5. Configura el primer backend:
    1. En Nuevo backend, selecciona el grupo de instancias mig-a.
    2. En Números de puerto, ingresa 80.
    3. Conserva los valores predeterminados restantes y haz clic en Listo.
  6. Configura el segundo backend:
    1. Haz clic en Agregar backend.
    2. En Nuevo backend, selecciona el grupo de instancias mig-c.
    3. En Números de puerto, ingresa 80.
    4. Conserva los valores predeterminados restantes y haz clic en Listo.
  7. Configura la verificación de estado:
    1. En Verificación de estado, seleccione Crear una verificación de estado.
    2. Establece el nombre de la verificación de estado como tcp-health-check.
    3. En Protocol, selecciona TCP.
    4. Configura el Puerto como 80.
  8. Conserva los valores predeterminados restantes y haz clic en Guardar.
  9. En la consola de Google Cloud, verifica que haya una marca de verificación junto a Configuración de backend. De lo contrario, verifica que hayas completado todos los pasos.

Configura el frontend

  1. Haz clic en Configuración de frontend.
  2. En Nombre, ingresa ext-reg-tcp-forwarding-rule.
  3. En Subred, selecciona backend-subnet.
  4. En Dirección IP, selecciona la dirección IP que se reservó antes: LB_IP_ADDRESS
  5. En Número de puerto, ingresa 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 de Apache. Para obtener más información, consulta Protocolo PROXY.
  7. Haz clic en Listo.
  8. En la consola de Google Cloud, verifica que haya una marca de verificación junto a Configuración de frontend. De lo contrario, verifica que hayas completado todos los pasos anteriores.

Revisa y finaliza

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

gcloud

  1. Crea una verificación de estado regional:

    gcloud compute health-checks create tcp tcp-health-check \
        --region=us-west1 \
        --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=us-west1 \
        --health-checks=tcp-health-check \
        --health-checks-region=us-west1
    
  3. Agrega grupos de instancias a tu servicio de backend:

    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=us-west1 \
        --instance-group=mig-a \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
     
    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=us-west1 \
        --instance-group=mig-c \
        --instance-group-zone=us-west1-c \
        --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=us-west1
    

    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 Protocolo PROXY.

  5. Crea la regla de reenvío. Para --ports, especifica un solo número de puerto, de 1 a 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=lb-network \
        --subnet=backend-subnet \
        --region=us-west1 \
        --target-tcp-proxy=ext-reg-tcp-target-proxy \
        --target-tcp-proxy-region=us-west1 \
        --address=ext-reg-tcp-ip-address \
        --ports=110
    

Prueba el balanceador de cargas

Ahora que ya configuraste el balanceador de cargas, puedes probar el envío de tráfico a la dirección IP del balanceador de cargas.

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

    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 cargas mediante la ejecución del siguiente comando. Reemplaza LB_IP_ADDRESS por la dirección IPv4 del balanceador de cargas:

    curl -m1 LB_IP_ADDRESS:9090
    

Opciones de configuración adicionales

En esta sección se expande el ejemplo de configuración para proporcionar opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en cualquier orden.

Habilita la afinidad de sesión

En la configuración de ejemplo, se crea un servicio de backend sin afinidad de sesión.

En estos procedimientos, se muestran cómo actualizar un servicio de backend para un balanceador de cargas de ejemplo que creaste antes a fin de que el servicio de backend use la afinidad de IP de cliente o la afinidad de cookie generada.

Cuando la afinidad de IP de cliente está habilitada, el balanceador de cargas dirige las solicitudes de un cliente en particular a la misma VM de backend según el hash que se generó en la dirección IP del cliente y la dirección IP del balanceador de cargas (la dirección IP interna de una regla de reenvío interna).

Para habilitar la afinidad de sesión de IP de cliente, completa los siguientes pasos.

Console

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

    Ir a Balanceo de cargas

  2. Haz clic en Backends.

  3. Haz clic en ext-reg-tcp-proxy-bs (el nombre del servicio de backend que creaste para este ejemplo) y, luego, en Editar.

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

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

  6. Haga clic en Update.

gcloud

Para actualizar el servicio de backend ext-reg-tcp-proxy-bs y especificar la afinidad de sesión de IP de 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=us-west1 \
    --session-affinity=CLIENT_IP

¿Qué sigue?