Crea un balanceador de cargas de HTTPS

En esta guía, se muestra cómo crear un balanceador de cargas de HTTPS de Google Cloud Platform (GCP) que selecciona servicios de backend en función de las rutas de URL de solicitud (balanceo de cargas basado en el contenido) y enruta las solicitudes a backends que están cerca de los clientes (balanceo de cargas entre regiones).

Antes de comenzar, asegúrate de estar familiarizado con los conceptos generales del balanceo de cargas de HTTP(S).

Descripción general

En esta guía, se proporcionan instrucciones para crear un balanceador de cargas que dirija el tráfico según la ruta en la URL de la solicitud y que balancee el tráfico en varias regiones. Puedes crear dos instancias de Compute Engine en las regiones de EE.UU. (en la zona us-central1-b) y de la UE (en la zona eu-west1-b). Luego, crearás un balanceador de cargas que enruta el tráfico a estas instancias.

Después de completar las instrucciones, tu balanceador de cargas se configura de la siguiente manera:

  • El tráfico que contiene una ruta de URL que comienza con /video se enruta a un servicio de backend.
  • El tráfico con una ruta de URL que no coincide con este patrón se enruta a otro servicio de backend.

En este documento instructivo, se crea la configuración que se ilustra en el siguiente diagrama:

Balanceo de cargas de HTTPS interregional y basado en el contenido (haz clic para ampliar)
Balanceo de cargas de HTTPS interregional y basado en el contenido (haz clic para ampliar)

La secuencia de eventos en el diagrama es la siguiente:

  1. Un cliente accede a la URL https://www.example.com/video/concert y envía una solicitud de contenido a la dirección IP externa definida en la regla de reenvío. La solicitud puede usar IPv4 o IPv6; hay reglas de reenvío para ambos protocolos.
  2. Una regla de reenvío dirige la solicitud al proxy HTTPS de destino.
  3. El proxy de destino usa las reglas configuradas en la asignación de URL para determinar qué servicio de backend recibirá la solicitud. Una solicitud que contiene /video, como https://www.example.com/video/concert, se envía a video-backend-service. Cualquier otra ruta de URL se envía al servicio predeterminado, web-backend-service.
  4. El balanceador de cargas determina cuál de los grupos de instancias del servicio de backend debe entregar la solicitud, en función de su carga y proximidad al cliente, y dirige la solicitud a una instancia en ese grupo.
  5. La instancia entrega el contenido que solicita cada usuario. Las instancias de video entregan contenido de video, mientras que las instancias de www entregan el resto del contenido.

Antes de comenzar

Estas instrucciones requieren un proyecto. Si aún no tienes un proyecto, crea uno ahora. Mediante estas instrucciones, podrás crear una red de VPC en modo personalizado. También debes configurar reglas de firewall personalizadas para permitir que el tráfico llegue a las instancias.

Si prefieres trabajar desde la línea de comandos, instala la herramienta de línea de comandos de gcloud. Consulta la descripción general de gcloud para obtener información conceptual y de instalación sobre la herramienta.

Si aún no ejecutaste la herramienta de línea de comandos de gcloud, primero ejecuta gcloud init para inicializar tu directorio de gcloud.

En este ejemplo, el balanceador de cargas acepta solicitudes HTTPS de clientes y las envía mediante proxy como HTTP a los backends. También puedes configurar un balanceador de cargas para aceptar solicitudes HTTP, así como para usar HTTPS cuando se envían solicitudes de proxy a backends.

Permisos

Si quieres completar los pasos de esta guía, debes tener permiso para crear instancias de Compute Engine en un proyecto. Debes tener una función de propietario o de editor del proyecto o las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear instancias Administrador de instancias
Agregar y quitar reglas de firewall Administrador de seguridad
Crear componentes del balanceador de cargas Administrador de la red
Crear un proyecto (opcional) Creador del proyecto

Configuración

Crea un proyecto nuevo (opcional)

Recomendamos que los usuarios con el permiso resourcemanager.projects.create creen un proyecto nuevo antes de seguir con el resto de este instructivo. Esto simplifica el proceso de limpieza al final de la guía.

Configura una red y subredes

En este ejemplo, usa las siguientes regiones, subredes y red de VPC:

  • Red: es una red de VPC en modo personalizado denominada lb-network.

  • Subredes en dos regiones diferentes:

    • us-subnet usa 10.1.10.0/24 para su rango de IP principal y se ubica en la región us-central1
    • eu-subnet usa 10.1.11.0/24 para su rango de IP principal y se encuentra en la región europe-west1

Para crear la red y subred de ejemplo, sigue estos pasos:

Console


  1. Dirígete a la página Redes de VPC en Google Cloud Platform Console.
    Ir a la página Redes de VPC
  2. Haz clic en Crear red de VPC.
  3. Ingresa un Nombre de lb-network.
  4. En la sección Subredes, crea la primera subred:
    • Configura el Modo de creación de subred como Personalizado.
    • En la sección Subred nueva, ingresa la siguiente información:
      • Nombre: us-subnet
      • Región: us-central1
      • Rango de direcciones IP: 10.1.10.0/24
      • Haz clic en Listo.
  5. En la sección Subredes, crea Agregar subred y crea la segunda subred:
    • Configura el Modo de creación de subred como Personalizado.
    • En la sección Subred nueva, ingresa la siguiente información:
      • Nombre: eu-subnet
      • Región: europe-west1
      • Rango de direcciones IP: 10.1.11.0/24
      • Haz clic en Listo.
  6. Haz clic en Crear.

