Configurar un balanceador de carga de red de paso a través interno con NEGs de zona

En esta guía se explica cómo desplegar un balanceador de carga de red interno de tipo pasarela con back-ends de grupos de puntos finales de red (NEG) por zonas. Los NEGs zonales son recursos zonales que representan colecciones de direcciones IP o combinaciones de direcciones IP y puertos de recursos Google Cloud en una sola subred. Los NEGs te permiten crear agrupaciones lógicas de direcciones IP o combinaciones de dirección IP y puerto que representan servicios de software en lugar de máquinas virtuales completas.

Antes de seguir esta guía, familiarízate con lo siguiente:

Los balanceadores de carga de red de paso a través internos solo admiten NEGs de zona con GCE_VM_IP endpoints.

Permisos

Para seguir esta guía, debes crear instancias y modificar una red en un proyecto. Debes ser propietario o editor del proyecto, o bien tener todos los roles de gestión de identidades y accesos de Compute Engine 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:

Descripción general de la configuración

En esta guía se explica cómo configurar y probar un balanceador de carga de red de paso a través interno con backends de NEG zonales de GCE_VM_IP. En los pasos de esta sección se describe cómo configurar lo siguiente:

  1. Una red de VPC de ejemplo llamada lb-network con una subred personalizada
  2. Reglas de cortafuegos que permiten las conexiones entrantes a las VMs de backend
  3. Cuatro VMs:
    • VMs vm-a1 y vm-a2 en la zona us-west1-a
    • VMs vm-c1 y vm-c2 en la zona us-west1-c
  4. Dos NEG zonales de backend: neg-a en la zona us-west1-a y neg-c en la zona us-west1-c. Cada NEG tendrá los siguientes endpoints:
    • neg-a contiene estos dos endpoints:
      • Dirección IP interna de la VM vm-a1
      • Dirección IP interna de la VM vm-a2
    • neg-c contiene estos dos endpoints:
      • Dirección IP interna de la VM vm-c1
      • Dirección IP interna de la VM vm-c2
  5. Una VM cliente (vm-client) en us-west1-a para probar las conexiones
  6. Los siguientes componentes del balanceador de carga de red de paso a través interno:
    • Un servicio de backend interno en la región us-west1 para gestionar la distribución de conexiones a los dos NEGs zonales
    • Una regla de reenvío interna y una dirección IP interna para el frontend del balanceador de carga

La arquitectura de este ejemplo es la siguiente:

Configuración de balanceador de carga de red de paso a través interno con NEGs de zona
Configuración de balanceador de carga de red de paso a través interno con NEGs zonales

Configurar una red, una región y una subred

El balanceador de carga de red de paso a través interno de ejemplo que se describe en esta página se crea en una red de VPC en modo personalizado llamada lb-network.

Las VMs de backend, los NEGs zonales y los componentes del balanceador de carga de este ejemplo se encuentran en esta región y subred:

  • Región: us-west1
  • Subred: lb-subnet, con el intervalo de direcciones IP principal 10.1.2.0/24

Para crear la red y la subred de ejemplo, sigue estos pasos.

Consola

  1. Ve a la página Redes de VPC de la Google Cloud consola.
    Ir a la página de la red de VPC
  2. Haz clic en Crear red VPC.
  3. Asigne un Nombre de lb-network.
  4. En la sección Subredes, haz lo siguiente:
    • Elige Personalizado en Modo de creación de subred.
    • En la sección Nueva subred, introduce la siguiente información:
      • Nombre: lb-subnet
      • Región: us-west1
      • 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:

    gcloud compute networks create lb-network --subnet-mode=custom
    
    1. En la red lb-network, crea una subred para las VMs de backend en la región us-west1:
    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Configurar reglas de cortafuegos

En este ejemplo se usan las siguientes reglas de cortafuegos:

  • fw-allow-lb-access: una regla de entrada aplicable a todos los destinos de la red VPC que permite el tráfico de fuentes del intervalo 10.1.2.0/24. Esta regla permite el tráfico entrante de cualquier cliente ubicado en lb-subnet.

  • fw-allow-ssh: una regla de entrada aplicable a las instancias que se van a balancear, 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 del sistema desde el que iniciará sesiones SSH. En este ejemplo se usa la etiqueta de destino allow-ssh para identificar las VMs a las que se debe aplicar.

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

