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:
- Descripción general del balanceador de carga de red de paso a través interno
- Descripción general de los NEGs por zonas
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:
- Una red de VPC de ejemplo llamada
lb-network
con una subred personalizada - Reglas de cortafuegos que permiten las conexiones entrantes a las VMs de backend
- Cuatro VMs:
- VMs
vm-a1
yvm-a2
en la zonaus-west1-a
- VMs
vm-c1
yvm-c2
en la zonaus-west1-c
- VMs
- Dos NEG zonales de backend:
neg-a
en la zonaus-west1-a
yneg-c
en la zonaus-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
- Dirección IP interna de la VM
neg-c
contiene estos dos endpoints:- Dirección IP interna de la VM
vm-c1
- Dirección IP interna de la VM
vm-c2
- Dirección IP interna de la VM
- Una VM cliente (
vm-client
) enus-west1-a
para probar las conexiones - 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
- Un servicio de backend interno en la región
La arquitectura de este ejemplo es la siguiente:
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 principal10.1.2.0/24
Para crear la red y la subred de ejemplo, sigue estos pasos.
Consola
- Ve a la página Redes de VPC de la Google Cloud consola.
Ir a la página de la red de VPC - Haz clic en Crear red VPC.
- Asigne un Nombre de
lb-network
. - 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.
- Nombre:
- Haz clic en Crear.
gcloud
Crea la red VPC personalizada:
gcloud compute networks create lb-network --subnet-mode=custom
- En la red
lb-network
, crea una subred para las VMs de backend en la regiónus-west1
:
gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
- En la red
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 intervalo10.1.2.0/24
. Esta regla permite el tráfico entrante de cualquier cliente ubicado enlb-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 destinoallow-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
- En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Ve a Políticas de cortafuegos - 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
- Nombre:
- Haz clic en Crear.
- 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
.
- Nombre:
- Haz clic en Crear.
- 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
y35.191.0.0/16
- Protocolos y puertos: permitir todos
- Nombre:
- Haz clic en Crear.
gcloud
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
Crea la regla de cortafuegos
fw-allow-ssh
para permitir la conectividad SSH a las VMs con la etiqueta de redallow-ssh
. Si omitesource-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
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
- Ve a la página Instancias de VM de la Google Cloud consola.
Ve a la página Instancias de VM. - 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
- Nombre:
- Haz clic en Crear instancia.
- Asigna el Nombre como se indica en el paso 2.
- En Región, elige
us-west1
y, en Zona, selecciona la opción que se indica en el paso 2. - 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.
Haz clic en Opciones avanzadas y haz los siguientes cambios:
- Haga clic en Redes y añada las siguientes etiquetas de red:
allow-ssh
yallow-health-check
. - Haz clic en Editar
- Red:
lb-network
- Subred:
lb-subnet
- IP interna principal: efímera (automática)
- IP externa: efímera
en Interfaces de red y haz los siguientes cambios. A continuación, haz clic en Hecho:
- Red:
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
- Haga clic en Redes y añada las siguientes etiquetas de red:
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]
devm-a1
y[ZONE]
deus-west1-a
[VM-NAME]
devm-a2
y[ZONE]
deus-west1-a
[VM-NAME]
devm-c1
y[ZONE]
deus-west1-c
[VM-NAME]
devm-c2
y[ZONE]
deus-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:
- 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 - Haz clic en Crear grupo de endpoints de red.
- Asigna un nombre al NEG de zona:
neg-a
. - Selecciona el Tipo de grupo de puntos finales de red: Grupo de puntos finales de red (por zonas).
- Selecciona la red: lb-network.
- Selecciona la Subred: lb-subnet.
- Selecciona la zona: us-west1-a.
- Haz clic en Crear.
- 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:
- Ve a la página Grupos de puntos finales de red de la Google Cloud consola.
Ve a Grupos de endpoints de red - 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.
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.
- Haz clic en Instancia de VM y selecciona vm-a1 para añadir sus direcciones IP internas como endpoints de red.
- Haz clic en Crear.
- Vuelve a hacer clic en Añadir endpoint de red y, en Instancia de VM, selecciona vm-a2.
- Haz clic en Crear.
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.
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.
- Haz clic en Instancia de VM y selecciona vm-c1 para añadir sus direcciones IP internas como endpoints de red.
- Haz clic en Crear.
- Vuelve a hacer clic en Añadir endpoint de red y, en Instancia de VM, selecciona vm-c2.
- Haz clic en Crear.
gcloud
Crea un NEG zonal
GCE_VM_IP
llamadoneg-a
enus-west1-a
con el comandogcloud 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
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'
Crea un NEG zonal
GCE_VM_IP
llamadoneg-c
enus-west1-c
con el comandogcloud 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
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
Crea una comprobación del estado de HTTP regional.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
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
Añade los dos NEGs zonales,
neg-a
yneg-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
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
- Ve a la página Instancias de VM de la Google Cloud consola.
Ve a la página Instancias de VM. - Haz clic en Crear instancia.
- Asigna el valor
vm-client
a Nombre. - En Zona, elija
us-west1-a
. - 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
- Red:
- Haz clic en Redes y añade
- 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.
Conéctate a la instancia de VM cliente.
gcloud compute ssh vm-client --zone=us-west1-a
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
yPage served from: vm-a2
.curl http://10.1.2.99
La regla de reenvío está configurada para servir los puertos
80
,8008
,8080
y8088
. 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
- Para configurar opciones adicionales, como habilitar el acceso global, aceptar tráfico en todos los puertos y aceptar tráfico en varios puertos mediante dos reglas de reenvío, consulta Opciones de configuración adicionales para balanceadores de carga de red internos de tipo pasarela.
- Consulta la descripción general del balanceador de carga de red de paso a través interno para obtener información básica importante.
- Consulta Conceptos de conmutación por error para los balanceadores de carga de red de paso a través internos para obtener información importante sobre la conmutación por error.
- Consulta Registro y monitorización del balanceador de carga de red de paso a través interno para obtener información sobre cómo configurar el registro y la monitorización de los balanceadores de carga de red de paso a través internos.
- Consulta Balanceadores de carga de red de paso a través internos y redes conectadas para obtener información sobre cómo acceder a balanceadores de carga de red de paso a través internos desde redes peer conectadas a tu red de VPC.
- Consulta el artículo Solucionar problemas de balanceadores de carga de red de paso a través internos para obtener información sobre cómo solucionar problemas con tu balanceador de carga de red de paso a través interno.