Crea un balanceador de cargas de HTTPS

En esta guía, se muestra cómo crear un balanceador de cargas de HTTPS de Google Cloud que selecciona servicios de backend basados en rutas de URL de la solicitud (balanceo de cargas basado en el contenido) y enruta solicitudes a backends cercanos a los clientes (balanceo de cargas entre regiones).

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

Descripción general

En esta guía, se proporcionan instrucciones para crear un balanceador de cargas que dirija el tráfico según la ruta en la URL de la solicitud y que balancee el tráfico entre varias regiones. Puedes crear dos instancias de Compute Engine en las regiones de EE.UU. (en la zona us-central1-b) y de la UE (en la zona eu-west1-b). Luego, crearás un balanceador de cargas que 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 coincida 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 la imagen)
Balanceo de cargas de HTTPS interregional y basado en el contenido (haz clic para ampliar la imagen)

La secuencia de eventos en el diagrama es la que se muestra a continuación:

  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 recibirá la solicitud. Una solicitud que contiene /video, como https://www.example.com/video/concert, se envía a video-backend-service. Cualquier otra ruta de URL se envía al servicio predeterminado web-backend-service.
  4. El balanceador de cargas determina cuál de los grupos de instancias del servicio de backend debe entregar la solicitud, en función de su carga y proximidad al cliente, y dirige la solicitud a una instancia en ese grupo.
  5. La instancia entrega el contenido que solicita cada usuario. Las instancias video entregan contenido de video, mientras que las instancias www entregan el resto del contenido.

Antes de comenzar

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

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

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

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

Permisos

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

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

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 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 de 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 Subred nueva, ingresa la siguiente información:
      • Nombre: us-subnet
      • Región: us-central1
      • Rango de direcciones IP10.1.10.0/24
      • Haz clic en Listo.
  5. En la sección Subredes, haz clic en Agregar subred y crea la segunda subred:
    • Configura el Modo de creación de subred como Personalizado.
    • En la sección Subred nueva, ingresa la siguiente información:
      • Nombre: eu-subnet
      • Región: europe-west1
      • Rango de direcciones IP10.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: Es una regla de entrada, que aplica 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 a las que se debe aplicar.

  • fw-allow-health-check-and-proxy: Una regla de entrada, que aplica a las instancias con balanceo de cargas, y 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 instancias a las que debe aplicarse.

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-hc-and-proxy.
    5. Establece Filtro 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-hc-and-proxy \
            --source-ranges=130.211.0.0/22,35.191.0.0/16 \
            --rules=tcp:80,tcp:443
        

Configuración de las instancias

En este ejemplo, se crean ocho instancias de má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


Crea VM de backend

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

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

      #! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://169.254.169.254/computeMetadata/v1/instance/name)"
          filter="{print \$NF}"
          vm_zone="$(curl -H "Metadata-Flavor:Google" \
          http://169.254.169.254/computeMetadata/v1/instance/zone \
          | awk -F/ "${filter}")"
          echo "Page on $vm_hostname in $vm_zone" | \
          tee /var/www/html/index.html
          echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
          tee /etc/apache2/conf-enabled/video.conf
          systemctl restart apache2
          
  7. Haz clic en Crear.

Crea grupos de instancias

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

gcloud


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

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

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

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

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

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

Reserva direcciones IP externas

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

Console


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


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

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

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

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

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

Configura los recursos del balanceo de cargas

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

  • Se deben configurar Puertos con nombre, que el balanceador de cargas usa para dirigir el tráfico a grupos de instancias
  • Debe haber 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.
  • Se deben configurar 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 del backend según la capacidad y el estado de la instancia.
  • Se debe configurar 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.
  • Debe haber 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.
  • Se debe configurar un proxy HTTPS de destino, que el balanceador de cargas usa para asociar el mapa de URL y los certificados SSL a las reglas de reenvío global.
  • Se deben configurar 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


Otorga 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), haz clic en Iniciar configuración.
  3. Para el Nombre del balanceador de cargas, ingresa web-map.
  4. Mantén la ventana abierta para continuar.

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

