Configura un balanceador de cargas HTTPS externo basado en contenido y multirregión

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

  • Selecciona los servicios de backend basados en 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 Cómo configurar un balanceador de cargas HTTP externo simple o Cómo configurar un balanceador de cargas HTTPS externo simple. Para ver ejemplos de enrutamiento avanzado, como reescrituras y redireccionamientos HTTP, consulta Configura la administración de tráfico para balanceadores de cargas HTTP(S) externos.

Resumen

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 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 HTTPS interregional y basado en el contenido (haz clic para ampliar la imagen)

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

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

Opcional: crea un proyecto nuevo

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 con el nombre 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 Red 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 Nueva subred, ingresa la siguiente información:
      • Nombre: us-subnet
      • Región:: us-central1
      • Rangos de direcciones IP: 10.1.10.0/24
      • Haga clic en Listo.
  5. En la sección Subredes, haz clic en Agregar subred y crea la segunda subred:
    • En la sección Subred nueva, 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, 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 con balanceo de cargas, 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-hc-and-proxy 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 segunda 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. Haga 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. 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. Haga clic en Crear.

gcloud

  1. Crea la regla de firewall fw-allow-ssh para permitir la conectividad SSH a las VM que tengan 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-hc-and-proxy \
        --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 VM de Linux que tienen Apache en ejecución.

El grupo de instancias administrado proporciona VM que ejecutan los servidores de backend de un balanceador de cargas 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 del servidor web de Apache 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. En 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, instancia única, 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. Haga 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 de cada grupo de instancias:

  • 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 relevante. Una vez configurado, el servicio de balanceo de cargas reenvía el tráfico al puerto con nombre.

Console

  1. En Google Cloud Console, ve a la página 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. Haga clic en Save.

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 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. 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 de la siguiente manera:

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

Asigna un nombre a tu 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), haga clic en Iniciar configuración.
  3. En Orientado a Internet o solo interno, selecciona De Internet a mis VM.
  4. Haga clic en Continue.
  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 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 www

  1. Haga clic en Configuración de backend.
  2. En el menú desplegable Crear o seleccionar un servicio de backend, mantén el puntero del mouse sobre Servicios de backend y selecciona Crear un servicio de backend.
  3. Otorga el Nombre web-backend-service para el servicio de backend.
  4. Asegúrate de que el Tipo de backend esté configurado como Grupo de instancias.
  5. En el menú desplegable Protocolo, selecciona HTTP.
  6. En el campo Puerto con nombre, ingresa http.
  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, 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 verificación de estado.
  2. Para crear la verificación de estado HTTP, configura los siguientes parámetros de verificación de estado:
    • Nombre: http-basic-check-www
    • ProtocoloHTTP
    • Puerto80
  3. Haz clic en Guardar y continuar.
  4. Haga 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 asigna un nombre a la verificación de estado http-basic-check-video. Los nombres de las verificaciones de estado deben ser únicos.

Configura 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 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 en *.
    2. En el campo Rutas, 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 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 que uses un certificado administrado por Google.

  1. En el panel izquierdo de la página Balanceador de cargas HTTP(S) nuevo, 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 IP en 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 nuevo certificado.
    3. Completa un Nombre de www-ssl-cert.
    4. Selecciona Subir mi certificado o Crear certificado que administra 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 mi certificado, completa estos pasos.
    6. 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-----.
    7. 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 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.
    8. En el campo Certificado de clave privada, 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-----.
    9. Haga clic en Crear.
  5. Si seleccionaste Crear certificado administrado por Google, ingresa un Dominio.
  • 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.
  • Haz clic en Listo.
  • 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. Establece la Versión IP en 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 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. Haga 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. Haga 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 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, configura 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 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 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 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"
        
    5. Crea un recurso de certificado SSL para usar 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 las 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 mirar cómo el tráfico va 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 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 no ves esa marca, vuelve a cargar la página. Cloud Console puede tardar 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. 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 Direcciones externas.
    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 el estado de los recursos del certificado SSL administrado por Google.

    6. Prueba tu balanceador de cargas mediante un navegador web en uno de las siguientes opciones:

      • https://<var>ip-address</var>, en la que ip-address es la dirección IPv4 del balanceador de cargas. Si tu navegador muestra una advertencia de certificado, debes indicarle de forma 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://<var>fqdn</var>, en el 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 o un certificado SSL autoadministrado que firma una autoridad certificada personalizada (CA), tu navegador mostrará una advertencia sobre el certificado a menos que lo configures explícitamente 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 tu navegador, ve a una de las siguientes opciones:

      • https://<var>ip-address</var>/video, en la que ip-address es la dirección IPv4 del balanceador de cargas.

      • https://<var>fqdn</var>/video, en la que fqdn es el FQDN para el que configuraste 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 el estado de los recursos del 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 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 y verás la solicitud ir a una instancia en la región más cercana.

    Si te conectas a ig-www-us-01, ejecutar un comando curl muestra que la solicitud va 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, cuando ejecutas un comando curl se muestra que la solicitud va 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 cookie 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 a la misma VM o extremo de backend. Para los balanceadores de cargas 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. Haga clic en Save.

    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 para actualizar el servicio de backend web-backend-service y especificar 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 para actualizar el servicio de backend video-backend-service y 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 las 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.

    Limpia

    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 haz clic en Apagar 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 direcciones estáticas.
    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 Red de VPC
    2. Haga 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 sin administrar 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.

    Qué sigue