Consola

  1. En la Google Cloud consola, ve a la página Políticas de cortafuegos.
    Ve a Políticas de cortafuegos
  2. Haz clic en Crear regla de cortafuegos e introduce la siguiente información para crear la regla que permita el tráfico de subred:
    • Nombre: fw-allow-lb-access
    • Red: lb-network
    • Prioridad: 1000
    • Dirección del tráfico: entrada
    • Acción tras coincidencia: permitir
    • Destinos: todas las instancias de la red
    • Filtro de origen: Intervalos de IPv4
    • Intervalos de IPv4 de origen: 10.1.2.0/24
    • Protocolos y puertos: permitir todos
  3. Haz clic en Crear.
  4. 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.
  5. Haz clic en Crear.
  6. Haz clic en Crear regla de cortafuegos por tercera vez para crear la regla que permita las comprobaciones de estado: Google Cloud
    • Nombre: fw-allow-health-check
    • 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-health-check
    • Filtro de origen: Intervalos de IPv4
    • Intervalos de IPv4 de origen: 130.211.0.0/22 y 35.191.0.0/16
    • Protocolos y puertos: permitir todos
  7. Haz clic en Crear.

gcloud

  1. Crea la regla de cortafuegos fw-allow-lb-access para permitir la comunicación desde la subred:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  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 la regla fw-allow-health-check para permitir Google Cloud las comprobaciones del estado.

    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,udp,icmp
    

Crear backends de NEG

Para demostrar la naturaleza regional de los balanceadores de carga de red con paso a través internos, en este ejemplo se usan dos backends de NEG de zona, neg-a y neg-c, en las zonas us-west1-a y us- west1-c. El tráfico se balancea entre los dos NEGs y entre los endpoints de cada NEG.

Crear VMs

Para admitir este ejemplo, cada una de las cuatro VMs ejecuta un servidor web Apache que escucha en los siguientes puertos TCP: 80, 8008, 8080, 8088, 443 y 8443.

A cada VM se le asigna una dirección IP interna en lb-subnet y una dirección IP externa (pública) efímera. Puedes quitar las direcciones IP externas más adelante.

No es necesario que las VMs de backend tengan direcciones IP externas, pero son útiles en este ejemplo porque permiten que las VMs descarguen Apache de Internet y que te conectes mediante SSH. De forma predeterminada, Apache está configurado para enlazarse a cualquier dirección IP. Los balanceadores de carga de red de paso a través internos envían paquetes conservando la IP de destino.

Asegúrate de que el software del servidor que se ejecuta en tus VMs esté escuchando en la dirección IP de la regla de reenvío interna del balanceador de carga.

Para simplificar las instrucciones, estas VMs de backend ejecutan Debian GNU Linux 10.

Consola