gcloud


  1. Crea la red de VPC personalizada:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crea la us-subnet:

    gcloud compute networks subnets create us-subnet \
      --network=lb-network \
      --range=10.1.10.0/24 \
      --region=us-central1
    
  3. Crea la eu-subnet:

    gcloud compute networks subnets create eu-subnet \
      --network=lb-network \
      --range=10.1.11.0/24 \
      --region=europe-west1
    

Configura las reglas de firewall

La regla de denegación de entrada predeterminada bloquea el tráfico entrante a las instancias de backend, incluido el tráfico del balanceador de cargas y los sistemas de verificación de estado de GCP. Debes crear reglas de firewall nuevas para anular la regla predeterminada y permitir que el tráfico llegue a tus instancias.

En este ejemplo, se crean las siguientes reglas de firewall:

  • fw-allow-ssh: una regla de entrada, aplicable a las instancias a las que se les realice un balanceo de cargas, que permite la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puedes elegir un rango de IP de origen más restrictivo para esta regla; por ejemplo, puedes especificar solo los rangos de IP del sistema desde el cual iniciarás sesiones SSH. En este ejemplo, se usa la etiqueta de destino allow-ssh para identificar las VM a las que debe aplicarse.

  • fw-allow-health-check-and-proxy: una regla de entrada, aplicable a las instancias a las que se les realice un balanceo de cargas, que permite el tráfico del balanceador de cargas y de los sistemas de verificación de estado de GCP (130.211.0.0/22 y 35.191.0.0/16). En este ejemplo, se usa la etiqueta de destino allow-hc-and-proxy para identificar las instancias a las que se debe aplicar.

Console


  1. Dirígete a la página Firewalls en Google Cloud Platform Console.
    Ir a la página Firewalls
  2. Haz clic en Crear regla de firewall para crear la primera regla de firewall:
    1. Ingresa un Nombre de fw-allow-ssh.
    2. En Red, selecciona lb-network.
    3. En Destinos, selecciona Etiquetas de destino especificadas.
    4. Propaga el campo Etiquetas de destino con allow-ssh.
    5. Configura el Filtro de fuente como IP ranges.
    6. Configura Rangos de IP de origen como 0.0.0.0/0.
    7. En Protocolos y puertos, selecciona Protocolos y puertos especificados.
    8. Selecciona la casilla de verificación junto a tcp y escribe 22 para el número de puerto.
    9. Haz clic en Crear.
  3. Haz clic en Crear regla de firewall para crear la segunda regla de firewall:
    1. Ingresa un Nombre de fw-allow-health-check-and-proxy.
    2. En Red, selecciona lb-network.
    3. En Destinos, selecciona Etiquetas de destino especificadas.
    4. Propaga el campo Etiquetas de destino con allow-hc-and-proxy.
    5. Configura el Filtro de fuente como IP ranges.
    6. Configura los Rangos de IP de origen como 130.211.0.0/22 y 35.191.0.0/16.
    7. En Protocolos y puertos, selecciona Protocolos y puertos especificados.
    8. Selecciona la casilla de verificación junto a tcp y escribe 80,443 para el número de puerto.
    9. Haz clic en Crear.

gcloud


  1. Crea la regla de firewall fw-allow-ssh para permitir la conectividad SSH a las VM con la etiqueta de red allow-ssh. Cuando omites source-ranges, GCP interpreta que la regla significa cualquier fuente.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. Crea la regla fw-allow-health-check-and-proxy para permitir que el balanceador de cargas y las verificaciones de estado de GCP se comuniquen con instancias de backend en los puertos TCP 80 y 443:

    gcloud compute firewall-rules create fw-allow-health-check-and-proxy \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-hc-and-proxy \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80,tcp:443
    

Configuración de las instancias

En este ejemplo, se crean ocho instancias de máquinas virtuales: cuatro para entregar contenido de video y cuatro para entregar todo el contenido restante. Usa una secuencia de comandos de inicio a fin de instalar el software del servidor web de Apache una página principal única para cada instancia.

Console


Crea VM de backend

  1. Dirígete a la página Instancias de VM en Google Cloud Platform Console.
    Ir a la página Instancias de VM
  2. Repite los siguientes pasos para crear ocho VM con las siguientes combinaciones de nombre, región y subred:
    • Nombre: www-us-01, región: us-central1, subred: us-subnet
    • Nombre: www-us-02, región: us-central1, subred: us-subnet
    • Nombre: video-us-01, región: us-central1, subred: us-subnet
    • Nombre: video-us-02, region: us-central1, subred: us-subnet
    • Nombre: www-eu-01, región: europe-west1, subred: eu-subnet
    • Nombre: www-eu-02, región: europe-west1, subred: eu-subnet
    • Nombre: video-eu-01, región: europe-west1, subred: eu-subnet
    • Nombre: video-eu-02, región: europe-west1, subred: eu-subnet
  3. Haz clic en Crear instancia.
  4. Configura el Nombre y la Región como se indica en el paso 2. Puedes elegir cualquier Zona en la región; este ejemplo usa us-central1-b en us-central1 y europe-west1-b en europe-west1.
  5. En la sección Disco de arranque, asegúrate de que la imagen seleccionada sea Debian GNU/Linux 9 Stretch. Haz clic en Elegir para cambiar la imagen si es necesario.
  6. Haz clic en Administración, seguridad, discos, redes, instancia única y realiza los siguientes cambios:

    • Haz clic en Herramientas de redes y agrega las siguientes Etiquetas de red: allow-ssh y allow-hc-and-proxy
    • Haz clic en el botón Editar, en Interfaces de red, y realiza los siguientes cambios. Luego, haz clic en Listo:
      • Red: lb-network
      • Subred: elige la subred como se indica en el paso 2.
      • IP interna principal: efímera (automática)
      • IP externa: efímera
    • Haz clic en Administración. En el campo Secuencia de comandos de inicio, copia y pega el siguiente contenido de secuencia de comandos. El contenido de secuencia de comandos es idéntico para las ocho VM:

      #! /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)"
      filter="{print \$NF}"
      vm_zone="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/zone \
      | awk -F/ "${filter}")"
      echo "Page on $vm_hostname in $vm_zone" | \
      tee /var/www/html/index.html
      echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
      tee /etc/apache2/conf-enabled/video.conf
      systemctl restart apache2
      
  7. Haz clic en Crear.

Crea grupos de instancias

  1. Dirígete a la página Grupos de instancias en Google Cloud Platform Console.
    Ir a la página Grupos de instancias
  2. Repite estos pasos para crear cuatro grupos de instancias no administrados, cada uno con dos VM, con estas combinaciones.
    • Grupo de instancias: ig-www-us, región: us-central1, zona: us-central1-b, subred: us-subnet, VM: www-us-01 y www-us-02
    • Grupo de instancias: ig-video-us, región: us-central1, zona: us-central1-b, subred: us-subnet, VM: video-us-01 y video-us-02
    • Grupo de instancias: ig-www-eu, región: europe-west1, zona: europe-west1-b, subred: eu-subnet, VM: www-eu-01 y www-eu-02
    • Grupo de instancias: ig-video-eu, región: europe-west1, zona: europe-west1-b, subred: eu-subnet, VM: video-eu-01 y video-eu-02
  3. Haz clic en Crear grupo de instancias y selecciona Nuevo grupo de instancias no administrado.
  4. Configura Nombre como se indica en el paso 2.
  5. En la sección Ubicación, selecciona Zona única y elige la región y la zona como se indica en el paso 2.
  6. En Red, ingresa lb-network.
  7. Para Subred, ingresa la subred indicada en el paso 2.
  8. En la sección Instancias de VM, agrega las VM indicadas en el paso 2.
  9. Haz clic en Crear.

gcloud


  1. Repite el siguiente comando para crear ocho VM con las siguientes combinaciones de nombre, zona y subred: Reemplaza VM_NAME, ZONE y SUBNET como corresponda:

    • Nombre: www-us-01, zona: us-central1-b, subred: us-subnet
    • Nombre: www-us-02, zona: us-central1-b, subred: us-subnet
    • Nombre: video-us-01, zona: us-central1-b, subred: us-subnet
    • Nombre: video-us-02, zona: us-central1-b, subred: us-subnet
    • Nombre: www-eu-01, zona: europe-west1-b, subred: eu-subnet
    • Nombre: www-eu-02, zona: europe-west1-b, subred: eu-subnet
    • Nombre: video-eu-01, zona: europe-west1-b, subred: eu-subnet
    • Nombre: video-eu-02, zona: europe-west1-b, subred: eu-subnet
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-hc-and-proxy \
        --subnet=SUBNET \
        --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)"
    filter="{print \$NF}"
    vm_zone="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/zone \
    | awk -F/ "${filter}")"
    echo "Page on $vm_hostname in $vm_zone" | \
    tee /var/www/html/index.html
    echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
    tee /etc/apache2/conf-enabled/video.conf
    systemctl restart apache2'
    
  2. Repite el siguiente comando para crear cuatro grupos de instancias no administrados, mediante las siguientes combinaciones de nombre y zona. Reemplaza INSTANCE_GROUP_NAME y ZONE como corresponda:

    • Grupo de instancias: ig-www-us, zona: us-central1-b
    • Grupo de instancias: ig-video-us, zona: us-central1-b
    • Grupo de instancias: ig-www-eu, zona: europe-west1-b
    • Grupo de instancias: ig-video-eu, zona: europe-west1-b
    gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME \
        --zone=ZONE
    
  3. Repite el siguiente comando cuatro veces y agrega dos VM a cada grupo de instancias de acuerdo con las siguientes combinaciones. Reemplaza INSTANCE_GROUP_NAME, ZONE y INSTANCES como corresponda:

    • Grupo de instancias: ig-www-us, zona: us-central1-b, INSTANCIAS: www-us-01, www-us-02
    • Grupo de instancias: ig-video-us, zona: us-central1-b, INSTANCIAS: video-us-01, video-us-02
    • Grupo de instancias: ig-www-eu, zona: europe-west1-b, INSTANCIAS: www-eu-01, www-eu-02
    • Grupo de instancias: ig-video-eu, zona: europe-west1-b, INSTANCIAS: video-eu-01, video-eu-02
    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
        --zone=ZONE \
        --instances=INSTANCES
    

    Como ejemplo aclaratorio, el comando para agregar dos instancias al primer grupo de instancias es el siguiente:

    gcloud compute instance-groups unmanaged add-instances ig-www-us \
        --zone=us-central1-b \
        --instances=www-us-01,www-us-02
    

Reserva direcciones IP externas

Ahora que tus instancias ya están en funcionamiento, configura los servicios necesarios para el balanceo de cargas. En esta sección, crearás dos direcciones IP externas estáticas globales que tus clientes usarán para llegar a tu balanceador de cargas.

Console


  1. Dirígete a la página Direcciones IP externas en Google Cloud Platform Console.
    Ir a la página Direcciones IP externas
  2. Haz clic en Reservar dirección estática para reservar una dirección IPv4.
  3. Asigna un Nombre de lb-ipv4-1.
  4. Configura el Nivel de red como Premium.
  5. Configura la Versión de IP como IPv4.
  6. Configura el Tipo como Global.
  7. Haz clic en Reservar.
  8. Haz clic en Reservar dirección estática de nuevo para reservar una dirección IPv6.
  9. Asigna un Nombre de lb-ipv6-1.
  10. Configura el Nivel de red como Premium.
  11. Configura la Versión de IP como IPv6.
  12. Asegúrate de que el Tipo esté configurado como Global.

    En este ejemplo, el balanceador de cargas usa las herramientas de redes de nivel Premium. Un balanceador de cargas con herramientas de redes de nivel estándar usaría direcciones IP regionales. Las direcciones IPv6 no están disponibles con el nivel estándar.

  13. Haz clic en Reservar.

gcloud


gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

Préstale atención a la dirección IPv4 que estaba reservada:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
gcloud compute addresses create lb-ipv6-1 \
    --ip-version=IPV6 \
    --global

Préstale atención a la dirección IPv6 que estaba reservada:

gcloud compute addresses describe lb-ipv6-1 \
    --format="get(address)" \
    --global

Configura los recursos del balanceo de cargas

La funcionalidad del balanceador de cargas involucra varios recursos conectados. En esta sección, configurarás y conectarás los recursos. Los recursos son los siguientes:

  • Puertos con nombre, que el balanceador de cargas usa para dirigir el tráfico a tus grupos de instancias.
  • Una verificación de estado, que consulta tus instancias para ver si están en buen estado. El balanceador de cargas solo envía tráfico a instancias en buen estado.
  • Servicios de backend, que realizan un seguimiento de la capacidad, la afinidad de sesión y la condición de la verificación de estado. Los servicios de backend dirigen solicitudes a los extremos o VM de backend según la capacidad y el estado de la instancia.
  • Una asignación de URL, que el balanceador de cargas usa para dirigir solicitudes a servicios de backend específicos en función del host y la ruta de la URL de la solicitud.
  • Un recurso de certificado SSL. Los recursos de certificado SSL contienen información de certificado SSL que el balanceador de cargas usa para finalizar TLS cuando los clientes HTTPS se conectan a él. Puedes usar varios certificados SSL, que pueden ser cualquier combinación de certificados SSL administrados o autoadministrados. Debes crear un recurso de certificado SSL para cada certificado que uses.
  • Un proxy HTTPS de destino, que el balanceador de cargas usa para asociar la asignación de URL y los certificados SSL con las reglas de reenvío global.
  • Dos reglas de reenvío global, una para IPv4 y otra para IPv6, que contienen los recursos de la dirección IP externa global. Las reglas de reenvío global reenvían la solicitud entrante al proxy de destino.

Console


Nombra tu balanceador de cargas

  1. Dirígete a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.
  3. Para el Nombre del balanceador de cargas, ingresa web-map.
  4. Mantén la ventana abierta para continuar.

Configura el servicio de backend y la verificación de estado de las instancias de www

El balanceador de cargas requiere dos servicios de backend y una verificación de estado para dar servicio a ambos. En este ejemplo, el balanceador de cargas finaliza las solicitudes HTTPS del cliente y usa HTTP para comunicarse con los backends. A fin de hacer esto, especifica HTTP para los protocolos de backend y las verificaciones de estado.

Configura el servicio de backend para las instancias de www

  1. Haz clic en Configuración de backend.
  2. En el menú desplegable Crear o seleccionar un servicio de backend, selecciona Crear un servicio de backend.
  3. Configura el Nombre del servicio de backend como web-backend-service.
  4. Haz clic en el ícono Editar junto al campo Tiempo de espera para editar el protocolo. Selecciona el protocolo que pretendes usar desde el balanceador de cargas hasta los backends.
  5. En el campo Puerto con nombre, ingresa http.
  6. Asegúrate de que el Tipo de backend esté configurado como Grupos de instancias.
  7. En Backends, configura el Grupo de instancias como ig-www-us.
  8. Para el tráfico entre el balanceador de cargas y las instancias, configura los Números de puerto como 80.
  9. Deja los valores predeterminados en los otros campos.
  10. Haz clic en Listo en la parte inferior de la ventana Nuevo backend.
  11. Haz clic en Agregar backend y repite los pasos, pero selecciona el grupo de instancias ig-www-eu.
  12. Mantén la ventana abierta para continuar.

Configura la verificación de estado de las instancias de www

  1. En la ventana Configuración de backend, en Verificación de estado, selecciona Crear una verificación de estado o Crear otra verificación de estado.
  2. Para crear la verificación de estado HTTP, configura los siguientes parámetros de verificación de estado:
    • Nombre como http-basic-check
    • Protocolo como HTTP
    • Puerto como 80
  3. Haz clic en Guardar y continuar.
  4. Haz clic en Crear.

Configura el backend y la verificación de estado de las instancias de www-video

  1. Repite los pasos anteriores, pero asigna un nombre video-backend-service al segundo servicio de backend y asígnale los grupos de instancias video-resources-us y video-resources-eu.
  2. Sigue los mismos pasos para crear una verificación de estado.

Configura las reglas de host y ruta de acceso

Con las reglas de host y ruta de acceso se configura el recurso de asignación de URL del balanceador de cargas.

  1. En la columna izquierda de la pantalla, haz clic en Reglas de host y ruta de acceso.
  2. La primera fila tiene web-backend-service en la columna de la derecha y ya se propagó con la regla predeterminada Any unmatched (default) para Hosts y Rutas de acceso.
  3. Asegúrate de que haya una segunda fila con video-backend-service en la columna de la derecha. Si no existe, haz clic en Agregar regla de host y ruta de acceso, selecciona video-backend-service en el menú desplegable en la columna de la derecha. Propaga las otras columnas de la siguiente manera: […]
    1. Configura Hosts como *.
    2. En el campo Rutas de acceso, ingresa /video, presiona la tecla de tabulación, ingresa /video/* y presiona la tecla de tabulación de nuevo.

Configura el frontend

En la sección de configuración de frontend, se configuran varios recursos para el balanceador de cargas, incluidas las reglas de reenvío y los certificados SSL. Además, te permite seleccionar el protocolo usado entre el cliente y el balanceador de cargas.

En este ejemplo, se usa HTTPS entre el cliente y el balanceador de cargas, por lo que se necesita uno o más recursos de certificado SSL para configurar el proxy. Consulta la página sobre los certificados SSL para obtener información sobre cómo crear recursos de certificados SSL. Recomendamos usar un certificado que administra Google.

  1. En el panel izquierdo de la página Nuevo balanceador de cargas de HTTP(S), haz clic en Configuración de frontend.
  2. En el campo Nombre, ingresa https-content-rule.
  3. En el campo Protocolo, selecciona HTTPS.
  4. Mantén la ventana abierta para continuar.

Configura la regla de reenvío de IPv4

  1. Configura la Versión de IP como IPv4.
  2. En Dirección IP, selecciona lb-ipv4-1, que creaste antes.
  3. Asegúrate de que el Puerto esté configurado como 443 para permitir el tráfico HTTPS.
  4. Haz clic en la lista desplegable Certificado.
    1. Si ya tienes un recurso de certificado SSL autoadministrado que deseas usar como certificado SSL principal, selecciónalo en el menú desplegable.
    2. De lo contrario, selecciona Crear un nuevo certificado.
    3. Selecciona Subir mi certificado o Crear certificado que administra Google.
    4. Si seleccionaste Subir mi certificado, completa estos pasos.
      1. Completa un Nombre de www-ssl-cert.
      2. En los campos correspondientes, sube el Certificado de clave pública (archivo .crt), la Cadena de certificados (archivo .csr) y la Clave privada (archivo .key).
      3. Haz clic en Crear.
    5. Si seleccionas Crear certificado que administra Google, ingresa un Dominio.
  5. Para agregar otros recursos de certificado además del recurso de certificado SSL principal, haz lo siguiente:
    1. Haz clic en Agregar certificado.
    2. Selecciona un certificado de la lista Certificados o haz clic en Crear un certificado nuevo y sigue las instrucciones anteriores.
  6. Haz clic en Listo.
  7. Mantén la ventana abierta para continuar.

Configura la regla de reenvío de IPv6

  1. Haz clic en Agregar IP y puerto de frontend.
  2. Ingresa un Nombre de https-content-ipv6-rule.
  3. En el campo Protocolo, selecciona HTTPS si deseas usar HTTPS entre el cliente y el balanceador de cargas. Selecciona HTTP si deseas establecer un protocolo HTTP entre el cliente y el balanceador de cargas.
  4. Configura la Versión de IP como IPv6.
  5. En IP, selecciona lb-ipv6-1, que creaste antes.
  6. Se requiere el Puerto predeterminado de 443.
  7. Si ya tienes un recurso de certificado SSL que deseas usar, selecciónalo en el menú desplegable Certificado. De lo contrario, selecciona Crear un nuevo certificado.
    1. Completa un Nombre de www-ssl-cert.
    2. En los campos correspondientes, sube el Certificado de clave pública (archivo .crt), la Cadena de certificados (archivo .csr) y la Clave privada (archivo .key).
    3. Haz clic en Crear.
  8. Para agregar otros recursos de certificado además del recurso de certificado SSL principal, haz lo siguiente:
    1. Haz clic en Agregar certificado.
    2. Selecciona un certificado de la lista Certificados o haz clic en Crear un certificado nuevo y sigue las instrucciones anteriores.
  9. Haz clic en Listo.

Revisa y finaliza

  1. En el panel izquierdo de la página Nuevo balanceador de cargas de HTTP(S), haz clic en Revisar y finalizar.
  2. Compara tu configuración con lo que pretendías crear.
  3. Si todo parece correcto, haz clic en Crear para crear tu balanceador de cargas de HTTP(S).

gcloud


  1. Para cada grupo de instancias, define un servicio HTTP y asigna un nombre de puerto al puerto relevante. Una vez configurado, el servicio de balanceo de cargas reenvía el tráfico al puerto con nombre.

    gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. Crea una verificación de estado. Para HTTP, emplea el comando de gcloud si usas HTTP entre el balanceador de cargas y los backends.

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. Crea un servicio de backend para cada proveedor de contenido. Configura el campo --protocol como HTTP ya que se usa HTTP para ir a las instancias. Usa la verificación de estado http-basic-check que se creó antes como verificación de estado.

    gcloud compute backend-services create video-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
    gcloud compute backend-services create web-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
  4. Agrega tus grupos de instancias como backends a los servicios de backend. Un backend define la capacidad (uso de CPU máximo o consultas máximas por segundo) de los grupos de instancias que contiene. En este ejemplo, configura balancing-mode como el valor UTILIZATION, max-utilization como 0.8 y capacity-scaler como 1. Configura capacity-scaler como 0 si deseas desviar un servicio de backend.

    Agrega el grupo de instancias ig-video-us:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-us \
        --instance-group-zone=us-central1-b \
        --global
    

    Agrega el grupo de instancias ig-video-eu:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-eu \
        --instance-group-zone=europe-west1-b \
        --global
    

    Agrega el grupo de instancias ig-www-us:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-us \
        --instance-group-zone=us-central1-b \
        --global
    

    Agrega el grupo de instancias ig-www-eu:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-eu \
        --instance-group-zone=europe-west1-b \
        --global
    
  5. Crea una asignación de URL para enrutar las solicitudes entrantes a los servicios de backend que correspondan. En este caso, las asignaciones de ruta de solicitud definidas a través de la marca --path-rules dividen el tráfico de acuerdo con la ruta de URL en cada solicitud a tu sitio. El tráfico que no coincide con una entrada en la lista --path-rules se envía a la entrada en --default-service flag.

    1. Crea una asignación de URL:

      gcloud compute url-maps create web-map \
          --default-service web-backend-service
      
    2. Agrega un comparador de rutas de acceso a tu asignación de URL y define tus asignaciones de ruta de solicitud:

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-backend-service \
          --path-matcher-name pathmap \
          --path-rules="/video=video-backend-service,/video/*=video-backend-service"
      
  6. Crea un recurso de certificado SSL autofirmado para usar en el proxy HTTPS.

    Se usa un certificado autofirmado con fines de demostración, pero en una implementación real, configurarías tu balanceador de cargas para usar un certificado de CA firmado. En ese caso, puedes usar un certificado autoadministrado, en el que proporcionas tu propio certificado SSL, o un certificado que administra Google, en el que Google emite un certificado para tu dominio. Para obtener más información, consulta la página sobre los tipos de certificados SSL. Si usas varios certificados SSL, debes crear un recurso de certificado SSL para cada certificado.

    Para obtener más información sobre la creación de recursos de certificados SSL en GCP.

    Si deseas crear un recurso de certificado SSL autoadministrado, ingresa el comando siguiente:

    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    

    Si deseas crear un recurso de certificado SSL que administra Google, ingresa el comando siguiente:

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]
    
  7. Crea un proxy HTTPS de destino para enrutar las solicitudes a tu asignación de URL. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas de HTTPS, por lo que también debes subir el certificado en este paso.

    gcloud compute target-https-proxies create https-lb-proxy \
        --url-map web-map --ssl-certificates www-ssl-cert
    
  8. Crea dos reglas de reenvío global para enrutar las solicitudes entrantes al proxy, una para cada una de las direcciones IP que creaste.

    gcloud compute forwarding-rules create https-content-rule \
        --address=lb-ipv4-1\
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    
    gcloud compute forwarding-rules create https-content-ipv6-rule \
        --address=lb-ipv6-1 \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    

Después de crear la regla de reenvío global, tu configuración puede tardar varios minutos en propagarse a nivel mundial.

Envía tráfico a tus instancias

Ahora que ya configuraste el servicio de balanceo de cargas, puedes comenzar a enviar tráfico a la regla de reenvío y ver cómo se dispersa el tráfico a las diferentes instancias.

Console/Navegador web


  1. Dirígete a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en web-map para expandir el balanceador de cargas que acabas de crear.
  3. En la sección Backend, confirma que las instancias estén en buen estado. La columna Buen estado debe propagarse, lo que indica que ambas instancias en cada uno de los cuatro grupos de instancias están en buen estado. Si ves lo contrario, primero vuelve a cargar la página. Es posible que GCP Console tarde unos minutos en indicar que las instancias están en buen estado. Si los backends no aparecen con buen estado después de unos minutos, revisa la configuración del firewall y el conjunto de etiquetas de red asignadas a tus instancias de backend.
  4. Si usas un certificado que administra Google, confirma que el estado de tu recurso de certificado sea ACTIVO. Para obtener más información, consulta el estado de los recursos del certificado SSL que administra Google.
  5. Después de que GCP Console muestre que las instancias de backend están en buen estado, puedes probar el balanceador de cargas con un navegador web en https://<var>IP_Address</var>, en el que IP_Address es la dirección IP del balanceador de cargas. Si usaste un certificado autofirmado para las pruebas, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado. Tu navegador debe mostrar una página con contenido que muestre el nombre de la instancia que entregó la página, junto con su zona (por ejemplo, Page on www-us-02 in us-central1-b).
  6. En tu navegador, dirígete a https://<var>IP_Address</var>/video, en el que IP_Address es la dirección IP del balanceador de cargas. Tu navegador debe mostrar una página con contenido que muestre el nombre de la instancia de video que entregó la página, junto con su zona (por ejemplo, Page on video-us-02 in us-central1-b).

gcloud/mediante curl


  1. Si usas un certificado que administra Google, confirma que el estado de tu recurso de certificado sea ACTIVO antes de continuar. Para obtener más información, consulta la página sobre el estado del recurso del certificado SSL que administra Google.

     gcloud beta compute ssl-certificates list
    
  2. Usa el comando curl para probar la respuesta de estas URL. Reemplaza IP_Address por la dirección IPv4 del balanceador de cargas:

    curl -k https://IP_Address
    curl -k https://IP_Address/video/
    
  3. Usa el comando curl para probar la respuesta de estas URL. Reemplaza IP_Address por la dirección IPv6 del balanceador de cargas. Para IPv6, debes poner corchetes ([]) alrededor de la dirección y, luego, inhabilitar el globalizado con la marca -g (por ejemplo, curl -g -6 "https://[2001:DB8::]/").

    curl -k -g -6 https://[IP_Address]
    curl -k -g -6 https://[IP_Address]/video/
    

Prueba la funcionalidad entre regiones

Para simular un usuario en otra geografía, puedes conectarte a una de tus instancias de máquina virtual en una región diferente y ejecutar un comando curl desde esa instancia para ver cómo la solicitud va a una instancia en la región más cercana.

Se ve el resultado de HTML <!doctype html><html><body><h1>www-us</h1></body></html>.

Repite los pasos, pero esta vez conéctate a www-eu-1. El resultado ahora dice <!doctype html><html><body><h1>www-eu</h1></body></html>.

Puedes realizar pruebas desde un sistema cliente ubicado en cualquier parte del mundo. Si los backends en una región están en mal estado o alcanzan su capacidad máxima, el balanceador de cargas de HTTPS enviará de manera automática el tráfico a la siguiente región más cercana.

Quita direcciones IP externas de las VM de backend (opcional)

El balanceo de cargas de HTTP(S) de GCP se comunica con los backends mediante sus direcciones IP internas y rutas del balanceador de cargas especiales. Las instancias de backend no necesitan direcciones IP externas para comunicarse con el balanceador de cargas. Para aumentar la seguridad, quita las direcciones IP externas de las instancias de backend.

Para quitar direcciones IP externas de instancias de backend, sigue estas instrucciones.

Si necesitas conectarte mediante SSH a una instancia de backend que no tiene una dirección IP externa, consulta la página sobre cómo conectarte a una instancia que no tiene una dirección IP externa.

Realiza una limpieza

Después de completar este instructivo de balanceo de cargas de HTTP(S), puedes borrar los recursos de Cloud Load Balancing que hayas creado para que no se facturen en el futuro. Si estos recursos se crearon dentro de su propio proyecto, puedes borrar todo el proyecto. De lo contrario, puedes borrar los recursos de forma individual.

Borra el proyecto

Console


  1. Dirígete a la página Proyectos en Google Cloud Platform Console.
    Ir a la página Proyectos
  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

gcloud


Ejecuta el siguiente comando y reemplaza project_id por el ID del proyecto:

gcloud projects delete project_id

Borra recursos individuales

Console


Borra el balanceador de cargas

  1. Dirígete a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Selecciona la casilla de verificación junto a web-map.
  3. Haz clic en el botón Borrar en la parte superior de la página.
  4. Selecciona las casillas de verificación junto a todos los recursos adicionales, incluidos los servicios de backend, las verificaciones de estado y los certificados SSL.
  5. Haz clic en Borrar el balanceador de cargas y los recursos seleccionados.

Borra los grupos de instancias

  1. Dirígete a la página Grupos de instancias en Google Cloud Platform Console.
    Ir a la página Grupos de instancias
  2. Selecciona la casilla de verificación en la parte superior junto a Nombre para seleccionar todos los grupos de instancias.
  3. Haz clic en Borrar.
  4. En la ventana de confirmación, haz clic en Borrar.

Libera las direcciones IP externas

  1. Dirígete a la página Direcciones IP externas en Google Cloud Platform Console.
    Ir a la página Direcciones IP externas
  2. Selecciona las casillas de verificación junto a lb-ipv4-1 y lb-ipv6-1.
  3. Haz clic en Borrar.
  4. En la ventana de confirmación, haz clic en Borrar.

Borra las reglas de firewall

  1. Dirígete a la página Firewalls en Google Cloud Platform Console.
    Ir a la página Firewalls
  2. Selecciona las casillas de verificación junto a fw-allow-health-check-and-proxy y fw-allow-ssh.
  3. Haz clic en Borrar.
  4. En la ventana de confirmación, haz clic en Borrar.

Borra las instancias de VM

  1. Dirígete a la página Instancias de VM en Google Cloud Platform Console.
    Ir a la página Instancias de VM
  2. Selecciona la casilla de verificación en la parte superior junto a Nombre para seleccionar todas las instancias.
  3. Haz clic en Borrar.
  4. En la ventana de confirmación, haz clic en Borrar.

Borra la red de VPC

  1. Dirígete a la página Redes de VPC en Google Cloud Platform Console.
    Ir a la página Redes de VPC
  2. Haz clic en lb-network.
  3. En la página de detalles de la red, haz clic en Borrar red de VPC.
  4. En la ventana de confirmación, haz clic en Borrar.

gcloud


Borra el balanceador de cargas

Para borrar el balanceador de cargas, deberás borrar cada uno de sus componentes.

  1. Borra las reglas de reenvío:

    gcloud compute forwarding-rules delete https-content-rule \
        --global
    gcloud compute forwarding-rules delete https-content-ipv6-rule \
        --global
    
  2. Borra las direcciones IP externas globales:

    gcloud compute addresses delete lb-ipv4-1 \
        --global
    gcloud compute addresses delete lb-ipv6-1 \
        --global
    
  3. Borra el proxy de destino:

    gcloud compute target-https-proxies delete https-lb-proxy
    
  4. Borra el certificado SSL:

    gcloud compute ssl-certificates delete www-ssl-cert
    
  5. Borra la asignación de URL:

    gcloud compute url-maps delete web-map
    
  6. Borra los servicios de backend:

    gcloud compute backend-services delete web-backend-service \
        --global
    gcloud compute backend-services delete video-backend-service \
        --global
    
  7. Borra las verificaciones de estado:

    gcloud compute health-checks delete http-basic-check
    

Ya borraste todos los recursos del balanceador de cargas.

Borra los grupos de instancias

Repite el siguiente comando para crear cuatro grupos de instancias no administrados, mediante las siguientes combinaciones de nombre y zona. Reemplaza INSTANCE_GROUP_NAME y ZONE como corresponda:

  • Nombre: ig-www-us, zona: us-central1-b
  • Nombre: ig-video-us, zona: us-central1-b
  • Nombre: ig-www-eu, zona: europe-west1-b
  • Nombre: ig-video-eu, zona: europe-west1-b
gcloud compute instance-groups unmanaged delete INSTANCE_GROUP_NAME \
   --zone=ZONE

Borra las instancias de VM

Repite el siguiente comando para borrar ocho VM con las siguientes combinaciones de nombre y zona. Reemplaza VM_NAME y ZONE como corresponda:

  • Nombre: www-us-01, zona: us-central1-b
  • Nombre: www-us-02, zona: us-central1-b
  • Nombre: video-us-01, zona: us-central1-b
  • Nombre: video-us-02, zona: us-central1-b
  • Nombre: www-eu-01, zona: europe-west1-b
  • Nombre: www-eu-02, zona: europe-west1-b
  • Nombre: video-eu-01, zona: europe-west1-b
  • Nombre: video-eu-02, zona: europe-west1-b
gcloud compute instance delete VM_NAME \
   --zone=ZONE

Borra las reglas de firewall

Borra ambas reglas de firewall:

gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
gcloud compute firewall-rules delete fw-allow-ssh

Borra la red de VPC

Primero, borra us-subnet:

gcloud compute networks subnets delete us-subnet \
    --region=us-central1

A continuación, borra eu-subnet:

gcloud compute networks subnets delete eu-subnet \
    --region=europe-west1

Por último, borra la red de VPC:

gcloud compute networks delete lb-network

Ya borraste todos los recursos que configuraste en este proyecto.

Pasos siguientes