En esta guía, se proporcionan instrucciones a fin de crear una implementación ponderada del balanceador de cargas de red de transferencia externo para cada instancia de máquina virtual (VM) mediante un servicio de backend regional.
En este instructivo, crearás un grupo de instancias con tres instancias de VM y asignarás ponderaciones para cada instancia. Crea una verificación de estado HTTP para informar las ponderaciones de las instancias de backend. El balanceo de cargas ponderado está habilitado en el servicio de backend con la política de balanceador de cargas de localidad como WEIGHTED_MAGLEV
.
Antes de comenzar
- Lee la descripción general del balanceador de cargas de red de transferencia externo basado en servicios de backend.
Instala Google Cloud CLI. Para obtener una descripción general completa de la herramienta, consulta la descripción general de la CLI de gcloud. Encontrarás comandos relacionados con el balanceo de cargas en la referencia de la API y la CLI de gcloud.
Si nunca ejecutaste Google Cloud CLI, primero ejecuta
gcloud init
para autenticarte.Habilita la API de procesamiento.
gcloud services enable compute.googleapis.com
Crea redes de VPC, subredes y reglas de firewall
Crea una red de VPC, una subred y reglas de firewall de permiso de entrada para permitir conexiones a las VMs de backend de tu balanceador de cargas.
Crear una red y una subred de VPC
a. Para crear la red de VPC, ejecuta el comando
gcloud compute networks create
:gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. En este ejemplo, el rango principal de direcciones IPv4 de la subred es
10.10.0.0/24
. Para crear la subred, ejecuta el comandogcloud compute networks subnets create
:gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Reemplaza lo siguiente:
NETWORK_NAME
es el nombre de la red de VPC que se creará.SUBNET_NAME
: es el nombre de la subred que se creará.
Crea una regla de firewall de permiso de entrada para permitir que los paquetes enviados a los puertos TCP de destino 80 y 443 se entreguen a las VMs de backend. En este ejemplo, la regla de firewall permite conexiones desde cualquier dirección IP de origen. La regla de firewall se aplica a las VMs con la etiqueta de red
network-lb-tag
.Para crear la regla de firewall, ejecuta el comando
gcloud compute firewall-rules create
:gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
Reemplaza
FIREWALL_RULE_NAME
por el nombre de la regla de firewall que deseas crear.
Crea instancias de VM y asigna ponderaciones
Crea tres instancias de VM y asigna ponderaciones:
Configura tres instancias de VM de backend para mostrar las ponderaciones en el encabezado
X-Load-Balancing-Endpoint-Weight
con respuestas HTTP. Para este instructivo, configurarás una instancia de backend que informará una ponderación de cero, una segunda instancia de backend que informará una ponderación de 100 y una tercera instancia de backend que informará una ponderación de 900.Para crear las instancias, ejecuta el comando
gcloud compute instances create
:gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
Crea un grupo de instancias
En este instructivo, proporcionas instrucciones para crear un grupo de instancias no administrado que contenga las tres instancias de VM (instance-0
, instance-100
y instance-900
).
Para crear el grupo de instancias, ejecuta el comando
gcloud compute instance-groups unmanaged create
:gcloud compute instance-groups unmanaged create INSTANCE_GROUP \ --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
Reemplaza
INSTANCE_GROUP
por el nombre del grupo de instancias que deseas crear.
Crea una verificación de estado HTTP
En este instructivo, proporcionarás instrucciones para crear una verificación de estado HTTP a fin de leer la respuesta HTTP que contiene la ponderación de la VM de backend.
Para crear la verificación de estado HTTP, ejecuta el comando
gcloud compute health-checks create
:gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Reemplaza
HTTP_HEALTH_CHECK_NAME
por el nombre de la verificación de estado HTTP que se creará.
Crear un servicio de backend
En el siguiente ejemplo, se proporcionan instrucciones a fin de crear un servicio de backend externo regional configurado para usar el balanceo de cargas ponderado.
Crea un servicio de backend con la verificación de estado HTTP y establece la política de balanceador de cargas de localidad como
WEIGHTED_MAGLEV
.Para crear el servicio de backend, ejecuta el comando
gcloud compute backend-services create
:gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
Reemplaza
BACKEND_SERVICE_NAME
por el nombre del servicio de backend que deseas crear.
Agrega el grupo de instancias al servicio de backend.
Para agregar el grupo de instancias, ejecuta el comando
gcloud compute backend-services add-backend
:gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
Reserva una dirección IP externa regional para el balanceador de cargas.
Para reservar una o más direcciones IP, ejecuta el comando
gcloud compute addresses create
:gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Reemplaza
ADDRESS_NAME
por el nombre de la dirección IP que deseas crear.Usa el comando
compute addresses describe
para ver el resultado. Anota la dirección IP externa estática reservada (IP_ADDRESS
).gcloud compute addresses describe ADDRESS_NAME
Crea una regla de reenvío con la dirección IP externa regional reservada
IP_ADDRESS
. Conecta la regla de reenvío al servicio de backend.Para crear la regla de reenvío, ejecuta el comando
gcloud compute forwarding-rules create
:gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
Reemplaza lo siguiente:
FORWARDING_RULE
: el nombre de la regla de reenvío que se creará.IP_ADDRESS
: La dirección IP que se asignará a la instancia. Usa la dirección IP externa estática reservada, no el nombre de la dirección.
Verifica las ponderaciones de los backends con la API del servicio de backend
Comprueba que las ponderaciones de backends se informen de manera correcta a la verificación de estado HTTP.
Para obtener ponderaciones de backends (junto con los estados) de un servicio de backend, ejecuta el comando
gcloud compute backend-services get-health
:gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region=us-central1
Esta es la salida:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth