Configura un balanceador de cargas de proxy TCP regional con backends de NEG zonales

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

El balanceador de cargas de proxy TCP regional interno 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 interno de proxy TCP con un backend de grupo de extremos de red (NEG) zonal. 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 us-west1. 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 proxy TCP regional interno con backends de NEG zonales.
Configuración de ejemplo del balanceador de cargas de proxy TCP regional interno con backends de NEG zonales.

El balanceador de cargas de proxy TCP regional interno 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. Un balanceador de cargas de proxy TCP interno regional 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. 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 us-west1 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 us-west1 usa 10.129.0.0/23 en su rango de IP principal.

Crea la red y la subred para los backends

Console

  1. En Cloud Console, 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, haz lo siguiente:
    • 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: us-west1
      • Rangos de direcciones IP: 10.1.2.0/24
    • Haz clic en Listo.
  5. Haga 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 us-west1 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=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 Google Cloud Console, 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 us-west1.
  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=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-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.

Console

  1. En la consola de Google Cloud, ve a la página Firewalls.
    Ir a Firewalls
  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 junto a TCP y escribe 80 para el número de puerto.
    9. Haz clic en Crear.
  3. Vuelve a hacer clic en Crear regla de firewall para crear la regla que permitirá 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. Haga 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:
    • Name: 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

Console

Puedes reservar una dirección IP interna con la consola de Google Cloud.

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

    Ir a las redes de VPC

  2. Haz clic en la red que se usó para configurar la conectividad híbrida entre los entornos.
  3. Haz clic en Direcciones IP internas estáticas y, luego, en Reservar dirección estática.
  4. En Nombre, ingresa int-tcp-ip-address.
  5. Para la Subred, selecciona backend-subnet.
  6. Si deseas especificar qué dirección IP deseas reservar, en Dirección IP estática, selecciona Permitirme elegir y, luego, completa una Dirección IP personalizada. De lo contrario, el sistema asignará de forma automática una dirección IP en la subred.
  7. Si deseas usar esta dirección IP con varias reglas de reenvío, en Propósito, elige Compartido.
  8. Haz clic en Reservar para finalizar el proceso.

gcloud

Reserva una dirección IP interna regional para la regla de reenvío del balanceador de cargas.

gcloud compute addresses create int-tcp-ip-address \
    --region=us-west1 \
    --subnet=backend-subnet \
    --purpose=SHARED_LOADBALANCER_VIP

Configura el NEG zonal

Configura un NEG zonal (con extremos de tipo GCE_VM_IP_PORT) en la región us-west1. 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 Google Cloud Console, 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 us-west1.
  5. Para la Zona, consulta us-west1-a.
  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. Haga 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. Haga clic en Administración. Ingresa la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.

    #! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    sudo echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  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: us-west1-a
    • Nombre: vm-c1, zona: us-west1-c
    • Nombre: vm-c2, zona: us-west1-c

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: us-west1-a
  • VM_NAME: vm-a2 y ZONE: us-west1-a
  • VM_NAME: vm-c1 y ZONE: us-west1-c
  • VM_NAME: vm-c2 y ZONE: us-west1-c

    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
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/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. Ve a la página Grupos de extremos de red en Google Cloud Console.
    Ir a la página 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 us-west1-a.
  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: us-west1-c

Agrega extremos a los NEG por zonas:

  1. Ve a la página Grupos de extremos de red en la consola de Google Cloud.
    Ir a los 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 us-west1-a con extremos GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-a \
       --network-endpoint-type=GCE_VM_IP_PORT \
       --zone=us-west1-a \
       --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=us-west1-a \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. Crea un NEG zonal en la zona us-west1-c con extremos GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=us-west1-c \
        --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=us-west1-c \
        --add-endpoint='instance=vm-c1,port=80' \
        --add-endpoint='instance=vm-c2,port=80'
    

Configura el balanceador de cargas

Consola

Inicie la configuración

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Crear balanceador de cargas.
  3. En Balanceo de cargas TCP, haz clic en Iniciar configuración.
  4. En Orientado a Internet o solo interno, seleccione Solo entre mis VMs.
  5. En el caso de Varias regiones o una sola región, selecciona Solo en una región.
  6. En Tipo de balanceador de cargas, selecciona Proxy.
  7. Haz clic en Continuar.
  8. En Nombre, ingresa my-int-tcp-lb.
  9. En Región, selecciona us-west1.
  10. 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 Google Cloud Console, 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=us-west1 \
        --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=us-west1 \
       --health-checks=tcp-health-check \
       --health-checks-region=us-west1
    
  3. Agrega el NEG zonal de la zona us-west1-a al servicio de backend.

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

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

    gcloud compute target-tcp-proxies create int-tcp-target-proxy \
       --backend-service=internal-tcp-proxy-bs \
       --region=us-west1
    
  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=us-west1 \
      --target-tcp-proxy=int-tcp-target-proxy \
      --target-tcp-proxy-region=us-west1
    

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.

Console

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

    Ir a Instancias de VM

  2. Haga clic en Crear instancia.

  3. Establece el Nombre como client-vm.

  4. Establece la Zona en us-west1-a.

  5. Haga 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=us-west1-a \
    --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. Conéctate mediante SSH a la instancia de cliente.

    gcloud compute ssh client-vm \
      --zone=us-west1-a
    
  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=us-west1
      

      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?