Configurar un balanceador de carga de red de proxy interno regional con backends de NEG de zona

El balanceador de carga de red de proxy interno regional es un balanceador de carga regional de capa 4 basado en proxy que te permite ejecutar y escalar el tráfico de tu servicio TCP mediante 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.

En esta guía se explica cómo configurar un balanceador de carga de red con proxy interno regional con un backend de grupo de puntos finales de red (NEG) por zonas. Antes de empezar:

Información general

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

En este ejemplo, se configura la siguiente implementación:

Ejemplo de configuración de un balanceador de carga de red de proxy interno regional con back-ends de NEG de zona.
Ejemplo de configuración de un balanceador de carga de red de proxy interno regional con backends de NEG por zonas.

El balanceador de carga de red de proxy interno regional es un balanceador de carga regional. Todos los componentes del balanceador de carga (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 tener el rol de propietario o editor del proyecto, o bien debes tener todos los roles de gestión de identidades y accesos de Compute Engine siguientes:

Tarea Rol obligatorio
Crear redes, subredes y componentes de balanceador de carga Administrador de red
Añadir y eliminar reglas de cortafuegos Administrador de seguridad
Crear instancias Administrador de instancias de Compute

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. Los balanceadores de carga de red con proxy internos regionales son regionales. El tráfico de la red de VPC se dirige al balanceador de carga si la fuente del tráfico está 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. La red es una red de VPC en modo personalizado llamada lb-network.

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

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

Crea la red y la subred de los back-ends

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:

    • Elige Personalizado en Modo de creación de subred.
    • 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
    • Haz clic en Listo.
  5. Haz clic en Crear.

gcloud

  1. Crea la red 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 de 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
    

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

  3. Haz clic en Añadir subred.

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

  5. En Región, seleccione 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

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

Crear reglas de cortafuegos

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

  • fw-allow-health-check: una regla de entrada, aplicable a las instancias con balanceo de carga, que permite el tráfico del balanceador de carga y los sistemas de comprobación del estado (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 VMs de backend a las que se debe aplicar. Google CloudGoogle Cloud
  • fw-allow-ssh: una regla de entrada que permite 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 de los sistemas desde los que iniciará sesiones SSH. En este ejemplo se usa la etiqueta de destino allow-ssh para identificar las máquinas virtuales a las que se debe aplicar.
  • fw-allow-proxy-only-subnet: crea una regla de cortafuegos de entrada para la subred de solo proxy que permita que el balanceador de carga se comunique con las instancias de backend en el puerto TCP 80. En este ejemplo se usa la etiqueta de destino allow-proxy-only-subnet para identificar las VMs de backend a las que se debe aplicar.

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:

    1. Asigne un Nombre de fw-allow-health-check.
    2. En Red, selecciona lb-network.
    3. En Objetivos, seleccione Etiquetas de destino especificadas.
    4. Rellene el campo Etiquetas de destino con allow-health-check.
    5. En Filtro de origen, elija Intervalos de IPv4.
    6. Asigna los valores 130.211.0.0/22 y 35.191.0.0/16 a Intervalos de IPv4 de origen.
    7. En Protocolos y puertos, selecciona Protocolos y puertos especificados.
    8. Marca la casilla TCP e introduce 80 en los números de puerto.
    9. Haz clic en Crear.
  3. Vuelve a hacer clic en Crear regla de cortafuegos para crear la regla que permita las conexiones SSH entrantes:

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

  5. Vuelve a hacer clic en Crear regla de cortafuegos para crear la regla que permita las conexiones entrantes de 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 tras coincidencia: permitir
    • Destinos: 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 y, a continuación, escribe tcp:80.
  6. Haz clic en Crear.

gcloud

  1. Crea la regla fw-allow-health-check para permitir que las comprobaciones del estado 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 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
    
  3. Crea una regla de cortafuegos de entrada para la subred de solo proxy que permita que el balanceador de carga se comunique con las 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
    

Reservar la dirección IP del balanceador de carga

Para reservar una dirección IP interna estática para tu balanceador de carga, consulta Reservar una dirección IPv4 o IPv6 interna estática nueva.

Configurar el NEG de zona

Configura un NEG por zonas (con endpoints de tipo GCE_VM_IP_PORT) en la región REGION_A. Primero, crea las VMs. A continuación, crea un NEG zonal y añade los puntos finales de red de las VMs al NEG.

Crear VMs

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. Asigna el valor vm-a1 a Nombre.

  4. En Región, seleccione REGION_A.

  5. Para la zona, consulta ZONE_A1.

  6. En la sección Disco de arranque, asegúrate de que la opción Debian GNU/Linux 12 (bookworm) esté seleccionada para el disco de arranque. Haz clic en Elegir para cambiar la imagen si es necesario.

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

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

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

  11. Repite los pasos siguientes 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

Crea las VMs ejecutando el siguiente comando dos veces y usando estas combinaciones para VM_NAME y ZONE. El contenido de la secuencia de comandos es idéntico en ambas máquinas virtuales.

  • 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-12 \
        --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'
    

Crear los NEGs de zona

Consola

Para crear un grupo de endpoints de red de zona, sigue estos pasos:

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

    Ve a Grupos de puntos finales de red
    .

  2. Haz clic en Crear grupo de endpoints de red.

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

  4. En Tipo de grupo de puntos finales de red, selecciona Grupo de puntos finales de red (por zonas).

  5. En Red, selecciona lb-network.

  6. En Subred, selecciona backend-subnet.

  7. En Zona, selecciona ZONE_A1.

  8. Introduce 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

Añade endpoints a los NEGs de zona:

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

    Ve a Grupos de puntos finales de red
    .

  2. Haz clic en el Nombre del grupo de endpoints de red creado en el paso anterior (por ejemplo, zonal-neg-a). Se mostrará la página Detalles del grupo de endpoints de red.

  3. En la sección Puntos finales de red de este grupo, haz clic en Añadir punto final de red. Verás la página Añadir punto final 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. Introduce la dirección IP del nuevo endpoint de red. Puedes hacer clic en Comprobar las direcciones IP principales y el intervalo de direcciones IP de alias en nic0 para ver la dirección IP.
    2. En Tipo de puerto, selecciona Predeterminado. El endpoint usa el puerto predeterminado 80 para todos los endpoints del grupo de endpoints de red. Esto es suficiente para nuestro ejemplo porque el servidor Apache está atendiendo solicitudes en el puerto 80.
    3. Haz clic en Crear.
  5. Vuelve a hacer clic en Añadir endpoint de red. Selecciona la segunda instancia de VM, vm-a2, y repite estos pasos para añadir sus endpoints a zonal-neg-a.

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

gcloud

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

    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 el --default-port al crear el NEG o especificar un número de puerto para cada endpoint, como se muestra en el paso siguiente.

  2. Añade endpoints 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 GCE_VM_IP_PORT puntos finales.

    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 el --default-port al crear el NEG o especificar un número de puerto para cada endpoint, como se muestra en el paso siguiente.

  4. Añade endpoints 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'
    

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 Interno y haz clic en Siguiente.
  6. En Implementación en una sola región o en varias regiones, 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-int-tcp-lb.
  2. En Región, selecciona REGION_A.
  3. En Red, selecciona lb-network.

Reservar una subred de solo proxy

Para reservar una subred de solo proxy, sigue estos pasos:

  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.

Configuración de backend

  1. Haz clic en Configuración de backend.
  2. En Tipo de backend, selecciona Grupo de puntos finales de red por zonas.
  3. En Protocolo, selecciona TCP.
  4. Configura el primer backend:
    1. En Nuevo backend, selecciona NEG zonal zonal-neg-a.
    2. Mantén los valores predeterminados restantes y haz clic en Hecho.
  5. Configura el segundo backend:
    1. Haz clic en Añadir backend.
    2. En Nuevo backend, selecciona el grupo de instancias zonal-neg-c.
    3. Mantén los valores predeterminados restantes y haz clic en Hecho.
  6. Configura la comprobación del estado:
    1. En Comprobación del estado, selecciona Crear una comprobación del estado.
    2. Asigna el valor tcp-health-check al Nombre de la comprobación del estado.
    3. En Protocolo, selecciona TCP.
    4. En Puerto, escribe 80.
  7. Mantenga los demás valores predeterminados y haga clic en Guardar.
  8. 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.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. En Nombre, escribe 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, introduce 9090. La regla de reenvío solo reenvía los paquetes con un puerto de destino coincidente.
  6. En este ejemplo, no habilites Proxy Protocol porque no funciona con el software del servidor HTTP de Apache. Para obtener más información, consulta Protocolo de 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. Comprueba tu configuración.
  3. Haz clic en Crear.

gcloud

  1. Crea una comprobación del 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. Añade 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. Añade 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. En --ports, especifica un número de puerto único entre 1 y 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
    

Probar el balanceador de carga

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

Crear una VM cliente

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

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. Asigna el valor client-vm a Nombre.

  4. Define Zona como ZONE_A1.

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

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

    1. En Etiquetas de red, introduzca allow-ssh.
    2. En Interfaces de red, selecciona lo siguiente:
      • Red: lb-network
      • Subred: backend-subnet
  7. Haz clic en Crear.

gcloud

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

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

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

    gcloud compute ssh client-vm \
      --zone=ZONE_A1
    
  2. Verifica que el balanceador de carga esté sirviendo los nombres de host de backend correctamente.

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

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

      Anota la dirección IP.

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

      curl IP_ADDRESS:9090
      

Siguientes pasos