Configura el balanceo de cargas ponderado

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

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.

  1. 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 comando gcloud 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á.
  2. 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:

  1. 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-10 \
      --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-10 \
      --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-10 \
      --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.

  1. 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.

  2. 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
      
  3. 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
      
  4. 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.

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