Configura un balanceador de cargas de red del proxy interno regional con backends de NEG zonales

El balanceador de cargas de red del proxy interno 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 detrás de una dirección IP interna a la que solo pueden acceder los clientes de la misma red de VPC o los clientes conectados a tu red de VPC.

Esta guía contiene instrucciones para configurar un balanceador de cargas de red del proxy interno regional con un backend de grupos de extremos de red (NEG) zonales. Antes de comenzar:

Descripción general

En este ejemplo, usaremos el balanceador de cargas para distribuir el tráfico de TCP en las VMs de backend en dos NEG zonales en la región REGION_A. En este ejemplo en particular, el servicio consiste en un conjunto de servidores Apache configurados para responder en el puerto 80.

En este ejemplo, debes configurar la siguiente implementación:

Configuración de ejemplo del balanceador de cargas de red del proxy interno regional con backends de NEG zonales.
Configuración de ejemplo del balanceador de cargas de red del proxy interno regional con backends de NEG zonales.

El balanceador de cargas de red del proxy interno 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 todas las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear redes, subredes y componentes del balanceador de cargas Administrador de redes
Agrega y quita reglas de firewall Administrador de seguridad
Crea instancias Administrador de instancias de Compute

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. Los balanceadores de cargas de red del proxy internos regionales son regionales. 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. Es una red de VPC de modo personalizado con el nombre lb-network.

  • Subred para backends. Una subred llamada backend-subnet en la región REGION_A usa 10.1.2.0/24 en su rango de IP principal.

  • Subred para proxies. Una subred llamada proxy-only-subnet en la región REGION_A usa 10.129.0.0/23 en su rango de IP principal.

Crea la red y la subred para los backends

Console

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

    Ir a las redes de VPC

  2. Haga 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 en Personalizado.
    • En la sección Nueva subred, ingresa la siguiente información:
      • Nombre: backend-subnet
      • Región: REGION_A
      • Rangos de direcciones IP: 10.1.2.0/24
    • Haz clic en Listo.
  5. Haz clic en Crear.

gcloud

  1. Crea la red de VPC personalizada con el comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crea una subred en la red lb-network en la región REGION_A con 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
    

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 REGION_A 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 compartida: lb-network.

  3. Haz clic en Agregar subred.

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

  5. En Región, selecciona REGION_A.

  6. Configura Propósito como Proxy administrado regional.

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

  8. Haga clic en Add.

gcloud

Crea la subred de solo proxy con 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

Crea reglas de firewall

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

  • fw-allow-health-check: Una regla de entrada, aplicable a las instancias de Google Cloud cuyas cargas se balancean, que permite el tráfico del balanceador de cargas y los sistemas de verificación de estado de Google Cloud (130.211.0.0/22 y 35.191.0.0/16) En este ejemplo, se usa la etiqueta de destino allow-health-check para identificar las VM de backend a las que se debe aplicar.
  • fw-allow-ssh: una regla de entrada que permita 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 los rangos de IP de los sistemas desde los que planeas iniciar sesiones SSH. En este ejemplo, se usa la etiqueta de destino allow-ssh para identificar las VM a las que se debe aplicar.
  • fw-allow-proxy-only-subnet: Crea una regla de firewall de permiso de entrada para la subred de solo proxy a fin de permitir que el balanceador de cargas se comunique con instancias de backend en el puerto TCP 80. En este ejemplo, se usa la etiqueta de destino allow-proxy-only-subnet para identificar las VM de backend a las que se debe aplicar.

Consola

  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:

    1. Ingresa un Nombre de fw-allow-health-check.
    2. En Red selecciona lb-network.
    3. En Destinos, selecciona Etiquetas de destino especificadas.
    4. Propaga el campo Etiquetas de destino con allow-health-check.
    5. Configura Filtro de fuente como Rangos de IPv4.
    6. Establece Rangos de IPv4 de origen en 130.211.0.0/2235.191.0.0/16.
    7. En Protocolos y puertos, selecciona Protocolos y puertos especificados.
    8. Selecciona la casilla de verificación TCP y, luego, ingresa 80 para los números de puerto.
    9. Haz clic en Crear.
  3. Vuelve a hacer clic en Crear regla de firewall para crear la regla que permita conexiones SSH entrantes:

    • Nombre: fw-allow-ssh
    • Red: lb-network
    • Prioridad: 1000
    • Dirección del tráfico: entrada
    • Acción si hay coincidencia: permitir
    • Objetivos: 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 y escribe tcp:22
  4. Haz clic en Crear.

  5. Haz clic en Crear regla de firewall de nuevo para crear la regla que permite conexiones entrantes desde la subred de solo proxy a los backends de Google Cloud:

    • Nombre: fw-allow-proxy-only-subnet
    • Red: lb-network
    • Prioridad: 1000
    • Dirección del tráfico: entrada
    • Acción si hay coincidencia: permitir
    • Objetivos: 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 y escribe tcp:80
  6. Haz clic en Crear.

