1. Introducción
Te damos la bienvenida al codelab de optimizaciones avanzadas del balanceo de cargas.
En este codelab, aprenderás a configurar opciones avanzadas de balanceo de cargas para el balanceador de cargas de aplicaciones externo global. Antes de comenzar, te recomendamos que consultes primero el documento sobre el balanceo de cargas de Cloud ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

Figura 1: Flujo de trabajo para elegir un extremo de destino con el balanceador de cargas de aplicaciones externo global.
Topología y casos de uso del codelab

Figura 2. Topología de enrutamiento del balanceador de cargas de HTTP
En este lab de programación, configurarás dos grupos de instancias administrados. Crearás un balanceador de cargas de HTTPS externo global. El balanceador de cargas utilizará varias funciones de la lista de capacidades avanzadas que admite el balanceador de cargas basado en Envoy. Una vez que se implemente, generarás una carga simulada y verificarás que los parámetros de configuración que estableciste funcionen correctamente.
Qué aprenderás
- Cómo configurar ServiceLbPolicy para ajustar el balanceador de cargas
Requisitos
- Conocimiento del balanceo de cargas HTTPS externo La primera mitad de este codelab es bastante similar al codelab de LB de HTTPs externo con administración avanzada de tráfico (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Se recomienda que lo hagas primero.
2. Antes de comenzar
En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
Habilita las APIs
Habilita todos los servicios necesarios
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. Crea la red de VPC
Crear red de VPC
Desde Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
Crea reglas de firewall de VPC
Después de crear la VPC, crearás una regla de firewall. La regla de firewall se usará para permitir que todas las IPs accedan a la IP externa del sitio web de la aplicación de prueba en el puerto 80 para el tráfico http.
Desde Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
Salida
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
En este codelab, ajustaremos el estado de las VMs. Por lo tanto, también crearemos reglas de firewall para permitir SSH.
Desde Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Salida
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. Configura los grupos de instancias administrados
Debes configurar grupos de instancias administrados que incluyan los patrones para los recursos de backend que usa el balanceador de cargas HTTP. Primero, crearemos plantillas de instancias que definan la configuración de las VMs que se crearán para cada región. A continuación, para un backend en cada región, crearemos un grupo de instancias administrado que haga referencia a una plantilla de instancias.
Los grupos de instancias administrados pueden ser zonales o regionales. En este ejercicio de lab, crearemos grupos de instancias administrados zonales.
En esta sección, puedes ver una secuencia de comandos de inicio creada previamente a la que se hará referencia cuando se cree la instancia. Esta secuencia de comandos de inicio instala y habilita las capacidades del servidor web que usaremos para simular una aplicación web. Puedes explorar esta secuencia de comandos.
Crea las plantillas de instancias
El primer paso es crear una plantilla de instancias.
Desde Cloud Shell
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
Salida
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Ahora puedes verificar que nuestras plantillas de instancias se hayan creado correctamente con el siguiente comando de gcloud:
Desde Cloud Shell
gcloud compute instance-templates list
Salida
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Crea los grupos de instancias
Ahora debemos crear un grupo de instancias administrado a partir de las plantillas de instancias que creamos antes.
Desde Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
Desde Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
Podemos verificar que nuestros grupos de instancias se crearon correctamente con el siguiente comando de gcloud:
Desde Cloud Shell
gcloud compute instance-groups list
Salida
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
Verifica la funcionalidad del servidor web
Cada instancia está configurada para ejecutar un servidor web de Apache con una secuencia de comandos de PHP simple que renderiza algo como lo siguiente:
Página publicada desde: us-east1-a-mig-ww2h
Para asegurarte de que tus servidores web funcionen correctamente, navega a Compute Engine -> Instancias de VM. Asegúrate de que tus instancias nuevas (p.ej., us-east1-a-mig-xxx) se hayan creado según las definiciones de su grupo de instancias.
Ahora, haz una solicitud web en tu navegador para asegurarte de que el servidor web se esté ejecutando (esto puede tardar un minuto en iniciarse). En la página Instancias de VM de Compute Engine, selecciona una instancia creada por tu grupo de instancias y haz clic en su IP externa (pública).
O bien, en tu navegador, ve a http://<IP_Address>.
5. Configura el balanceador de cargas
Crear verificación de estado
Primero, debemos crear una verificación de estado básica para asegurarnos de que nuestros servicios estén en funcionamiento correctamente. Crearemos una verificación de estado básica, pero hay muchas más personalizaciones avanzadas disponibles.
Desde Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Reserva una dirección IP externa
Para este paso, deberás reservar una dirección IP estática disponible a nivel global que se adjuntará al balanceador de cargas más adelante.
Desde Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Asegúrate de anotar la dirección IP que se reservó.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Crea servicios de backend
Ahora debemos crear un servicio de backend para los grupos de instancias administrados que creamos antes.
Desde Cloud Shell
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
Agrega MIGs a los servicios de backend
Ahora que creamos los servicios de backend, debemos agregar los grupos de instancias administrados que creamos antes a cada servicio de backend.
Desde Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Desde Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Para verificar que se hayan agregado los backends, ejecuta el siguiente comando.
Desde Cloud Shell
gcloud compute backend-services list
Salida
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
Crear mapa de URL
Ahora crearemos un mapa de URL.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
Crea un frontend de HTTP
El último paso para crear el balanceador de cargas es crear el frontend. Esto asignará la dirección IP que reservaste anteriormente al mapa de URL del balanceador de cargas que creaste.
Desde Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
A continuación, debes crear una regla de reenvío global que asigne la dirección IP reservada anteriormente al proxy HTTP.
Desde Cloud Shell
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
En este punto, puedes confirmar que el balanceador de cargas funciona con la dirección IP que anotaste antes.
6. Verifica que el balanceador de cargas funcione
Para verificar que la función de balanceo de cargas funcione, debes generar algo de carga. Para ello, crearemos una VM nueva para simular la carga.
Crea Siege-vm
Ahora crearás la VM de Siege que usarás para generar carga.
Desde Cloud Shell
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
Salida
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
A continuación, puedes establecer una conexión SSH a la VM que creaste. Una vez que se cree, haz clic en SSH para iniciar una terminal y conectarte.
Una vez que se establezca la conexión, ejecuta el siguiente comando para generar carga. Usa la dirección IP que reservaste antes para el balanceador de cargas HTTP externo.
Desde Cloud Shell
siege -c 20 http://$lb-ipv4-2
Salida
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Verificar la distribución de la carga
Ahora que Siege se está ejecutando, es momento de verificar que el tráfico se distribuya de manera equitativa entre los dos grupos de instancias administrados.
Detén el asedio
Ahora que demostraste que la división avanzada del tráfico funciona, es momento de detener el ataque. Para ello, regresa a la terminal SSH de siege-vm y presiona CTRL + C para detener la ejecución de siege.
7. Configura la política del LB de servicio
Crea una política de LB de servicio
Ahora que terminamos con la configuración básica, crearemos una política de Service Lb y probaremos las funciones avanzadas. Como ejemplo, configuraremos el servicio para que use algunos parámetros de configuración avanzados del balanceo de cargas. En este ejemplo, solo crearemos una política para probar la función de desvío de capacidad automática. Pero no dudes en probar otras funciones.
Desde Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Podemos verificar que nuestra política se creó correctamente con el siguiente comando de gcloud:
Desde Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Salida
NAME http-policy
Vincula la política de LB de servicio al servicio de backend
Ahora adjuntaremos la nueva política al servicio de backend existente que se mencionó anteriormente.
Desde Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Ajusta el estado del backend
En este punto, se aplicó la nueva política de LB del servicio a tu servicio de backend. Por lo tanto, técnicamente, puedes pasar directamente a la limpieza. Sin embargo, como parte del codelab, también realizaremos algunos ajustes de producción adicionales para mostrarte cómo funciona la nueva política.
La función de desvío de capacidad automática quitará automáticamente un MIG de backend del balanceador de cargas cuando la cantidad total de backends en buen estado disminuya por debajo de un umbral (25%). Para probar esta función, nos conectaremos a las VMs en us-east1-b-mig a través de SSH y las marcaremos como no aptas. Con el umbral del 25%, deberás establecer una conexión SSH a cuatro de las VMs y cerrar el servidor de Apache.
Para ello, elige cuatro VMs y haz clic en SSH para iniciar una terminal y conectarte. Luego, ejecuta el siguiente comando.
sudo apachectl stop
En este punto, se activará la función de reducción automática de capacidad y us-east1-b-mig no recibirá solicitudes nuevas.
9. Verifica que la función de descarga automática de capacidad esté funcionando
Cómo reiniciar el asedio
Para verificar la nueva función, volveremos a usar la VM de Siege. Establezcamos una conexión SSH a la VM que creaste en el paso anterior. Una vez que se cree, haz clic en SSH para iniciar una terminal y conectarte.
Una vez que se establezca la conexión, ejecuta el siguiente comando para generar carga. Usa la dirección IP que reservaste antes para el balanceador de cargas HTTP externo.
Desde Cloud Shell
siege -c 20 http://$lb-ipv4-2
Salida
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
En este punto, notarás que todas las solicitudes se envían a us-east1-a-mig.
Detén el asedio
Ahora que demostraste que la división avanzada del tráfico funciona, es momento de detener el ataque. Para ello, regresa a la terminal SSH de siege-vm y presiona CTRL + C para detener la ejecución de siege.
10. Pasos para la limpieza
Ahora que terminamos con el entorno del lab, es hora de desmantelarlo. Ejecuta los siguientes comandos para borrar el entorno de prueba.
Desde Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Crea un balanceador de cargas de aplicaciones externo con una política de LB de servicio.
- Configura tu servicio de backend con la función de desvío de capacidad automático.
Próximos pasos
- Prueba otras funciones que proporciona la política del balanceador de cargas del servicio.