1. Introducción
Te damos la bienvenida al codelab de optimizaciones avanzadas de 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 primero consultes el documento sobre el balanceo de cargas en la nube ( 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 HTTP
Durante este codelab, configurarás dos grupos de instancias administrados. Crearás un balanceador de cargas HTTPS externo global. El balanceador de cargas usará 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 las configuraciones que estableciste funcionen correctamente.
Qué aprenderás
- Cómo configurar ServiceLbPolicy para ajustar tu balanceador de cargas
Requisitos
- Conocimiento del balanceador de cargas HTTPS externo La primera mitad de este codelab es bastante similar al codelab de balanceador de cargas HTTP externo con administración avanzada de tráfico (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Te recomendamos que primero revises esa información.
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, ahora crearás una regla de firewall. La regla de firewall se usará para permitir que todas las IP 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 eso, 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 de 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 de alcance zonal o regional. En este ejercicio del lab, crearemos grupos de instancias administradas 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 funciones del servidor web que usaremos para simular una aplicación web. No dudes en 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 Apache con una secuencia de comandos PHP simple que renderiza algo como lo siguiente:
Página publicada desde: us-east1-a-mig-ww2h
Para asegurarte de que tus servidores web funcionan 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 sus grupos de instancias.
A continuación, realiza 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, navega a http://<IP_Address>
5. Configura el balanceador de cargas
Crea una 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; 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
Cómo reservar una dirección IP externa
Para este paso, deberás reservar una dirección IP estática disponible a nivel global que, más adelante, se conectará al balanceador de cargas.
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
Cómo agregar MIG a los servicios de backend
Ahora que creamos los servicios de backend, debemos agregar los grupos de instancias administradas 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
Crea un 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 antes 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 asignará la dirección IP reservada antes 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 siege-vm 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 establecida la conexión, ejecuta el siguiente comando para generar carga. Usa la dirección IP que reservaste antes para el balanceador de cargas de 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
Cómo verificar la distribución de la carga
Ahora que Siege se está ejecutando, es hora 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 hora de detener el asedio. Para ello, regresa a la terminal de SSH de siege-vm y presiona CTRL + C para detener el ataque.
7. Configurar la política de Service LB
Crea una política de balanceador de cargas de servicio
Ahora que terminamos la configuración básica, crearemos una política de Service LB y probaremos las funciones avanzadas. A modo de ejemplo, configuraremos el servicio para que use algunos parámetros de configuración avanzados de balanceo de cargas. En este ejemplo, solo crearemos una política para ejercitar 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
Cómo adjuntar la política de balanceador de cargas del servicio al servicio de backend
Ahora adjuntaremos la nueva política a tu servicio de backend existente arriba.
Desde Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. Cómo ajustar el estado del backend
En este punto, se aplicó la nueva política de balanceo de cargas del servicio a tu servicio de backend. Por lo tanto, técnicamente, puedes ir directamente a la limpieza. Sin embargo, como parte del codelab, también realizaremos algunos ajustes adicionales de producción 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, estableceremos una conexión SSH a las VMs de us-east1-b-mig y las haremos inoperativas. Con el umbral del 25%, deberás establecer una conexión SSH a cuatro de las VMs y cerrar el servidor 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 agotamiento de capacidad automática y us-east1-b-mig no recibirá solicitudes nuevas.
9. Verifica que funcione la función Desviación automática de la capacidad
Cómo reiniciar Siege
Para verificar el nuevo atributo, volveremos a reutilizar la VM de Siege. Establezcamos una conexión SSH a la VM que creó en el paso anterior. Una vez que se cree, haz clic en SSH para iniciar una terminal y conectarte.
Una vez establecida la conexión, ejecuta el siguiente comando para generar carga. Usa la dirección IP que reservaste antes para el balanceador de cargas de 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 hora de detener el asedio. Para ello, regresa a la terminal SSH de siege-vm y presiona CTRL + C para detener la ejecución de siege.
10. Pasos de 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 la política de balanceador de cargas de servicios.
- Configura tu servicio de backend con la función de desvío de capacidad automático.
Próximos pasos
- Prueba otras funciones proporcionadas por la política de Service lb.