Crear VMs

  1. Ve a la página Instancias de VM de la Google Cloud consola.
    Ve a la página Instancias de VM.
  2. Repite los pasos siguientes para crear cuatro VMs con las siguientes combinaciones de nombre y zona.
    • Nombre: vm-a1, zona: us-west1-a
    • Nombre: vm-a2, zona: us-west1-a
    • Nombre: vm-c1, zona: us-west1-c
    • Nombre: vm-c2, zona: us-west1-c
  3. Haz clic en Crear instancia.
  4. Asigna el Nombre como se indica en el paso 2.
  5. En Región, elige us-west1 y, en Zona, selecciona la opción que se indica en el paso 2.
  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 Opciones avanzadas y haz los siguientes cambios:

    • Haga clic en Redes y añada las siguientes etiquetas de red: allow-ssh y allow-health-check.
    • Haz clic en Editar en Interfaces de red y haz los siguientes cambios. A continuación, haz clic en Hecho:
      • Red: lb-network
      • Subred: lb-subnet
      • IP interna principal: efímera (automática)
      • IP externa: efímera
    • Haz clic en Gestión. En el campo Startup script (Secuencia de comandos de inicio), copia y pega el siguiente contenido de la secuencia de comandos. El contenido de la secuencia de comandos es idéntico en las cuatro VMs:

      #! /bin/bash
      if [ -f /etc/startup_script_completed ]; then
      exit 0
      fi
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      file_ports="/etc/apache2/ports.conf"
      file_http_site="/etc/apache2/sites-available/000-default.conf"
      file_https_site="/etc/apache2/sites-available/default-ssl.conf"
      http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
      http_vh_prts="*:80 *:8008 *:8080 *:8088"
      https_listen_prts="Listen 443\nListen 8443"
      https_vh_prts="*:443 *:8443"
      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
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      prt_conf="$(cat "$file_ports")"
      prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
      prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
      echo "$prt_conf" | tee "$file_ports"
      http_site_conf="$(cat "$file_http_site")"
      http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
      echo "$http_site_conf_2" | tee "$file_http_site"
      https_site_conf="$(cat "$file_https_site")"
      https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
      echo "$https_site_conf_2" | tee "$file_https_site"
      systemctl restart apache2
      touch /etc/startup_script_completed
      
  8. Haz clic en Crear.

gcloud

Crea las cuatro VMs ejecutando el siguiente comando cuatro veces y usando estas cuatro combinaciones para [VM-NAME] y [ZONE]. El contenido de la secuencia de comandos es idéntico en las cuatro VMs.

  • [VM-NAME] de vm-a1 y [ZONE] de us-west1-a
  • [VM-NAME] de vm-a2 y [ZONE] de us-west1-a
  • [VM-NAME] de vm-c1 y [ZONE] de us-west1-c
  • [VM-NAME] de vm-c2 y [ZONE] de us-west1-c

    gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    

Crear GCE_VM_IP NEGs por zonas

Los NEG (neg-a y neg-c) deben crearse en las mismas zonas que las VMs creadas en el paso anterior.

Consola

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

  1. Ve a la página Grupos de puntos finales de red de la Google Cloud consola.
    Ve a la página Grupos de puntos finales de red
  2. Haz clic en Crear grupo de endpoints de red.
  3. Asigna un nombre al NEG de zona: neg-a.
  4. Selecciona el Tipo de grupo de puntos finales de red: Grupo de puntos finales de red (por zonas).
  5. Selecciona la red: lb-network.
  6. Selecciona la Subred: lb-subnet.
  7. Selecciona la zona: us-west1-a.
  8. Haz clic en Crear.
  9. Repita estos pasos para crear un segundo NEG zonal llamado neg-c en la zona us-west1-c.

Añade los endpoints al NEG de zona:

  1. Ve a la página Grupos de puntos finales de red de la Google Cloud consola.
    Ve a Grupos de endpoints de red
  2. Haga clic en el Nombre del primer grupo de endpoints de red creado en el paso anterior (neg-a). Verá la página Detalles del grupo de puntos finales 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.

    1. Haz clic en Instancia de VM y selecciona vm-a1 para añadir sus direcciones IP internas como endpoints de red.
    2. Haz clic en Crear.
    3. Vuelve a hacer clic en Añadir endpoint de red y, en Instancia de VM, selecciona vm-a2.
    4. Haz clic en Crear.
  4. Haga clic en el nombre del segundo grupo de endpoints de red creado en el paso anterior (neg-c). Verá la página Detalles del grupo de puntos finales de red.

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

    1. Haz clic en Instancia de VM y selecciona vm-c1 para añadir sus direcciones IP internas como endpoints de red.
    2. Haz clic en Crear.
    3. Vuelve a hacer clic en Añadir endpoint de red y, en Instancia de VM, selecciona vm-c2.
    4. Haz clic en Crear.

