Configura un balanceador de cargas de red con un servicio de backend

En esta guía, se proporcionan instrucciones para crear una implementación básica de balanceo de cargas de red con un servicio de backend regional. En este ejemplo, usaremos el balanceador de cargas para distribuir el tráfico entre las VM de backend en dos grupos de instancias zonales administrados en la región us-central1. Un enfoque con igual validez sería usar un solo grupo de instancias regional administrado en la región us-central1.

Balanceador de cargas de red con grupos de instancias zonales
Balanceo de cargas de red con grupos de instancias zonales

Esta situación distribuye el tráfico de TCP en instancias en buen estado. A fin de admitir este ejemplo, las verificaciones de estado de TCP están configuradas para garantizar que el tráfico se envíe solo a instancias en buen estado. Ten en cuenta que las verificaciones de estado de TCP solo son compatibles con un balanceador de cargas basado en servicios de backend. Los balanceadores de cargas de destino basados en grupos solo pueden usar verificaciones de estado HTTP heredadas.

En este ejemplo, se balancean cargas de tráfico de TCP, pero puedes usar el balanceo de cargas de red para balancear cargas del tráfico UDP, SSL y HTTP(S). Antes de comenzar, consulta la página Descripción general del balanceo de cargas de red.

Ten en cuenta que el balanceador de cargas de red es regional. Todos los componentes del balanceador de cargas (VM de backend, servicio de backend y regla de reenvío) deben estar en la misma región.

Antes de comenzar

Instala la herramienta de línea de comandos de gcloud. Para obtener una descripción general completa de la herramienta, consulta la guía de la herramienta de gcloud. Encontrarás comandos relacionados con el balanceo de cargas en la guía de referencia de API y gcloud.

Si no ejecutaste la herramienta de línea de comandos de gcloud antes, primero ejecuta gcloud init para autenticarte.

En esta guía, suponemos que estás familiarizado con Bash.

Crea grupos de instancias zonales administrados

Para esta situación de balanceo de cargas, crearás dos grupos de instancias zonales administrados de Compute Engine y, luego, instalarás un servidor Echo en cada instancia.

Las instancias que participan como VM de backend para balanceadores de cargas de red se deben ejecutar en el entorno invitado de Linux, el entorno invitado de Windows o algún otro proceso que proporcione una funcionalidad equivalente.

Configura las instancias

Cloud Console

  1. Ve a la página Grupos de instancias en Cloud Console.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear grupo de instancias.
  3. Selecciona Nuevo grupo de instancias administrado a la izquierda.
  4. En Nombre, ingresa ig-us-1.
  5. En Ubicación, selecciona Zona única.
  6. En Región, selecciona us-central1.
  7. En Zona, selecciona us-central1-a.
  8. En Plantilla de instancias, selecciona Crear una nueva plantilla de instancias.

    1. En Nombre, ingresa ig-us-template.
    2. Asegúrate de que el disco de arranque esté configurado en una imagen de Debian, como Debian GNU/Linux 9 (stretch). En estas instrucciones, se usan comandos que solo están disponibles en Debian, como apt-get.
    3. En Administración, seguridad, discos, redes, usuario único, en la pestaña Administración, inserta la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.

      #! /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
      
    4. En Herramientas de redes, propaga el campo Etiquetas con la etiqueta network-lb.

    5. Haga clic en Guardar y continuar.

  9. Especifica la cantidad de instancias que quieres crear en el grupo.

    En este ejemplo, en Modo de ajuste de escala automático, selecciona lo siguiente:

    • Sin ajuste de escala automático
    • En Cantidad de instancias, ingresa 2.
  10. Haz clic en Crear para crear el grupo de instancias nuevo.

  11. Repite los pasos anteriores para crear un segundo grupo de instancias administrado en la zona us-central1-c con las siguientes especificaciones:

    • Name: ig-us-2
    • Zona: us-central1-c
    • Plantilla de instancias: Usa la misma plantilla ig-us-template creada en la sección anterior.

gcloud

En las instrucciones de gcloud que se incluyen en esta guía, se supone que usas Cloud Shell o algún otro entorno con bash instalado.

  1. Crea una plantilla de instancias de VM con el servidor de HTTP con el comando gcloud compute instance-templates create.

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --tags=network-lb \
    --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'
    
  2. Crea un grupo de instancias administrado en la zona con el comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-1 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template
    
  3. Crea un segundo grupo de instancias administrado en la zona us-central1-c:

    gcloud compute instance-groups managed create ig-us-2 \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template
    

Configura las reglas de firewall

Crea una regla de firewall que permita que el tráfico externo llegue a las instancias de backend.

Console

  1. Ve a la página Firewalls en Google Cloud Console.
    Ir a la página Firewalls
  2. Haz clic en Crear regla de firewall.
  3. Ingresa un Nombre de allow-network-lb.
  4. Selecciona la Red a la que se aplicará la regla de firewall (Predeterminada).
  5. En Destinos, selecciona Etiquetas de destino especificadas.
  6. En el campo Etiquetas de destino, ingresa network-lb.
  7. Establece los Rangos de IP de origen en 0.0.0.0/0, lo que permite el tráfico desde cualquier fuente. Esto permite que el tráfico externo y los sondeos de verificaciones de estado lleguen a las instancias de backend.
  8. En Protocolos y puertos especificados, haz clic en la casilla de verificación junto a TCPy, luego, ingresa 80.
  9. Haga clic en Crear. Pueden pasar unos minutos hasta que Console muestre la regla de firewall nueva, o es posible que debas hacer clic en Actualizar a fin de ver la regla.

gcloud

gcloud compute firewall-rules create allow-network-lb \
    --target-tags network-lb \
    --allow tcp:80

Configura el balanceador de cargas

A continuación, configura el balanceador de cargas.

Cuando configuras el balanceador de cargas, 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 configurarán de forma automática para controlar esta dirección IP. Si usas cualquier otra imagen, debes configurar esta dirección como un alias en eth0 o como un bucle invertido en cada instancia.

Console

  1. Ve a la página Crear un balanceador de cargas en Google Cloud Console.
    Ir a la página Crear un balanceador de cargas
  2. En Balanceo de cargas de TCP, haz clic en el botón Iniciar configuración.

  3. En Orientado a Internet o solo interno, selecciona From Internet to my VMs.

  4. En el caso de Varias regiones o una sola región, selecciona Single region only.

  5. En Tipo de backend, selecciona Servicio de backend (beta).

  6. Haga clic en Continuar.

Configuración de backend

  1. En la pantalla New TCP load balancer, ingresa un Nombre de tcp-network-lb para el balanceador de cargas nuevo.
  2. Haga clic en Configuración de backend. El Nombre del balanceador de cargas que ingresaste antes aparece, pero no puedes modificarlo.
  3. Haz clic en Configuración de backend y realiza los siguientes cambios:
    1. En Región, selecciona us-central1.
    2. En Backends, usa el menú desplegable Grupo de instancias para seleccionar ig-us-1. Haz clic en Listo. Haz clic en Agregar backend y repite este paso para agregar ig-us-2.
    3. En Verificación de estado, elige Crear una verificación de estado o Crear otra verificación de estado y, luego, ingresa la siguiente información:
      • Name: tcp-health-check
      • Protocolo: TCP
      • Puerto: 80
    4. Haga clic en Guardar y continuar.
    5. Verifica que haya una marca de verificación azul junto a Configuración de backend antes de continuar.

Configuración de frontend

  1. Haga clic en Configuración de frontend.
  2. Ingresa un Nombre de network-lb-forwarding-rule.
  3. En IP, haz clic en el menú desplegable y selecciona Crear dirección IP.
    1. En la pantalla Reservar una dirección IP estática nueva, asigna un Nombre de network-lb-ip.
    2. Haga clic en Reservar.
  4. Elige Individual e ingresa 80 en el Número de puerto.
  5. Haz clic en el botón Listo.

    El círculo azul con una marca de verificación a la izquierda de la Configuración de Frontend indica que la configuración se realizó de forma correcta.

Revisa la configuración

  1. Haz clic en el botón Revisar y finalizar para verificar la configuración del balanceador de cargas.
  2. Si la configuración es correcta, haz clic en Crear. El balanceador de cargas tarda unos cuantos minutos en crearse.

    En la pantalla de balanceo de cargas, en la columna Backend de tu balanceador de cargas nuevo, deberías ver una marca de verificación verde que muestra que el balanceador de cargas nuevo está en buen estado.

gcloud

  1. Crea una dirección IP externa estática para tu balanceador de cargas.

    gcloud compute addresses create network-lb-ip \
        --region us-central1
    
  2. Crea una verificación de estado de TCP.

    gcloud compute health-checks create tcp tcp-health-check \
        --region us-central1 \
        --port 80
    
  3. Crear un servicio de backend.

    gcloud compute backend-services create network-lb-backend-service \
        --protocol TCP \
        --health-checks tcp-health-check \
        --health-checks-region us-central1 \
        --region us-central1
    
  4. Agrega los dos grupos de instancias al servicio de backend.

    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-1 \
    --instance-group-zone us-central1-a \
    --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-2 \
    --instance-group-zone us-central1-c \
    --region us-central1
    
  5. Crea una regla de reenvío para enrutar el tráfico TCP entrante al servicio de backend. Usa la dirección IP reservada en el paso 1 como la dirección IP externa estática del balanceador de cargas.

    gcloud compute forwarding-rules create network-lb-forwarding-rule \
        --load-balancing-scheme external \
        --region us-central1 \
        --ports 80 \
        --address network-lb-ip \
        --backend-service network-lb-backend-service
    

Prueba el balanceador de cargas

Ahora que el servicio de balanceo de cargas está configurado, puedes comenzar a enviar tráfico a la dirección IP externa del balanceador de cargas y ver cómo se distribuye el tráfico a las instancias de backend.

Busca la dirección IP externa del balanceador de cargas

Console

  1. En la página de balanceo de cargas Avanzado, ve a la pestaña Reglas de reenvío.
    Ir a la pestaña Reglas de reenvío
  2. Ubica network-lb-forwarding-rule, la regla de reenvío que usa el balanceador de cargas.
  3. En la columna Dirección IP de network-lb-forwarding-rule, anota la dirección IP externa que aparece en la lista.

gcloud

Ingresa el siguiente comando para ver la dirección IP externa de la regla de reenvío network-lb-forwarding-rule que usa el balanceador de cargas.

gcloud compute forwarding-rules describe network-lb-forwarding-rule \
    --region us-central1

Envía tráfico al balanceador de cargas

Este procedimiento envía tráfico externo al balanceador de cargas.

  1. Realiza solicitudes web al balanceador de cargas mediante curl para contactar a su dirección IP.

    $ while true; do curl -m1 IP_ADDRESS; done
    
  2. Ten en cuenta el texto que muestra el comando curl. El nombre de la VM de backend que genera la respuesta se muestra en ese texto; por ejemplo: Page served from: VM_NAME.

    La respuesta del comando curl se alterna de manera aleatoria entre las tres instancias. Si al principio tu respuesta es incorrecta, es posible que debas esperar alrededor de 30 segundos para que la configuración se cargue por completo y tus instancias se marquen como en buen estado antes de intentar otra vez.

¿Qué sigue?