gcloud

  1. Crea la regla fw-allow-health-check para permitir que las verificaciones de estado de Google Cloud lleguen a las instancias de backend en un puerto TCP 80:

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80
    
  2. 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
    
  3. Crea una regla de firewall de permiso de entrada para la subred de solo proxy a fin de permitir que el balanceador de cargas se comunique con instancias de backend en el puerto TCP 80:

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

Reserva la dirección IP del balanceador de cargas

Si deseas reservar una dirección IP interna estática para tu balanceador de cargas, consulta Reserva una dirección IPv4 o IPv6 interna estática nueva.

Configura el NEG zonal

Configura un NEG zonal (con extremos de tipo GCE_VM_IP_PORT) en la región REGION_A. Primero, crea las VM. Luego, crea un NEG zonal y agrega los extremos de red de las VM al NEG.

Crea las VM

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haga clic en Crear instancia.

  3. Ingresa vm-a1 en Nombre.

  4. En Región, selecciona REGION_A.

  5. Para la Zona, consulta ZONE_A1.

  6. En la sección Disco de arranque, asegúrate de que el sistema operativo Debian y la versión 10 (buster) estén seleccionados como opciones de disco de arranque. Haz clic en Elegir para cambiar la imagen si es necesario.

  7. Haz clic en Opciones avanzadas.

  8. 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
  9. 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
    
  10. Haz clic en Crear.

  11. Repite los siguientes pasos para crear 3 VMs más con las siguientes combinaciones de nombre y zona:

    • Nombre: vm-a2, zona: ZONE_A1
    • Nombre: vm-c1, zona: ZONE_A2
    • Nombre: vm-c2, zona: ZONE_A2

gcloud

A fin de crear las VM, ejecuta el siguiente comando dos veces, con estas combinaciones para VM_NAME y ZONE. El contenido de la secuencia de comandos es idéntico para ambas VM.

  • VM_NAME: vm-a1 y ZONE: ZONE_A1
  • VM_NAME: vm-a2 y ZONE: ZONE_A1
  • VM_NAME: vm-c1 y ZONE: ZONE_A2
  • VM_NAME: vm-c2 y ZONE: ZONE_A2

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --subnet=backend-subnet \
        --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'
    

Crea los NEG zonales

Consola

Para crear un grupo de extremos de red por zonas, sigue estos pasos:

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

    Ir a Grupos de extremos de red

  2. Haz clic en Crear un grupo de extremos de red.

  3. En Nombre, ingresa zonal-neg-a.

  4. En Tipo de grupo de extremos de red, selecciona Grupo de extremos de red (zonal).

  5. En Red, selecciona lb-network.

  6. En Subred, selecciona backend-subnet.

  7. En Zona, selecciona ZONE_A1.

  8. Ingresa el Puerto predeterminado: 80.

  9. Haz clic en Crear.

  10. Repite todos los pasos de esta sección para crear un segundo NEG zonal con los siguientes cambios en la configuración:

    • Nombre: zonal-neg-c
    • Zona: ZONE_A2

Agrega extremos a los NEG por zonas:

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

    Ir a Grupos de extremos de red

  2. Haz clic en el Nombre del grupo de extremos de red que se creó en el paso anterior (por ejemplo, zonal-neg-a). Verás la página Detalles del grupo de extremos de red.

  3. En la sección Extremos de red de este grupo, haz clic en Agregar extremo de red. Verás la página Agregar extremo de red.

  4. Selecciona una instancia de VM (por ejemplo, vm-a1). En la sección Interfaz de red, se muestra el nombre, la zona y la subred de la VM.

    1. Ingresa la dirección IP del extremo de red nuevo. Puedes hacer clic en Verificar las direcciones IP principales y el rango de alias de IP en nic0 para ver la dirección IP.
    2. En Tipo de puerto, selecciona Predeterminado, que usa el puerto predeterminado 80 para todos los extremos del grupo de extremos de red. Esto es suficiente para nuestro ejemplo, ya que el servidor Apache entrega solicitudes en el puerto 80.
    3. Haz clic en Crear.
  5. Haz clic de nuevo en Agregar extremo de red. Selecciona la segunda instancia de VM, vm-a2, y repite estos pasos para agregar sus extremos a zonal-neg-a.

  6. Repite todos los pasos de esta sección para agregar extremos de vm-c1 y vm-c2 a zonal-neg-c.

gcloud

  1. Crea un NEG zonal en la zona ZONE_A1 con extremos GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-a \
       --network-endpoint-type=GCE_VM_IP_PORT \
       --zone=ZONE_A1 \
       --network=lb-network \
       --subnet=backend-subnet
    

    Puedes especificar --default-port mientras creas el NEG o especificar un número de puerto para cada extremo, como se muestra en el siguiente paso.

  2. Agrega extremos al NEG zonal.

    gcloud compute network-endpoint-groups update zonal-neg-a \
        --zone=ZONE_A1 \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. Crea un NEG zonal en la zona ZONE_A2 con extremos GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=ZONE_A2 \
        --network=lb-network \
        --subnet=backend-subnet
    

    Puedes especificar --default-port mientras creas el NEG o especificar un número de puerto para cada extremo, como se muestra en el siguiente paso.

  4. Agrega extremos al NEG zonal.

    gcloud compute network-endpoint-groups update zonal-neg-c \
        --zone=ZONE_A2 \
        --add-endpoint='instance=vm-c1,port=80' \
        --add-endpoint='instance=vm-c2,port=80'
    

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 Interno y haz clic en Siguiente.
  6. En Implementación entre regiones o de una sola región, selecciona Ideal para cargas de trabajo regionales y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

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