El balanceador de cargas requiere dos servicios de backend y una verificación de estado para dar servicio a ambos. En este ejemplo, el balanceador de cargas finaliza las solicitudes HTTPS del cliente y usa HTTP para comunicarse con los backends. A fin de hacer esto, debes especificar 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 del backend.
  2. En el menú desplegable Crear o seleccionar un servicio de backend, selecciona Crear un servicio de backend.
  3. Otorga el Nombre web-backend-service para el servicio de backend.
  4. Haz clic en el ícono Editar junto al campo Tiempo de espera para editar el protocolo. Selecciona el protocolo que pretendes usar desde el balanceador de cargas hasta los backends.
  5. En el campo Puerto con nombre, ingresa http.
  6. Asegúrate de que el Tipo de backend esté configurado como Grupos de instancias.
  7. En Backends, establece el Grupo de instancias en 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 del 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
    • 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 www-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.

Configura las reglas de host y ruta de acceso

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

  1. En la columna izquierda de la pantalla, haz clic en Reglas de host y ruta de acceso.
  2. La primera fila tiene web-backend-service en la columna de la derecha y ya se propagó con la regla predeterminada Any unmatched (default) para Hosts y Rutas de acceso.
  3. Asegúrate de que haya una segunda fila con video-backend-service en la columna de la derecha. Si no existe, haz clic en Agregar regla de host y ruta de acceso 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 de acceso, ingresa /video, presiona la tecla Tab, ingresa /video/* y presiona la tecla de nuevo.

Configura el frontend

En la sección de configuración de frontend, se configuran varios recursos para el balanceador de cargas, incluidas las reglas de reenvío y los certificados SSL. Además, te permite seleccionar el protocolo 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 la página sobre los certificados SSL para obtener información sobre cómo crear recursos de certificados SSL. Recomendamos usar un certificado administrado por Google.

  1. En el panel izquierdo de la página Balanceador de cargas de HTTP(S) nuevo, haz clic en Configuración del 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 que deseas usar como certificado SSL principal, selecciónalo en el menú desplegable.
    2. De lo contrario, selecciona Crear un nuevo certificado.
    3. Selecciona Subir mi certificado o Crear certificado administrado por Google.
    4. Si seleccionaste Subir mi certificado, completa estos pasos.
      1. Completa con un Nombre de www-ssl-cert.
      2. En los campos correspondientes, sube el Certificado de clave pública (archivo .crt), la Cadena de certificados (archivo .csr) y la Clave privada (archivo .key).
      3. Haz clic en Crear.
    5. Si seleccionas Crear certificado 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. Haz clic en Listo.
  7. Mantén la ventana abierta para continuar.

Configura la regla de reenvío de IPv6

  1. Haz clic en Agregar IP y puerto de frontend.
  2. Ingresa un Nombre de https-content-ipv6-rule.
  3. En el campo Protocolo, selecciona HTTPS si deseas usar HTTPS entre el cliente y el balanceador de cargas. Selecciona HTTP si deseas establecer un protocolo HTTP entre el cliente y el balanceador de cargas.
  4. 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 con un Nombre de www-ssl-cert.
    2. En los campos correspondientes, sube el Certificado de clave pública (archivo .crt), la Cadena de certificados (archivo .csr) y la Clave privada (archivo .key).
    3. Haz clic en Crear.
  8. Para agregar otros recursos de certificado además del recurso de certificado SSL principal, haz lo siguiente:
    1. Haz clic en Agregar certificado.
    2. Selecciona un certificado de la lista Certificados o haz clic en Crear un certificado nuevo y sigue las instrucciones anteriores.
  9. Haz clic en Listo.

Revisa y finaliza

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

gcloud


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

        gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
            --named-ports http:80 \
            --zone us-central1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
            --named-ports http:80 \
            --zone us-central1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
            --named-ports http:80 \
            --zone europe-west1-b
        
        gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
            --named-ports http:80 \
            --zone europe-west1-b
        
  2. Crea una verificación de estado. 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
        
  3. 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 \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
        gcloud compute backend-services create web-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. Agrega tus grupos de instancias como backends a los servicios de backend. Un backend define la capacidad (uso 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
        
  5. 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 una asignación de URL:

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

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

    Se usa un certificado autofirmado con fines de demostración, pero en una implementación real, debes configurar tu balanceador de cargas para usar un certificado firmado por una CA. En ese caso, puedes usar un certificado autoadministrado, en el que proporcionas tu propio certificado SSL o un certificado administrado por Google, en el que Google emite un certificado para tu dominio. 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]
        
  7. Crea un proxy HTTPS de destino para enrutar las solicitudes a tu asignación de URL. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas de HTTPS, por lo que también debes subir el certificado en este paso.

        gcloud compute target-https-proxies create https-lb-proxy \
            --url-map web-map --ssl-certificates www-ssl-cert
        
  8. Crea dos reglas de reenvío global a fin de 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 se dispersa el tráfico a las diferentes instancias.

Console/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. En caso contrario, primero 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. Si usas un certificado administrado por Google, confirma que el estado de tu recurso de certificado sea ACTIVO. Para obtener más información, consulta el estado de los recursos del certificado SSL administrado por Google.
  5. Después de que en Cloud Console se muestre que las instancias de backend están en buen estado, puedes probar el balanceador de cargas con un navegador web. Para ello, ve al https://<var>IP_Address</var>, en el que IP_Address es la dirección IP del balanceador de cargas. Si usaste un certificado autofirmado para las pruebas, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado. 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 www-us-02 in us-central1-b).
  6. En tu navegador, navega hasta https://<var>IP_Address</var>/video, en el que IP_Address es 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 video-us-02 in us-central1-b).

gcloud/mediante curl


  1. Si usas un certificado administrado por Google, confirma que el estado de tu recurso de certificado sea ACTIVO antes de continuar. Para obtener más información, consulta el estado de los recursos del certificado SSL administrado por Google.

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

        curl -k https://IP_Address
        curl -k https://IP_Address/video/
        
  3. Usa el comando curl para probar la respuesta de estas URL. Reemplaza IP_Address por la dirección IPv6 del balanceador de cargas. Para IPv6, debes 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.

Verás el resultado de HTML <!doctype html><html><body><h1>www-us</h1></body></html>.

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

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

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

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 las medidas de 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 Conéctate a instancias que no tienen dirección IP externa.

Realiza una limpieza

Después de completar este instructivo del balanceo de cargas de HTTP(S), puedes borrar los recursos de Cloud Load Balancing que creaste 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 el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

gcloud


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

    gcloud projects delete project_id
    

Borra recursos individuales

Console


Borra el balanceador de cargas

  1. 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 las 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 Borrar.
  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 de redes de VPC en Google Cloud Console.
    Ir a la página Red de VPC
  2. Haz clic en lb-network.
  3. En la página de detalles de la red, haz clic en Borrar red de VPC.
  4. En la ventana de confirmación, haz clic en Borrar.

gcloud


Borra el balanceador de cargas

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

  1. Borra las reglas de reenvío:

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

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

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

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

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

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

        gcloud compute health-checks delete http-basic-check
        

Ya borraste todos los recursos del balanceador de cargas.

Borra los grupos de instancias

Repite el siguiente comando para crear cuatro grupos de instancias no administrados, mediante las siguientes combinaciones de nombre y zona. Reemplaza INSTANCE_GROUP_NAME y ZONE según 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 mediante las siguientes combinaciones de nombre y zona. Reemplaza VM_NAME y ZONE según corresponda:

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

Borra las reglas de firewall

Borra ambas reglas de firewall:

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

Borra la red de VPC

Primero, borra us-subnet:

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

A continuación, borra eu-subnet:

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

Por último, borra la red de VPC mediante el siguiente comando:

    gcloud compute networks delete lb-network
    

Ya borraste todos los recursos que configuraste en este proyecto.

Próximos pasos