Configura un balanceador de cargas de HTTPS externo multirregional basado en el contenido

En esta guía, se muestra cómo crear un balanceador de cargas de HTTPS de Google Cloud que realiza las siguientes acciones:

  • Selecciona los servicios de backend según las rutas de URL de la solicitud (balanceo de cargas basado en el contenido).
  • Enruta solicitudes a backends cercanos a los clientes (balanceo de cargas entre regiones).

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

Para obtener un ejemplo simplificado, consulta Configura un balanceador de cargas de HTTP externo simple o Configura un balanceador de cargas de HTTPS externo simple. A fin de ver ejemplos de enrutamiento avanzado, como reescrituras y redireccionamientos HTTP, consulta Configura la administración de tráfico para balanceadores de cargas de HTTP(S) externos.

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 entre varias regiones. Crearás ocho instancias de Compute Engine en total 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 enrute 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 establecidas en el mapa de URL para determinar qué servicio de backend recibe 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 video entregan contenido de video, mientras que las instancias www entregan el resto del contenido.

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

Antes de comenzar

Para estas instrucciones, se requiere un proyecto. Si aún no tienes uno, créalo ahora. Mediante estas instrucciones, podrás crear una red de nube privada virtual (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.

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 de Compute
Agregar y quitar reglas de firewall Administrador de seguridad
Crear componentes del balanceador de cargas Administrador de red
Crear un proyecto (opcional) Creador del proyecto

Si deseas obtener más información, consulta las siguientes guías:

Configuración

Crea un proyecto nuevo (opcional)

Se recomienda que los usuarios con el permiso resourcemanager.projects.create creen un proyecto nuevo antes de seguir con el resto del 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: la red es una red de VPC de 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 ubica en la región europe-west1.

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

Console

  1. Ve a la página Redes de VPC en Google Cloud 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:
    • Establece Modo de creación de subredes en Personalizado.
    • En la sección Nueva subred, ingresa la siguiente información:
      • Nombre: us-subnet
      • Región:: us-central1
      • Rangos de direcciones IP: 10.1.10.0/24
      • Haz clic en Listo.
  5. En la sección Subredes, haz clic en Agregar subred y crea la segunda subred:
    • En la sección Nueva subred, ingresa la siguiente información:
      • Nombre: eu-subnet
      • Región:: europe-west1
      • Rangos 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 us-subnet:

    gcloud compute networks subnets create us-subnet \
      --network=lb-network \
      --range=10.1.10.0/24 \
      --region=us-central1
    
  3. Crea 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 Google Cloud. 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 con balanceo de cargas y 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 de backend a las que se debe aplicar.

  • fw-allow-health-check-and-proxy: Una regla de entrada, aplicable a las instancias cuyas cargas se balancean, que permite el tráfico del balanceador de cargas y los sistemas de verificación de estado de Google Cloud (130.211.0.0/22 y 35.191.0.0/16) En este ejemplo, se usa la etiqueta de destino allow-health-check para identificar las VM de backend a las que se debe aplicar.

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 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. Establece Filtro 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-health-check.
    5. Establece Filtro de fuente como IP ranges.
    6. Configura Rangos de IP de origen como 130.211.0.0/2235.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, Google Cloud 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 las verificaciones de estado del balanceador de cargas y Google Cloud 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-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80,tcp:443
    

Crea instancias

Para configurar un balanceador de cargas con un backend de Compute Engine, tus VM deben estar en grupos de instancias. En esta guía, se describe cómo crear un grupo de instancias administrado con las VM de Linux que ejecutan Apache.

El grupo de instancias administrado proporciona VM que ejecutan los servidores de backend de un balanceador de cargas de HTTPS externo. A modo de demostración, los backends entregan sus propios nombres de host.

En este ejemplo, se crean ocho instancias de máquina virtual (VM): cuatro para entregar contenido de video y cuatro con el fin de entregar todo el contenido restante. Usa una secuencia de comandos de inicio a fin de instalar el software Apache Web Server con una página principal única para cada instancia. Ten en cuenta que puedes usar cualquier servidor web en tus VM. Apache se instala en este ejemplo por conveniencia.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    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-video-us.
  5. En Ubicación, selecciona Zona única.
  6. En Región, selecciona la región que prefieras. En este ejemplo, se usa us-central1.
  7. Para la Zona, selecciona us-central1-b.
  8. En Plantilla de instancias, selecciona Crear una nueva plantilla de instancias.
  9. En Nombre, ingresa video-us-template.
  10. 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.
  11. En Administración, seguridad, discos, Herramientas de 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
    
  12. En Herramientas de redes, agrega la etiqueta de red: allow-health-check.

  13. Haz clic en Guardar y continuar.

  14. En Modo de ajuste de escala automático, selecciona Sin ajuste de escala automático.

  15. En Cantidad de instancias, ingresa 2.

  16. Haz clic en Crear para crear el grupo de instancias nuevo.

gcloud

  1. Crea la plantilla.

    gcloud compute instance-templates create video-us-template \
       --region=us-central1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --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 el grupo de instancias administrado en función de la plantilla.

    gcloud compute instance-groups managed create ig-video-us \
       --template=video-us-template --size=2 --zone=us-central1-b
    

Repite este procedimiento cuatro veces para los cuatro grupos de instancias. Asegúrate de cambiar el nombre del grupo de instancias, el nombre de la plantilla, la región y la zona para cada grupo de instancias de la siguiente manera:

  • ig-video-us, video-us-template, us-central1-b (como se muestra en el ejemplo)
  • ig-video-eu, video-eu-template, europe-west1-b
  • ig-www-us, www-us-template, us-central1-b
  • ig-www-eu, www-europe-template, europe-west1-b

Agrega un puerto con nombre al grupo de instancias

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

Console

  1. En Google Cloud Platform Console, ve a la página de grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en el nombre de tu grupo de instancias (por ejemplo, ig-video-us) y haz clic en Editar grupo.
  3. Haz clic en Especificar la asignación del nombre de puerto.
  4. Haz clic en Agregar elemento.
  5. En el nombre de puerto, ingresa http. En el número de puerto, ingresa 80.
  6. Haz clic en Guardar.

Repite este paso para cada grupo de instancias.

gcloud

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

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. Ve a la página Direcciones IP externas en Google Cloud 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. Establece el nivel de red en Premium.
  5. Configura 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. Establece el nivel de red en 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

  1. Reserva una dirección IPv4:

    gcloud compute addresses create lb-ipv4-1 \
      --ip-version=IPV4 \
      --global
    
  2. Reserva una dirección IPv6:

    gcloud compute addresses create lb-ipv6-1 \
      --ip-version=IPV6 \
      --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 grupos de instancias.
  • Una verificación de estado, que sondea 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 las VM del backend según la capacidad y el estado de la instancia.
  • Un mapa 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 tu mapa de URL y los certificados SSL con las reglas de reenvío globales.
  • Dos reglas de reenvío globales, 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

Asigna un nombre al balanceador de cargas

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.
  3. En Orientado a Internet o solo interno, selecciona De Internet a mis VM.
  4. Haz clic en Continuar.
  5. Para el Nombre del balanceador de cargas, ingresa web-map.
  6. Mantén la ventana abierta para continuar.

Configura el servicio de backend y la verificación de estado de las instancias 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 www

  1. Haz clic en Configuración de backend.
  2. En el menú desplegable Create or select a backend service, mantén el puntero del mouse sobre Servicios de backend y, luego, selecciona Crear un servicio de backend.
  3. Establece el Nombre del servicio de backend como web-backend-service.
  4. Asegúrate de que el Tipo de backend esté establecido como Grupo de instancias.
  5. En el menú desplegable Protocolo, selecciona HTTP.
  6. En el campo Puerto con nombre, ingresa http.
  7. En Backends, establece el Grupo de instancias como ig-www-us.
  8. Para el tráfico entre el balanceador de cargas y las instancias, establece los Números de puerto en 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 www

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

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

  1. Repite los pasos anteriores, pero asigna un nombre al segundo servicio de backend video-backend-service y asígnale los grupos de instancias ig-video-us y ig-video-eu.
  2. Sigue los mismos pasos para crear una verificación de estado, pero asígnale el nombre http-basic-check-video. Los nombres de las verificaciones de estado deben ser únicos.

Configura las reglas de host y ruta de acceso

Con las reglas de host y ruta de acceso, se configura el recurso de mapa 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 Agrega la regla de host y de ruta y, luego, selecciona video-backend-service en el menú desplegable de la columna de la derecha. Propaga las otras columnas de la siguiente manera:
    1. Establece Hosts como *.
    2. En el campo Rutas de acceso, haz lo siguiente:
      1. Ingresa /video y, luego, presiona la tecla Tab.
      2. Ingresa /video/* y, luego, presiona la tecla Tab.

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 que se usa 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 Certificados SSL para obtener información sobre cómo crear recursos de certificados SSL. Recomendamos que uses un certificado administrado por Google.

  1. En el panel izquierdo de la página New HTTP(S) load balancer, 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. Establece 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é establecido en 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 y quieres usarlo como certificado SSL principal, selecciónalo en el menú desplegable.
    2. De lo contrario, selecciona Crear un certificado nuevo.
    3. En Nombre, ingresa www-ssl-cert.
    4. Selecciona Subir certificado o Crear certificado administrado por Google. Para crear un certificado administrado por Google, debes tener un dominio. Si no tienes un dominio, puedes subir tu propio certificado a fin de realizar pruebas.
    5. Si seleccionaste Subir certificado, completa estos pasos.
      1. En el campo Certificado de clave pública, realiza una de las siguientes acciones:
        • Haz clic en el botón Subir y selecciona el archivo de certificado con formato PEM.
        • Copia y pega el contenido de un certificado con formato PEM. El contenido debe comenzar con -----BEGIN CERTIFICATE----- y terminar con -----END CERTIFICATE-----.
      2. En el campo Cadena de certificados, realiza una de las siguientes acciones:
        • Haz clic en el botón Subir y selecciona el archivo de certificado de tu CA. Este archivo debe incluir certificados de CA intermedios, así como el certificado de CA raíz.
        • Copia y pega el contenido de una cadena de certificados. Cada certificado de la cadena debe tener el formato PEM, que comienza con -----BEGIN CERTIFICATE----- y termina con -----END CERTIFICATE-----. Google Cloud no valida la cadena de certificados por ti. La validación es tu responsabilidad.
        • Si omites la cadena de certificados, tu certificado debe estar firmado por una CA de confianza pública en la que tus clientes confíen de manera automática.
      3. En el campo Private key certificate, realiza una de las siguientes acciones:
        • Haz clic en el botón Subir y selecciona tu clave privada. Tu clave privada debe tener el formato PEM y no estar protegida con una frase de contraseña.
        • Copia y pega el contenido de una clave privada con el formato PEM. Las claves privadas de RSA deben comenzar con -----BEGIN RSA PRIVATE KEY----- y terminar con -----END RSA PRIVATE KEY-----. Las claves privadas de ECDSA deben comenzar con -----BEGIN EC PRIVATE KEY----- y terminar con -----END EC PRIVATE KEY-----.
      4. Haz clic en Crear.
    6. Si seleccionaste Crear certificado administrado por 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. En Negociación de QUIC, selecciona una de las siguientes opciones:
    • Automática (predeterminado)le permite a Google controlar cuándo se negocia QUIC. Por el momento, cuando seleccionas Automática, QUIC está inhabilitado. Si seleccionas esta opción, permitirás que Google habilite de forma automática las negociaciones de QUIC y HTTP/3 en el futuro para este balanceador de cargas. En gcloud y en la API, esta opción se denomina NONE.
    • Habilitada permite que el balanceador de cargas negocie QUIC con los clientes.
    • Inhabilitada evita que el balanceador de cargas negocie QUIC con los clientes.
  7. Haz clic en Listo.
  8. 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 usar HTTP entre el cliente y el balanceador de cargas.
  4. Establece la Versión de IP como IPv6.
  5. En IP, selecciona lb-ipv6-1, que creaste antes.
  6. Se requiere el Puerto predeterminado 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 certificado nuevo.
    1. En Nombre, ingresa 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. En Negociación de QUIC, selecciona una de las siguientes opciones:
    • Automática (predeterminado)le permite a Google controlar cuándo se negocia QUIC. Por el momento, cuando seleccionas Automática, QUIC está inhabilitado. Si seleccionas esta opción, permitirás que Google habilite de forma automática las negociaciones de QUIC y HTTP/3 en el futuro para este balanceador de cargas. En gcloud y en la API, esta opción se denomina NONE.
    • Habilitada permite que el balanceador de cargas negocie QUIC con los clientes.
    • Inhabilitada evita que el balanceador de cargas negocie QUIC con los clientes.
  10. Haz clic en Listo.

Revisión y finalización

  1. En el panel izquierdo de la página New HTTP(S) load balancer, haz clic en Revisión y finalización.
  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) externo.

gcloud

  1. Crea una verificación de estado. Usa el comando de gcloud para HTTP si usas HTTP entre el balanceador de cargas y los backends.

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

    gcloud compute backend-services create video-backend-service \
        --global-health-checks \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --global
    
    gcloud compute backend-services create web-backend-service \
        --global-health-checks \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --global
    
  3. Agrega tus grupos de instancias como backends a los servicios de backend. Un backend define la capacidad (uso máximo de backend o consultas máximas por segundo) de los grupos de instancias que contiene. En este ejemplo, establece balancing-mode como el valor UTILIZATION, max-utilization en 0.8 y capacity-scaler en 1. Establece capacity-scaler en 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
    
  4. Crea un mapa de URL para enrutar las solicitudes entrantes a los servicios de backend correspondientes. En este caso, las asignaciones de ruta de solicitud definidas a través de la marca --path-rules dividen el tráfico según la ruta de URL en cada solicitud a tu sitio. El tráfico que no coincide con una entrada de la lista --path-rules se envía a la entrada en --default-service flag.

    1. Crea un mapa de URL:

      gcloud compute url-maps create web-map \
          --default-service web-backend-service
      
    2. Agrega un comparador de rutas de acceso a tu mapa 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"
      
  5. Crea un recurso de certificado SSL para usarlo en el proxy HTTPS. Para crear un certificado administrado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para realizar pruebas. Para obtener más información, consulta los Tipos de certificados SSL.

    Si usas varios certificados SSL, debes crear un recurso de certificado SSL para cada certificado.

    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]
    
  6. 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
    
  7. 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 observar cómo el tráfico se dirige a diferentes instancias.

Console y el navegador web

  1. Ve a la página Balanceo de cargas en Google Cloud 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 En buen estado debe propagarse, lo que indica que ambas instancias en cada uno de los cuatro grupos de instancias están en buen estado. En caso contrario, primero vuelve a cargar la página. En Cloud Console, que se indique que las instancias están en buen estado puede tomar unos minutos. 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. Registra las direcciones IPv4 y las IPv6 de tu balanceador de cargas:

    1. Ve a la página Direcciones IP externas en Google Cloud Console.
      Ir a la página Direcciones IP externas
    2. En Nombre, busca las direcciones llamadas lb-ipv4-1 y lb-ipv6-1, luego, registra los valores asociados desde la columna Dirección externa.
  5. Si usas un certificado administrado por Google, haz lo siguiente:

    1. Crea los siguientes registros DNS:

    2. Confirma que el estado del recurso del certificado sea ACTIVO. Para obtener más información, consulta Estado del recurso de certificado SSL administrado por Google.

  6. Prueba tu balanceador de cargas mediante un navegador web con una de las siguientes opciones:

    • https://IP_ADDRESS, en la que IP_ADDRESS es la dirección IPv4 del balanceador de cargas. Si el navegador muestra una advertencia de certificado, debes indicarle de manera explícita a tu navegador que confíe en el certificado. La advertencia se produce porque los certificados se suelen configurar con dominios, no con direcciones IP.

    • https://FQDN, en la que FQDN es el nombre de dominio completamente calificado (FQDN) en el que configuraste el DNS para que apunte a la dirección IP del balanceador de cargas. Si usaste un certificado SSL autoadministrado y autofirmado o un certificado SSL autoadministrado firmado por una autoridad certificada (CA) personalizada, tu navegador mostrará una advertencia de certificado, a menos que lo configures de manera explícita para confiar en el certificado o su CA. Para obtener más detalles sobre los certificados autoadministrados, consulta Crea una clave privada y un certificado.

    El navegador debe procesar 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 ig-www-us-02 in us-central1-b).

  7. En el navegador, ve a una de las siguientes opciones:

    • https://IP_ADDRESS/video, en la que IP_ADDRESS es la dirección IPv4 del balanceador de cargas.

    • https://FQDN/video, en la que FQDN es el FQDN para el que configuraste el DNS a fin de que apunte a la dirección IP del balanceador de cargas.

    Tu navegador debe procesar 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 ig-video-us-02 in us-central1-b).

gcloud y el uso de curl

  1. Registra las direcciones IPv4 y las IPv6 de tu balanceador de cargas:

    gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
    
    gcloud compute addresses describe lb-ipv6-1 \
    --format="get(address)" \
    --global
    
  2. Si usas un certificado administrado por Google, haz lo siguiente:

    1. Crea los siguientes registros DNS:

    2. Confirma que el estado del recurso del certificado sea ACTIVO. Para obtener más información, consulta Estado del recurso de certificado SSL administrado por Google.

      gcloud beta compute ssl-certificates list
      
  3. 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/
    
  4. 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 colocar corchetes ([]) alrededor de la dirección e 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

A fin de simular un usuario en otra geografía, puedes conectarte a una de tus instancias de máquina virtual en una región diferente y, luego, ejecutar un comando curl desde esa instancia para ver que la solicitud se dirija a una instancia en la región más cercana.

Si te conectas a ig-www-us-01, la ejecución de un comando curl muestra que la solicitud se dirige a una instancia en us-central1. Verás un resultado como el siguiente: Page on ig-www-us-02 in us-central1-b.

Si te conectas a ig-www-eu-01, la ejecución de un comando curl muestra que la solicitud se dirige a una instancia en europe-west1. Verás un resultado como el siguiente: Page on ig-www-eu-02 in europe-west1-b.

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.

Opciones de configuración adicionales

En esta sección se expande el ejemplo de configuración para proporcionar opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en cualquier orden.

Habilita la afinidad de sesión

En estos procedimientos, se demuestra cómo configurar un tipo diferente de afinidad de sesión para cada servicio de backend:

  • Afinidad de sesión de la dirección IP de cliente para web-backend-service
  • Afinidad de sesión de cookies HTTP para video-backend-service

Cuando la afinidad de IP de cliente está habilitada, el balanceador de cargas dirige las solicitudes de un cliente en particular a la misma VM de backend en función de un hash creado a partir de la dirección IP del cliente.

Cuando se habilita la afinidad de cookie generada, el balanceador de cargas emite una cookie en la primera solicitud. Para cada solicitud posterior con la misma cookie, el balanceador de cargas dirige la solicitud al mismo extremo o VM de backend. Para los balanceadores de cargas de HTTP(S) externos, la cookie se llama GCLB.

Console

Si deseas habilitar la afinidad de sesión de IP de cliente para web-backend-service, haz lo siguiente:

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Backends.
  3. Haz clic en web-backend-service (el nombre de uno de los servicios de backend que creaste para este ejemplo) y, luego, en Editar.
  4. En la página Detalles del servicio de backend, haz clic en Configuración avanzada.
  5. En Afinidad de sesión, selecciona IP de cliente en el menú.
  6. Haz clic en Guardar.

Si deseas habilitar la afinidad de sesión de cookie generada para video-backend-service, haz lo siguiente:

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Backends.
  3. Haz clic en video-backend-service (el nombre de uno de los servicios de backend que creaste para este ejemplo) y, luego, en Editar.
  4. En la página Detalles del servicio de backend, haz clic en Configuración avanzada.
  5. En Afinidad de sesión, selecciona Cookie generada en el menú.
  6. Haz clic en Actualizar.

gcloud

Usa el siguiente comando de gcloud a fin de actualizar el servicio de backend web-backend-service; para ello, especifica la afinidad de sesión de IP de cliente:

gcloud compute backend-services update web-backend-service \
    --session-affinity=CLIENT_IP \
    --global

Usa el siguiente comando de gcloud a fin de actualizar el servicio de backend video-backend-service; para ello, especifica la afinidad de sesión de cookie generada:

gcloud compute backend-services update video-backend-service \
    --session-affinity=GENERATED_COOKIE \
    --global

API

Para establecer la afinidad de sesión de IP de cliente, realiza una solicitud PATCH al método backendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/web-backend-service
{
  "sessionAffinity": "CLIENT_IP"
}

Para establecer la afinidad de sesión de cookie generada, realiza una solicitud PATCH al método backendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/video-backend-service
{
  "sessionAffinity": "GENERATED_COOKIE"
}

Quita direcciones IP externas de las VM de backend

El balanceo de cargas de HTTP(S) de Google Cloud 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 las 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 Conéctate a instancias que no tienen direcciones IP externas.

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. Ve a la página Proyectos en Google Cloud 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 PROJECT_ID 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. Ve a la página Balanceo de cargas en Google Cloud 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. Ve a la página Grupos de instancias en Google Cloud 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 direcciones IP externas

  1. Ve a la página Direcciones IP externas en Google Cloud 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 Liberar dirección estática.
  4. En la ventana de confirmación, haz clic en Borrar.

Borra las reglas de firewall

  1. Ve a la página Firewalls en Google Cloud 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. Ve a la página Instancias de VM en Google Cloud 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. Ve a la página Redes de VPC en Google Cloud 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 borrar cuatro grupos de instancias no administrados con 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: ig-www-us-01, zona: us-central1-b
  • Nombre: ig-www-us-02, zona: us-central1-b
  • Nombre: ig-video-us-01, zona: us-central1-b
  • Nombre: ig-video-us-02, zona: us-central1-b
  • Nombre: ig-www-eu-01, zona: europe-west1-b
  • Nombre: ig-www-eu-02, zona: europe-west1-b
  • Nombre: ig-video-eu-01, zona: europe-west1-b
  • Nombre: ig-video-eu-02, zona: europe-west1-b
gcloud compute instances 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

  1. Borra us-subnet:

    gcloud compute networks subnets delete us-subnet \
    --region=us-central1
    
  2. Borra eu-subnet:

    gcloud compute networks subnets delete eu-subnet \
    --region=europe-west1
    
  3. Borra la red de VPC:

    gcloud compute networks delete lb-network
    

Ya borraste todos los recursos que configuraste en este proyecto.

Próximos pasos