En esta guía se proporcionan instrucciones para crear una configuración de balanceador de carga de red de paso a través externo con backends de grupo de destino. En el ejemplo se da por hecho que tiene varios servidores web en instancias de Compute Engine entre los que quiere balancear el tráfico. En este caso, se configura un balanceo de carga de capa 4 para distribuir el tráfico HTTP entre instancias en buen estado. Las comprobaciones de estado HTTP básicas se configuran para asegurar que el tráfico se envíe solo a las instancias en buen estado.
En este ejemplo se balancea la carga del tráfico HTTP, pero puedes usar balanceadores de carga de red externos de transferencia basados en grupos de destino para balancear la carga del tráfico TCP, UDP y SSL. Antes de empezar, consulta el resumen de los balanceadores de carga de red de paso a través externos para obtener información conceptual sobre estos balanceadores.
Antes de empezar
Instala Google Cloud CLI. Para obtener una descripción general completa de la herramienta, consulta la guía de la herramienta gcloud. Puedes encontrar comandos relacionados con el balanceo de carga en el grupo de comandos gcloud compute
.
También puedes obtener ayuda detallada sobre cualquier comando de gcloud
mediante la marca --help
:
gcloud compute http-health-checks create --help
Si no has ejecutado la CLI de Google Cloud anteriormente, ejecuta primero gcloud init
para autenticarte.
Además, debes crear una dirección IP externa estática para el balanceador de carga. Si usas una imagen proporcionada por Compute Engine, tus instancias de máquina virtual se configuran automáticamente para gestionar esta dirección IP. Si usas otra imagen, tendrás que configurar esta dirección como alias en eth0 o como bucle de retorno en cada instancia.
En esta guía se da por hecho que estás familiarizado con bash.
Configurar instancias de VM de Compute Engine
En este caso de balanceo de carga, crearás tres instancias de VM de Compute Engine e instalarás Apache en ellas. Añadirás una regla de cortafuegos que permita que el tráfico HTTP llegue a las instancias.
Las instancias que participan como VMs de backend de balanceadores de carga de red de paso a través externos deben ejecutar el entorno de invitado de Linux, el entorno de invitado de Windows u otros procesos que proporcionen una funcionalidad equivalente.
Configurar las instancias de backend
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
Asigna el valor
www1
a Nombre.En Region (Región), selecciona us-central1.
En el campo Zona, introduce us-central1-b.
En Disco de arranque, ya está seleccionada la imagen de SO predeterminada Debian GNU/Linux 12 (bookworm).
Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure el siguiente campo:
- En Etiquetas de red, introduzca
network-lb-tag
.
- En Etiquetas de red, introduzca
Haz clic en Gestión. Introduce 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 service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
- Haz clic en Crear.
Crea una instancia llamada
www2
con los mismos ajustes, excepto con la siguiente secuencia de comandos insertada en los campos Automatización y Secuencia de comandos de inicio.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
Crea una instancia llamada
www3
con los mismos ajustes, excepto con la siguiente secuencia de comandos insertada en los campos Automatización y Secuencia de comandos de inicio.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
Todos los comandos que se indican a continuación se ejecutan en tu sistema local y se presupone que hay un símbolo del sistema bash
.
Para ver los nombres, los atributos y el estado de las imágenes del SO, usa el comando gcloud compute images list
.
Crea tres máquinas virtuales en una zona determinada y asígnales la misma etiqueta. En este ejemplo se define la zona como us-central1-b. Al definir el campo
tags
, puedes hacer referencia a todas estas instancias a la vez, por ejemplo, con una regla de cortafuegos. Estos comandos también instalan Apache en cada instancia y asignan a cada instancia una página principal única.gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"
gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
api
Crea una instanciawww1
en la zona us-central1-b
con el
métodoinstances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances { "canIpForward": false, "deletionProtection": false, "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "www1", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719", "diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2", "metadata": { "items": [ { "key": "startup-script", "value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html" } ] }, "name": "www1", "networkInterfaces": [ { "network": "projects/[PROJECT_ID]/global/networks/default", "subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default" } ], "tags": { "items": [ "network-lb-tag" ] } }
Crea instancias llamadas www2
y www3
con los mismos ajustes, excepto que debes sustituir www1
en los campos deviceName
, value
y name
.
Crear una regla de cortafuegos para permitir el tráfico externo a estas instancias de VM
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Haz clic en Crear regla de cortafuegos.
Asigne un Nombre de
www-firewall-network-lb
.Selecciona la Red a la que se aplica la regla de cortafuegos (Predeterminada).
En Objetivos, seleccione Etiquetas de destino especificadas.
En el campo Etiquetas de destino, introduce
network-lb-tag
.En Filtro de origen, elija Intervalos de IPv4.
Asigna el valor
0.0.0.0/0
a Intervalos IPv4 de origen para permitir el tráfico de cualquier origen.En Protocolos y puertos especificados, selecciona la casilla TCP e introduce
80
.Haz clic en Crear. La consola puede tardar unos instantes en mostrar la nueva regla de cortafuegos, o bien puede que tengas que hacer clic en Actualizar para verla.
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \ --target-tags network-lb-tag --allow tcp:80
api
Crea una regla de cortafuegos que permita todo el tráfico de la subred con el
firewalls.insert
** método**
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls { "name": "www-firewall-network-lb", "direction": "INGRESS", "priority": 1000, "targetTags": [ "network-lb-tag" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] } ], "sourceRanges": [ "0.0.0.0/0" ] }
Obtener las direcciones IP externas de tus instancias y verificar que están en ejecución
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Consulta las direcciones de tus instancias en la columna IP externa.
Verifica que tus instancias se estén ejecutando. Para ello, busca una marca de verificación verde a la izquierda del nombre de la instancia. Si no ves una marca de verificación verde, consulta la página de solución de problemas generales para instancias.
gcloud
Lista tus instancias para obtener sus direcciones IP de la columna
EXTERNAL_IP
.gcloud compute instances list
Verifica que cada instancia se esté ejecutando.
En la línea de comandos, ejecuta
curl
con la dirección IP externa de cada instancia para confirmar que todas las instancias responden.curl http://[IP_ADDRESS]
api
Obtener información sobre la instancia www1
con el
instances.get
método
Comprueba que en el campo status
se indica RUNNING
y busca la dirección IP externa en el campo natIP
.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1 { "kind": "compute#instance", "id": "6734015273571474749", "creationTimestamp": "2018-11-09T11:45:23.487-08:00", "name": "www1", "description": "", "tags": { "items": [ "network-lb-tag" ], "fingerprint": "9GVlO4gPawg=" }, "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2", "status": "RUNNING", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b", "canIpForward": false, "networkInterfaces": [ { "kind": "compute#networkInterface", "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default", "subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default", "networkIP": "10.128.0.2", "name": "nic0", "accessConfigs": [ { "kind": "compute#accessConfig", "type": "ONE_TO_ONE_NAT", "name": "External NAT", "natIP": "35.192.37.233", "networkTier": "PREMIUM" } ], "fingerprint": "lxD5f5ua_sw=" } ], "disks": [ { "kind": "compute#attachedDisk", "type": "PERSISTENT", "mode": "READ_WRITE", "source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1", "deviceName": "www1", "index": 0, "boot": true, "autoDelete": true, "licenses": [ "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster" ], "interface": "SCSI", "guestOsFeatures": [ { "type": "VIRTIO_SCSI_MULTIQUEUE" } ] } ], "metadata": { "kind": "compute#metadata", "fingerprint": "IyHRmHoJx6E=", "items": [ { "key": "startup-script", "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html" } ] }, "serviceAccounts": [ { "email": "674259759219-compute@developer.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/trace.append" ] } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1", "scheduling": { "onHostMaintenance": "MIGRATE", "automaticRestart": true, "preemptible": false }, "cpuPlatform": "Intel Haswell", "labelFingerprint": "42WmSpB8rSM=", "startRestricted": false, "deletionProtection": false }
Repite esta llamada a la API con www2
y www3
.
Configurar el servicio de balanceo de carga
A continuación, configura el servicio de balanceo de carga.
Cuando configures el servicio de balanceo de carga, tus instancias de máquina virtual recibirán paquetes destinados a la dirección IP externa estática que configures. Si usas una imagen proporcionada por Compute Engine, tus instancias se configuran automáticamente para gestionar esta dirección IP. Si usas otra imagen, tendrás que configurar esta dirección como alias en eth0 o como bucle de retorno en cada instancia.
Consola
No puedes usar la consola de Google Cloud para crear balanceadores de carga de red externos de transferencia basados en grupos de destino. En su lugar, usa gcloud o la API REST.
gcloud
Crea una dirección IP externa estática para tu balanceador de carga
gcloud compute addresses create network-lb-ip-1 \ --region us-central1
Añadir un recurso de comprobación del estado de HTTP antiguo
En este ejemplo se usan los ajustes predeterminados del mecanismo de comprobación del estado, pero también puedes personalizar la comprobación del estado.
gcloud compute http-health-checks create basic-check
Añadir un grupo de destino
Añade un grupo de destino en la misma región que tus instancias de máquina virtual. Usa la comprobación de estado que has creado en el paso anterior para este grupo de destino. Los grupos de destino requieren un servicio de comprobación del estado para funcionar.
gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-check
Añade tus instancias al grupo de destino
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-b
Las instancias de un grupo de destino deben pertenecer a la misma región, pero pueden distribuirse en diferentes zonas de la misma región. Por ejemplo, puedes tener instancias en la zona
us-central1-f
e instancias en la zonaus-central1-b
en un mismo grupo de destino porque están en la misma región,us-central1
.Añadir una regla de reenvío
Añade una regla de reenvío que sirva en nombre de una dirección IP externa y un intervalo de puertos que apunten a tu grupo de destino. En el campo
--address
, usa la dirección IP numérica o su nombre completo.gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
api
Crea una dirección IP externa estática para tu balanceador de carga
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }
Añadir una comprobación del estado de HTTP antigua
En este ejemplo se utiliza la configuración predeterminada del mecanismo de comprobación del estado, pero también puedes personalizarla.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }
Añadir un grupo de destino
Añade un grupo de destino en la misma región que tus instancias de máquina virtual. Usa la comprobación de estado que has creado en el paso anterior para este grupo de destino. Los grupos de destino requieren un servicio de comprobación del estado para funcionar.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }
Añade tus instancias al grupo de destino.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }
Repite esta llamada a la API para las instancias
www2
ywww3
.Las instancias de un grupo de destino deben pertenecer a la misma región, pero pueden distribuirse en diferentes zonas de la misma región. Por ejemplo, puedes tener instancias en la zona
us-central1-f
e instancias en la zonaus-central1-b
en un mismo grupo de destino porque están en la misma región,us-central1
.Añadir una regla de reenvío
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Enviar tráfico a tus instancias
Ahora que el servicio de balanceo de carga está configurado, puedes empezar a enviar tráfico a la regla de reenvío y ver cómo se dispersa el tráfico a diferentes instancias.
Buscar la dirección IP externa de la regla de reenvío
Consola
- Ve a la pestaña Reglas de reenvío de la página de balanceo de carga Avanzado de la Google Cloud consola.
Vaya a la pestaña Reglas de reenvío. - Busca
www-rule
, la regla de reenvío que usa el balanceador de carga. - En la columna Dirección IP de
www-rule
, anota la dirección IP externa que aparece.
gcloud
Introduce el siguiente comando para ver la dirección IP externa de la regla de reenvío www-rule
que usa el balanceador de carga.
gcloud compute forwarding-rules describe www-rule --region us-central1
api
Consulta la dirección IP externa de la regla de reenvío www-rule
con el
forwardingRules.get
método.
En el resultado, busca el campo IPAddress
.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule { "kind": "compute#forwardingRule", "id": "5133886346582800002", "creationTimestamp": "2018-11-09T14:21:33.574-08:00", "name": "www-rule", "description": "", "region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1", "IPAddress": "35.232.228.9", "IPProtocol": "TCP", "portRange": "80-80", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb", "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule", "loadBalancingScheme": "EXTERNAL", "networkTier": "PREMIUM" }
ICMP no compatible con instancias de backend
Los balanceadores de carga de red de paso a través externos no envían paquetes ICMP a las instancias de backend. Si envías un paquete ICMP, por ejemplo, con ping
o traceroute
, la respuesta no procede de las instancias de backend del balanceador de carga.
Google Cloud puede enviar una respuesta ICMP, aunque tengas reglas de cortafuegos que prohíban el tráfico ICMP en las instancias de backend del balanceador de carga. Este comportamiento no se puede cambiar.
Usar el comando curl
para acceder a la dirección IP externa
La respuesta del comando curl
se alterna aleatoriamente entre las tres instancias.
Si tu respuesta no tiene éxito al principio, es posible que tengas que esperar unos 30 segundos para que la configuración se cargue por completo y tus instancias se marquen como correctas antes de volver a intentarlo:
$ while true; do curl -m1 IP_ADDRESS; done
Siguientes pasos
- Para saber cómo funcionan los balanceadores de carga de red de paso a través externos con los grupos de destino, consulta el resumen de los balanceadores de carga de red de paso a través externos basados en grupos de destino.
- Para saber cómo funcionan los balanceadores de carga de red de paso a través externos con servicios de backend regionales en lugar de con grupos de destino, consulta lo siguiente:
- Descripción general del balanceador de carga de red de paso a través externo con servicios de backend
- Configurar un balanceador de carga de red de paso a través externo con un servicio de backend
- Migrar un balanceador de carga de red de paso a través externo de un grupo de destino a un servicio de backend
- Para configurar la protección de red avanzada contra DDoS en un balanceador de carga de red pasante externo mediante Cloud Armor, consulta Configurar la protección de red avanzada contra DDoS.
- Para obtener información sobre los problemas y las soluciones alternativas al usar un balanceador de carga de red de paso a través externo para el tráfico UDP, consulta Usar UDP con balanceadores de carga de red de paso a través externos.
- Para eliminar recursos y que no se te facture por ellos, consulta Limpiar una configuración de balanceo de carga.