gcloud

  1. Crea un NEG zonal GCE_VM_IP llamado neg-a en us-west1-a con el comando gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-a \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-a \
        --network=lb-network \
        --subnet=lb-subnet
    
  2. Añade los endpoints a neg-a:

    gcloud compute network-endpoint-groups update neg-a \
        --zone=us-west1-a \
        --add-endpoint='instance=vm-a1' \
        --add-endpoint='instance=vm-a2'
    
  3. Crea un NEG zonal GCE_VM_IP llamado neg-c en us-west1-c con el comando gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-c \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-c \
        --network=lb-network \
        --subnet=lb-subnet
    
  4. Añade los endpoints a neg-c:

    gcloud compute network-endpoint-groups update neg-c \
        --zone=us-west1-c \
        --add-endpoint='instance=vm-c1' \
        --add-endpoint='instance=vm-c2'
    

Configurar componentes del balanceador de carga

Con estos pasos se configuran todos los componentes del balanceador de carga de red de paso a través interno:

  • Servicio de backend: en este ejemplo, debes enviar tráfico HTTP a través del balanceador de carga. Por lo tanto, debes usar TCP, no UDP.

  • Regla de reenvío: en este ejemplo se crea una única regla de reenvío interna.

  • Dirección IP interna: en este ejemplo, se especifica una dirección IP interna, 10.1.2.99, al crear la regla de reenvío.

Consola

gcloud

  1. Crea una comprobación del estado de HTTP regional.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Crea el servicio de backend:

    gcloud compute backend-services create bs-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. Añade los dos NEGs zonales, neg-a y neg-c, al servicio de backend:

    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-a \
        --network-endpoint-group-zone=us-west1-a
    
    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-c \
        --network-endpoint-group-zone=us-west1-c
    
  4. Crea una regla de reenvío para el servicio de backend. Cuando cree la regla de reenvío, especifique 10.1.2.99 para la dirección IP interna de la subred.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=bs-ilb \
        --backend-service-region=us-west1
    

Probar el balanceador de carga

Esta prueba se pone en contacto con el balanceador de carga desde una VM de cliente independiente, es decir, no desde una VM de backend del balanceador de carga. Lo habitual es que el tráfico se distribuya entre las cuatro VMs de backend porque no se ha configurado ninguna afinidad de sesión.

Crear una VM de cliente de prueba

En este ejemplo, se crea una VM de cliente (vm-client) en la misma región que las VMs de backend (servidor). El cliente se usa para validar la configuración del balanceador de carga y demostrar el comportamiento esperado, tal como se describe en la sección Pruebas.

Consola

  1. Ve a la página Instancias de VM de la Google Cloud consola.
    Ve a la página Instancias de VM.
  2. Haz clic en Crear instancia.
  3. Asigna el valor vm-client a Nombre.
  4. En Zona, elija us-west1-a.
  5. Haz clic en Opciones avanzadas y haz los siguientes cambios:
    • Haz clic en Redes y añade allow-ssh a Etiquetas de red.
    • Haz clic en el botón de edición situado debajo de Interfaces de red y haz los siguientes cambios. A continuación, haz clic en Hecho:
      • Red: lb-network
      • Subred: lb-subnet
      • IP interna principal: efímera (automática)
      • IP externa: efímera
  6. Haz clic en Crear.

gcloud

La VM cliente puede estar en cualquier zona de la misma región que el balanceador de carga y puede usar cualquier subred de esa región. En este ejemplo, el cliente está en la zona us-west1-a y usa la misma subred que las VMs de backend.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

Enviar tráfico al balanceador de carga

Sigue estos pasos para conectarte al balanceador de carga.

  1. Conéctate a la instancia de VM cliente.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Haz una solicitud web al balanceador de carga mediante curl para ponerte en contacto con su dirección IP. Repite la solicitud para ver que las respuestas proceden de diferentes VMs backend. El nombre de la máquina virtual que genera la respuesta se muestra en el texto de la respuesta HTML, gracias al contenido de /var/www/html/index.html en cada máquina virtual backend. Las respuestas esperadas son: Page served from: vm-a1 y Page served from: vm-a2.

    curl http://10.1.2.99
    

    La regla de reenvío está configurada para servir los puertos 80, 8008, 8080 y 8088. Para enviar tráfico a esos otros puertos, añade dos puntos (:) y el número de puerto después de la dirección IP, de esta forma:

    curl http://10.1.2.99:8008
    

Siguientes pasos