En esta guía, se muestra cómo implementar un balanceador de cargas de red interno con backends de grupos de extremos de red (NEG) zonales. Los NEG zonales son recursos zonales que representan conjuntos de direcciones IP o combinaciones de direcciones IP y puertos para recursos de Google Cloud dentro de una subred única. Los NEG te permiten crear agrupaciones lógicas de direcciones IP o combinaciones de direcciones IP y puertos que representan servicios de software en lugar de VM completas.
Antes de seguir con esta guía, familiarízate con lo siguiente:
- Descripción general del balanceador de cargas de red de transferencia interna
- Descripción general de NEG zonal
Los balanceadores de cargas de red de transferencia internos solo admiten NEG zonales con extremos GCE_VM_IP
.
Permisos
Para seguir esta guía, debes crear instancias y modificar una red en un proyecto. Debes ser propietario o editor de un proyecto o tener todas las funciones de IAM de Compute Engine que se detallan a continuación:
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:
Descripción general de la configuración
En esta guía, se muestra cómo configurar y probar un balanceador de cargas de red de transferencia interno con backends de NEG zonales de GCE_VM_IP
. En los pasos de esta sección, se describe cómo configurar los siguientes elementos:
- Una red de VPC de muestra llamada
lb-network
con una subred personalizada - Reglas de firewall que permiten conexiones entrantes a VM de backend
- Cuatro VM:
- VM
vm-a1
yvm-a2
en la zonaus-west1-a
- VM
vm-c1
yvm-c2
en la zonaus-west1-c
- VM
- Dos NEG zonales de backend,
neg-a
en la zonaus-west1-a
yneg-c
en la zonaus-west1-c
Cada NEG tendrá los siguientes extremos:neg-a
contiene estos dos extremos:- 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 extremos:- 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 de cliente (
vm-client
) enus-west1-a
para probar conexiones - Los siguientes componentes del balanceador de cargas de red de transferencia interno:
- Un servicio de backend interno en la región
us-west1
para administrar la distribución de conexiones en los dos NEG zonales - Una regla de reenvío interno y una dirección IP interna para el frontend del balanceador de cargas
- Un servicio de backend interno en la región
Así se ve la arquitectura de este ejemplo:
Configura una red, una región y una subred
El ejemplo del balanceador de cargas de red de transferencia interno descrito en esta página se crea en una red de VPC de modo personalizado llamada lb-network
.
Las VM de backend de este ejemplo, los NEG zonales y los componentes del balanceador de cargas se encuentran en la región y la subred que se incluyen a continuación:
- Región:
us-west1
- Subred:
lb-subnet
, con el rango de direcciones IP principales10.1.2.0/24
Para crear la red y la subred de ejemplo, sigue estos pasos:
Console
- Ve a la página Redes de VPC en la consola de Google Cloud.
Ir a la página Redes de VPC - Haz clic en Crear red de VPC
- En Nombre ingresa
lb-network
. - 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:
lb-subnet
- Región:
us-west1
- Rangos de direcciones IP:
10.1.2.0/24
- Haz clic en Listo.
- Nombre:
- Haz clic en Crear.
gcloud
Crea la red de VPC personalizada:
gcloud compute networks create lb-network --subnet-mode=custom
- Dentro de la red
lb-network
, crea una subred para VM 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
- Dentro de la red
Configura reglas de firewall
En este ejemplo, se usan las siguientes reglas de firewall:
fw-allow-lb-access
: Es una regla de entrada, aplicable a todos los destinos en la red de VPC, que permite el tráfico de fuentes en el rango10.1.2.0/24
. Esta regla permite el tráfico entrante desde cualquier cliente ubicado enlb-subnet
.fw-allow-ssh
: Una regla de entrada aplicable a las instancias con balanceo de cargas y que permite 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 solo los rangos de IP del sistema desde el cual iniciarás sesiones SSH. En este ejemplo se usa la etiqueta de destinoallow-ssh
para identificar las VM a las que se debe aplicar.
Sin estas reglas de firewall, la regla de entrada predeterminada denegada bloquea el tráfico entrante a las instancias de backend.
Console
- En la consola de Google Cloud, ve a la página Firewall.
Ir a Políticas de firewall - Haz clic en Crear regla de firewall e ingresa la siguiente información para crear la regla que permitirá el tráfico de subred:
- Nombre:
fw-allow-lb-access
- Red:
lb-network
- Prioridad:
1000
- Dirección del tráfico: entrada
- Acción si hay coincidencia: permitir
- Objetivos: todas las instancias de la red
- Filtro de fuente: Rangos de IPv4
- Rangos 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 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
- Nombre:
- Haz clic en Crear.
- Haz clic en Crear regla de firewall por tercera vez para crear la regla que permitirá las verificaciones de estado de Google Cloud:
- Nombre:
fw-allow-health-check
- 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-health-check
- Filtro de fuente: Rangos de IPv4
- Rangos 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 firewall
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 firewall
fw-allow-ssh
para permitir la conectividad SSH a las VM con la etiqueta de redallow-ssh
. Cuando omitessource-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
Crea la regla
fw-allow-health-check
para permitir las verificaciones de estado de Google Cloud.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
Crea backends de NEG
Para demostrar la naturaleza regional del balanceador de cargas de red de transferencia interno, en este ejemplo se usan dos backends de NEG zonales, neg-a
y neg-c
, en las zonas us-west1-a
y us-
west1-c
. Las cargas del tráfico se balancean en los NEG y en los extremos dentro de cada NEG.
Crea las VM
Para admitir este ejemplo, cada una de las cuatro VM 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 la lb-subnet
y una dirección IP externa (pública) y efímera. Puedes quitar las direcciones IP externas más adelante.
No se requieren direcciones IP externas para las VMs de backend. Sin embargo, son útiles para este ejemplo porque permiten que las VMs descarguen Apache de Internet y te permiten conectarte a través de SSH. De forma predeterminada, Apache está configurado para vincularse a cualquier dirección IP. Los balanceadores de cargas de red de transferencia internos entregan paquetes mediante la preservación de la IP de destino.
Asegúrate de que el software del servidor que se ejecuta en las VM de backend escuche la dirección IP de la regla de reenvío interno del balanceador de cargas.
Para simplificar el instructivo, estas VMs de backend ejecutan Debian GNU/Linux 10.
Console
Crea VM
- Ve a la página Instancias de VM en la consola de Google Cloud.
Ir a la página Instancias de VM - Repite los siguientes pasos para crear cuatro VM 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.
- En Nombre establece lo que se indica en el paso 2.
- En Región, elige
us-west1
y selecciona una Zona como se indica en el paso 2. - En la sección Disco de arranque, asegúrate de que Debian GNU/Linux 12 (bookWorm) esté seleccionado como las opciones del disco de arranque. Haz clic en Elegir para cambiar la imagen si es necesario.
Haz clic en Opciones avanzadas y realiza los siguientes cambios:
- Haz clic en Herramientas de redes y agrega 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 realiza los siguientes cambios. Luego, haz clic en Listo: - Red:
Haz clic en Administración. En el campo Secuencia de comandos de inicio, copia y pega el siguiente contenido de la secuencia de comandos. El contenido de secuencia de comandos es idéntico para las cuatro VM:
#! /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
- Haz clic en Herramientas de redes y agrega las siguientes Etiquetas de red:
Haz clic en Crear.
gcloud
A fin de crear cuatro VM, ejecuta el siguiente comando cuatro veces, con estas cuatro combinaciones para [VM-NAME]
y [ZONE]
. El contenido de la secuencia de comandos es idéntico para las cuatro VM.
[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'
Crea NEG zonales GCE_VM_IP
Los NEG (neg-a
y neg-c
) deben crearse en las mismas zonas que las VM creadas en el paso anterior.
Console
Para crear un grupo de extremos de red por zonas, sigue estos pasos:
- Ve a la página Grupos de extremos de red en la consola de GoogleCloud.
Ir a la página Grupos de extremos de red - Haz clic en Crear un grupo de extremos de red.
- Ingresa un Nombre para el NEG zonal:
neg-a
. - Selecciona el Tipo de grupo de extremos de red: Grupo de extremos de red (zonal).
- Selecciona la Red: lb-network
- Selecciona la Subred: lb-subnet
- Selecciona la Zona: us-west1-a
- Haz clic en Crear.
- Repite estos pasos para crear un segundo NEG zonal llamado
neg-c
, en la zona us-west1-c.
Agrega extremos al NEG zonal.
- Ve a la página Grupos de extremos de red en la consola de GoogleCloud.
Ir a los grupos de extremos de red - Haz clic en el Nombre del primer grupo de extremos de red que se creó en el paso anterior (neg-a). Verás la página Detalles del grupo de extremos de red.
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.
- Haz clic en Instancia de VM y selecciona vm-a1 para agregar sus direcciones IP internas como extremos de red.
- Haz clic en Crear.
- Una vez más, haz clic en Agregar extremo de red y, en Instancia de VM, selecciona vm-a2.
- Haz clic en Crear.
Haz clic en el Nombre del segundo grupo de extremos de red que se creó en el paso anterior (neg-c). Verás la página Detalles del grupo de extremos de red.
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.
- Haz clic en Instancia de VM y selecciona vm-c1 para agregar sus direcciones IP internas como extremos de red.
- Haz clic en Crear.
- Haz clic de nuevo en Agregar extremo 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
mediante 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
Agrega extremos 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
mediante 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
Agrega extremos 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'
Configura los componentes del balanceador de cargas
Mediante estos pasos, se configuran todos los componentes del balanceador de cargas de red de transferencia interno:
Servicio de backend: para este ejemplo, debes pasar el tráfico HTTP a través del balanceador de cargas. Por lo tanto, debes usar TCP, no UDP.
Regla de reenvío: en este ejemplo se crea una sola regla de reenvío interno.
Dirección IP interna: En este ejemplo, se especifica una dirección IP interna,
10.1.2.99
, cuando creas la regla de reenvío.
Console
gcloud
Crea una verificación de estado HTTP regional nueva.
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
Agrega los dos NEG 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 crees la regla de reenvío, especifica
10.1.2.99
como la dirección IP interna en 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
Prueba el balanceador de cargas
En esta prueba, se contacta al balanceador de cargas desde una VM de cliente diferente, es decir, no desde una VM de backend del balanceador de cargas. El comportamiento esperado consiste en que el tráfico se distribuya entre las cuatro VM de backend porque no se configuró ninguna afinidad de sesión.
Crea una VM de cliente de prueba
En este ejemplo se crea una VM de cliente (vm-client
) en la misma región en la que están las VM de backend (servidor). El cliente se usa para validar la configuración del balanceador de cargas y demostrar el comportamiento esperado, como se describe en la sección de pruebas.
Console
- Ve a la página Instancias de VM en la consola de Google Cloud.
Ir a la página Instancias de VM - Haz clic en Crear instancia.
- Configura el campo Nombre como
vm-client
. - En Zona establece
us-west1-a
. - Haz clic en Opciones avanzadas y realiza los siguientes cambios:
- Haz clic en Herramientas de redes y agrega
allow-ssh
a Etiquetas de red. - Haz clic en el botón Editar, en Interfaces de red, y realiza los siguientes cambios. Luego, haz clic en Listo:
- Red:
lb-network
- Subred:
lb-subnet
- IP interna principal: efímera (automática)
- IP externa: Efímera
- Red:
- Haz clic en Herramientas de redes y agrega
- Haz clic en Crear.
gcloud
La VM de cliente puede estar en cualquier zona de la misma región que el balanceador de cargas y puede usar cualquier subred en esa región. En este ejemplo el cliente se encuentra en la zona us-west1-a
y usa la misma subred que las VM 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
Envía tráfico al balanceador de cargas
Realiza los siguientes pasos para conectarte al balanceador de cargas.
Conéctate a la instancia de VM de cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Realiza una solicitud web al balanceador de cargas mediante
curl
para establecer contacto con su dirección IP. Repite la solicitud para que puedas ver que las respuestas provienen de diferentes VM de backend. El nombre de la VM que genera la respuesta se muestra en el texto de la respuesta HTML, en virtud del contenido de/var/www/html/index.html
en cada VM de backend. Las respuestas esperadas tienen el siguiente aspecto:Page served from: vm-a1
yPage served from: vm-a2
.curl http://10.1.2.99
La regla de reenvío está configurada para entregar en los puertos
80
,8008
,8080
y8088
. Para enviar tráfico a esos otros puertos, agrega dos puntos (:
) y el número de puerto después de la dirección IP, de esta manera:curl http://10.1.2.99:8008
¿Qué sigue?
- Para configurar parámetros 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 los balanceadores de cargas de transferencia internos.
- Consulta la descripción general del balanceador de cargas de red de transferencia interno para obtener información básica importante.
- Consulta los conceptos de la conmutación por error para balanceadores de cargas de red internos para obtener información importante sobre la conmutación por error.
- Consulta Registro y supervisión del balanceador de cargas de red de transferencia interno para información sobre cómo configurar Logging y Monitoring para los balanceadores de cargas de red internos.
- Consulta Balanceadores de cargas de red de transferencia internos y redes conectadas para obtener información sobre cómo acceder a los balanceadores de cargas de red de transferencia internos desde redes de intercambio de tráfico conectadas a tu red de VPC.
- Consulta Soluciona problemas del balanceador de cargas de red de transferencia interno para obtener información sobre cómo solucionar problemas del balanceador de cargas de red de transferencia interno.