Reserva una subred de solo proxy

Sigue estos pasos para reservar 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.

Configuración de backend

  1. Haga clic en Configuración de backend.
  2. En Tipo de backend, selecciona Grupo de extremos de red zonal.
  3. En Protocol, selecciona TCP.
  4. Configura el primer backend:
    1. En Backend nuevo, selecciona NEG zonal zonal-neg-a.
    2. Conserva los valores predeterminados restantes y haz clic en Listo.
  5. Configura el segundo backend:
    1. Haga clic en Agregar backend.
    2. En Nuevo backend, selecciona el grupo de instancias zonal-neg-c.
    3. Conserva los valores predeterminados restantes y haz clic en Listo.
  6. Configura la verificación de estado:
    1. En Verificación de estado, selecciona Crear una verificación de estado.
    2. Establece el campo Nombre de la verificación de estado en tcp-health-check.
    3. En Protocol, selecciona TCP.
    4. En Puerto, ingresa 80.
  7. Conserva los valores predeterminados restantes y haz clic en Guardar.
  8. 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.

Configuración de frontend

  1. Haga clic en Configuración de frontend.
  2. En Nombre, ingresa int-tcp-forwarding-rule.
  3. En Subred, selecciona backend-subnet.
  4. En Dirección IP, selecciona int-tcp-ip-address.
  5. En Número de puerto, ingresa 9090. La regla de reenvío solo reenvía los paquetes con un puerto de destino coincidente.
  6. En este ejemplo, no habilites el Protocolo de proxy porque no funciona con el software del servidor HTTP de Apache. Para obtener más información, consulta Protocolo de proxy.
  7. Haga 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. Vuelve a verificar la configuración.
  3. Haga clic en Crear.

gcloud

  1. Crea una verificación de estado regional para los backends.

    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 internal-tcp-proxy-bs \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --protocol=TCP \
       --region=REGION_A \
       --health-checks=tcp-health-check \
       --health-checks-region=REGION_A
    
  3. Agrega el NEG zonal de la zona ZONE_A1 al servicio de backend.

    gcloud compute backend-services add-backend internal-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-a \
       --network-endpoint-group-zone=ZONE_A1 \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  4. Agrega el NEG zonal de la zona ZONE_A2 al servicio de backend.

    gcloud compute backend-services add-backend internal-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-c \
       --network-endpoint-group-zone=ZONE_A2 \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  5. Crea el proxy TCP de destino.

    gcloud compute target-tcp-proxies create int-tcp-target-proxy \
       --backend-service=internal-tcp-proxy-bs \
       --region=REGION_A
    
  6. 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 9090. La regla de reenvío solo reenvía los paquetes con un puerto de destino coincidente.

    gcloud compute forwarding-rules create int-tcp-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=int-tcp-ip-address \
      --ports=9090 \
      --region=REGION_A \
      --target-tcp-proxy=int-tcp-target-proxy \
      --target-tcp-proxy-region=REGION_A
    

Prueba el balanceador de cargas

Para probar el balanceador de cargas, crea una VM de cliente en la misma región que el balanceador de cargas. Luego, envía tráfico del cliente al balanceador de cargas.

Crea una VM de cliente

Crea una VM de cliente (client-vm) en la misma región que el balanceador de cargas.

Consola

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en Crear instancia.

  3. Establece el Nombre como client-vm.

  4. Establece la Zona en ZONE_A1.

  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.
    2. En Interfaces de red, selecciona lo siguiente:
      • Red: lb-network
      • Subred: backend-subnet
  7. Haz clic en Crear.

gcloud

La VM de cliente debe estar en la misma red de VPC y región que el balanceador de cargas. No es necesario que esté en la misma subred o zona. El cliente usa la misma subred que las VM de backend.

gcloud compute instances create client-vm \
    --zone=ZONE_A1 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=backend-subnet

Envía tráfico al 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. Usa SSH para conectarte a la instancia de cliente.

    gcloud compute ssh client-vm \
      --zone=ZONE_A1
    
  2. Verifica que el balanceador de cargas entregue los nombres de host del backend como se esperaba.

    1. Usa el comando compute addresses describe para ver la dirección IP del balanceador de cargas:

      gcloud compute addresses describe int-tcp-ip-address \
        --region=REGION_A
      

      Anota la dirección IP.

    2. Envía tráfico al balanceador de cargas. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas.

      curl IP_ADDRESS:9090
      

¿Qué sigue?