Configura el balanceo de cargas entre regiones para los servidores web de Microsoft IIS


En este instructivo, se describe cómo usar un balanceador de cargas de aplicaciones externo para distribuir el tráfico a los servidores web de Microsoft Internet Information Services (IIS) que se ejecutan en VMs de Compute Engine aprovisionadas en diferentes regiones.

Objetivo

En este instructivo, se muestra cómo balancear las cargas del tráfico del sitio www.example.com y asegurarte de que se cumpla lo siguiente:

  • Las solicitudes entrantes se enrutan a la región más cercana.
  • Si una instancia falla o alcanza su capacidad, el balanceador de cargas enruta las solicitudes a otras instancias responsivas en la misma región o en una diferente.

Para esta situación, la configuración usa un balanceador de cargas de aplicaciones externo que recibe solicitudes a través de una única dirección IP global. Esta dirección IP puede enrutar cada solicitud entrante por tipo de conexión, es decir, HTTP o HTTPS. Para las solicitudes HTTPS, el balanceador de cargas implementa la encriptación SSL/TLS entre el cliente que envía la solicitud y el balanceador de cargas.

En el siguiente diagrama, se muestra la arquitectura del balanceador de cargas:

Balanceo de cargas entre regiones

Ten en cuenta que el balanceador de cargas consta de varios componentes para una configuración máxima. Para obtener una descripción de la función de cada componente, consulta la descripción general del balanceador de cargas de aplicaciones externo.

En este instructivo, se muestra cómo completar las siguientes tareas para alcanzar tu objetivo:

  • Configurar las instancias de backend.
  • Crea y configura el servicio de balanceo de cargas.
  • Envía tráfico a los backends.
  • Restringe el acceso a los backends.
  • Simula una interrupción.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

  • Instancias de máquina virtual (VM) de Compute Engine
  • Discos persistentes de Compute Engine
  • Opcional: Certificado SSL administrado por Google
  • Imágenes de máquina de Windows Server 2016

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de Compute Engine, BigQuery, and Cloud Firestore.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de Compute Engine, BigQuery, and Cloud Firestore.

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  12. Como alternativa, puedes usar Cloud Shell en la consola de Google Cloud para interactuar con Google Cloud, en cuyo caso no tienes que instalar Google Cloud CLI.
  13. Instala un cliente de protocolo de escritorio remoto (RDP) Para obtener más información, consulta Clientes de escritorio remoto de Microsoft. Si ya tienes instalado un cliente de RDP, puedes omitir esta tarea.
  14. Decide las zonas y las regiones en las que deseas aprovisionar tus recursos. En el diagrama de arquitectura, se muestran los recursos implementados en las diferentes zonas de las regiones US y EU. Esto es solo de referencia. Puedes implementar tus recursos en cualquier región o zona que elijas.
  15. Opcional: Lee y comprende la Descripción general del balanceador de cargas de aplicaciones externo.

Configura las instancias de backend

En esta sección, crearás dos servicios de backend en diferentes regiones. Cada servicio de backend incluye dos instancias de backend, las cuales ejecutan un servidor web Microsoft IIS en Windows Server 2016. Si deseas evitar una configuración manual complicada de cada servidor, crea una imagen de disco desde una instancia del servidor y, luego, usar esta imagen para crear las otras instancias del servidor.

Crea y configura una instancia de Compute Engine

Para crear la instancia que se usará como imagen de origen, sigue estos pasos:

Desde Google Cloud Marketplace, inicia una instancia de Windows Server 2016 que ejecute Microsoft IIS en Compute Engine en una zona de tu elección y configura reglas de firewall para permitir el tráfico HTTP, HTTPS y RDP externo a tu instancia de imagen de origen:

  1. En la consola de Google Cloud, ve a la página ASP.NET Framework de Cloud Marketplace.

    Ir a Cloud Marketplace

  2. Haga clic en Iniciar.

  3. En el campo Nombre de la implementación, ingresa src-img.

  4. En el campo Zona, selecciona la zona en la que deseas implementar la imagen.

  5. En el campo Versión del SO de Windows Server, selecciona 2016.

  6. En la sección Herramientas de redes: Firewall, selecciona solo las siguientes opciones:

    • Permitir tráfico HTTP
    • Permitir tráfico HTTPS
    • Permitir el tráfico de RDP

  7. Acepta las Condiciones del Servicio y haz clic en Implementar.

  8. Espera a que se cree la instancia de Compute Engine.

Configura la instancia de imagen de origen

Para configurar la instancia de imagen de origen nueva, crea un usuario de Windows nuevo en la instancia de imagen de origen y establece una conexión RDP:

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el nombre de la instancia de imagen de origen (src-img).

  3. Haga clic en Configurar contraseña de Windows.

  4. En el cuadro de diálogo Configurar nueva contraseña de Windows, agrega el nombre de usuario y haz clic en Configurar para crear la cuenta de usuario en la instancia.

  5. Copia la contraseña proporcionada y cierra el cuadro de diálogo.

  6. Haz clic en el menú desplegable RDP y selecciona la opción Descargar el archivo RDP para descargar el archivo RDP de tu instancia. Usa este archivo para conectarte a la instancia mediante un cliente de RDP. Para obtener más información, consulta Clientes de escritorio remoto de Microsoft.

Después de establecer una conexión RDP con la instancia de imagen de origen, agrega una página principal predeterminada en el directorio web predeterminado de IIS:

  1. En la instancia de imagen de origen, abre PowerShell como administrador.

  2. Crea una página principal nueva en el directorio web predeterminado de IIS C:\inetpub\wwwroot:

    Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
    

Verifica que la instancia de imagen de origen pueda entregar contenido

En la consola de Google Cloud, ve a la página Instancias de VM.

Ir a Instancias de VM

Haz clic en la dirección IP externa de la instancia para verificar que esté entregando la página principal que creaste anteriormente.

Crea una imagen reutilizable de Windows Server 2016 desde la instancia de imagen de origen

Después de verificar que la instancia de imagen de origen está correctamente configurada y puede entregar contenido, crea una imagen de disco reutilizable desde el disco persistente raíz de la instancia:

  1. En la instancia de imagen de origen, abre PowerShell como administrador.
  2. Ejecuta el siguiente comando a fin de preparar el sistema para la clonación:

    GCESysprep
    

    Una vez que se complete la operación GCESysprep, te desconectas automáticamente de la sesión de RDP.

  3. En la máquina local, ejecuta el siguiente comando para borrar la instancia de origen y, a su vez, guardar el disco persistente raíz:

    gcloud compute instances delete src-img \
       --keep-disks=boot \
       --zone=INSTANCE_ZONE
    

    Reemplaza INSTANCE_ZONE por la zona de tu instancia de origen.

  4. Una vez que se borre la instancia, crea una imagen nueva desde el disco persistente raíz que guardaste:

    gcloud compute images create win-be-img \
       --source-disk=src-img \
       --source-disk-zone=IMAGE_ZONE
    

    Reemplaza IMAGE_ZONE por la zona en la que deseas crear la imagen de origen.

Crea una plantilla de instancias con la imagen de origen

Usa la imagen de disco de tu servidor de Windows configurado como la imagen de origen para una plantilla de instancias. Más adelante, configurarás dos grupos de instancias administrados a fin de usar esta plantilla para instancias nuevas.

En tu máquina local, ejecuta el siguiente comando para crear una plantilla de instancias que use win-be-img como imagen de origen y rdp-tag y www-tag como etiquetas de instancia:

gcloud compute instance-templates create win-be-tmpl \
    --tags=rdp-tag,www-tag \
    --image=win-be-img

Crea un grupo de instancias administrado para cada región

En cada región, crea grupos de instancias administrados. Después de crear cada grupo de instancias, el grupo se propaga automáticamente con dos instancias idénticas según la plantilla de instancias que definiste con anterioridad. Más adelante, configurarás el balanceador de cargas para tratar estos grupos de instancias como objetivos de backend.

Para crear los grupos de instancias administrados, haz lo siguiente:

  1. En tu máquina local, ejecuta el siguiente comando para crear un nuevo grupo de instancias administrado en la zona en la que creaste la imagen y propagarlo de forma automática con dos instancias idénticas:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \
       --base-instance-name=BASE_INSTANCE_NAME_1 \
       --size=2 \
       --zone=ZONE_1 \
       --template=win-be-tmpl
    

    Reemplaza lo siguiente:

    • MANAGED_INSTANCE_GROUP_NAME_1: El nombre de la instancia administrada
    • BASE_INSTANCE_NAME_1: El nombre de la instancia base
    • ZONE_1: La zona en la que deseas implementar tu instancia administrada
  2. Crea un grupo de instancias administrado en la segunda zona:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \
       --base-instance-name=BASE_INSTANCE_NAME_2 \
       --size=2 \
       --zone=ZONE_2 \
       --template=win-be-tmpl
    

    Reemplaza lo siguiente:

    • MANAGED_INSTANCE_GROUP_NAME_2: El nombre de la instancia administrada
    • BASE_INSTANCE_NAME_2: El nombre de la instancia base
    • ZONE_2: La zona en la que deseas implementar tu instancia administrada

Verifica que las instancias de backend se estén ejecutando

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en la dirección IP externa de cada backend para verificar que esté entregando la página principal que creaste anteriormente.

Crea y configura el servicio de balanceo de cargas

El servicio de balanceo de cargas de Compute Engine incluye varios componentes. En esta sección, crearás estos componentes y los conectarás entre sí.

  1. En tu máquina local, ejecuta el siguiente comando para crear una verificación de estado nueva. El balanceador de cargas usa esta verificación para comprobar la capacidad de respuesta de tus instancias de backend:

    gcloud compute http-health-checks create basic-check
    
  2. Crea un servicio de backend:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --protocol=HTTP \
      --http-health-checks=basic-check \
      --global
    

    Reemplaza BACKEND_SERVICE_NAME por un nombre para el servicio de backend.

  3. Agrega los grupos de instancias como objetivos de backend para el servicio de backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \
       --instance-group-zone=ZONE_1
    
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \
       --instance-group-zone=ZONE_2
    
  4. Crea un mapa de URL predeterminado que dirija todas las solicitudes entrantes a todas tus instancias:

    gcloud compute url-maps create lb-map \
       --default-service=BACKEND_SERVICE_NAME
    
  5. Crea un recurso de certificado SSL. El balanceador de cargas usa este recurso para encriptar y desencriptar el tráfico.

    Si ya tienes una clave privada y un certificado SSL de una autoridad certificadora, puedes usarlos para crear un recurso de SSLCertificate nuevo mediante la ejecución del siguiente comando. De lo contrario, puedes crear y usar un certificado SSL administrado por Google o un certificado autofirmado para pruebas. Para obtener más información, consulta Certificados SSL.

    Ejecuta el siguiente comando para crear el recurso de certificado SSL.

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

    Reemplaza lo siguiente:

    • CRT_FILE_PATH: La ruta de acceso del archivo local de tu certificado
    • KEY_FILE_PATH: la ruta del archivo de la clave privada
  6. Crea proxies HTTP y HTTPS de destino para enrutar las solicitudes al mapa de URL. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas HTTPS, por lo que también debes cargar el certificado en este paso:

    gcloud compute target-http-proxies create http-lb-proxy \
       --url-map=lb-map
    
    gcloud compute target-https-proxies create https-lb-proxy \
       --url-map lb-map \
       --ssl-certificate SSL_CERT
    

    Reemplaza SSL_CERT en función de lo siguientes:

    • Si creaste un recurso SSLCertificate con tu certificado SSL y una clave privada, reemplaza SSL_CERT por www-cert.
    • Si usas un certificado SSL administrado por Google o autofirmado, reemplaza SSL_CERT por el nombre de tu certificado.
  7. Para que el balanceador de cargas reciba tráfico de manera confiable, debes asignar una dirección IP estática global a la regla de reenvío global del balanceador de cargas.

    Para crear un recurso de dirección IP estática global, ejecuta el siguiente comando:

    gcloud compute addresses create lb-ip \
       --global \
       --network-tier=PREMIUM
    

    Anota la dirección IP.

  8. Crea dos reglas de reenvío globales para controlar las solicitudes HTTP y HTTPS entrantes. Cada regla de reenvío enviará tráfico a uno de los proxies de destino que creaste, según la dirección IP, el protocolo IP y el puerto especificado.

    • Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con load-balancing-scheme=EXTERNAL_MANAGED. Esta configuración ofrece capacidad avanzada de administración de tráfico.
    • Para un balanceador de cargas de aplicaciones clásico, usa load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create http-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-http-proxy=http-lb-proxy \
       --ports=80
    
    gcloud compute forwarding-rules create https-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-https-proxy=https-lb-proxy \
       --ports=443
    

Una vez que creas las reglas de reenvío globales, la configuración puede tardar varios minutos en propagarse. Para comprobar el progreso de la propagación, puedes supervisar la configuración en la consola de Google Cloud o ejecutar el siguiente comando en tu máquina local:

gcloud compute backend-services get-health BACKEND_SERVICE_NAME

Envía tráfico a los backends

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

Envía tráfico a los backends de la siguiente manera:

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a Balanceo de cargas

  2. Selecciona la pestaña Frontends.

  3. Para ver la página principal predeterminada, haz clic en las direcciones IP en la columna Dirección.

Restringe el acceso a los backends

Después de verificar que todo funcione según lo previsto, modifica las reglas de firewall para que el tráfico HTTP o HTTPS solo pueda provenir del servicio de balanceo de cargas:

  1. En la consola de Google Cloud, ve a la página Firewall.

    Ir a Firewall

  2. Haz clic en la regla de firewall que permite el acceso externo al puerto 80.

  3. Haz clic en Editar para editar la regla de firewall.

  4. En el campo Rangos de IPv4 de origen, ingresa 130.211.0.0/22. Esto restringe las IP de origen permitidas por la regla de firewall al rango 130.211.0.0/22, que es el rango de IP de verificación de estado del balanceo de cargas HTTPS.

  5. Haz clic en Guardar.

  6. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  7. Haz clic en la dirección IP externa de cada instancia para verificar que ahora sean inaccesibles.

Simula una interrupción

Para ver cómo se balancea una carga entre las instancias responsivas, puedes simular una interrupción para una o más instancias en una región.

Para evitar que una instancia reciba solicitudes adicionales, sigue estos pasos:

  1. Establece una conexión RDP a la instancia.
  2. En la instancia, abre PowerShell como administrador.
  3. Ejecuta el siguiente comando para crear una regla de firewall nueva en la instancia. Este comando bloquea el tráfico de verificación de estado del verificador e impide todas las conexiones HTTP nuevas desde el balanceador de cargas a la instancia:

    netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
    
  4. En tu máquina local, ejecuta el siguiente comando para verificar que la instancia ahora informe un estado UNHEALTHY:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    
  5. Una vez que la instancia comience a informar un estado UNHEALTHY, envía una solicitud al balanceador de cargas. Solo deberían responder las instancias responsivas.

  6. Una vez que termines de simular una interrupción, puedes borrar la regla de firewall para restablecer la conectividad de la instancia. Después de que abras PowerShell como administrador en la instancia no responsiva, ejecuta el siguiente comando para borrar la regla:

    netsh advfirewall firewall delete rule name="Outage Test"
    

Limpia

Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

Deberás borrar individualmente todos los recursos creados para el proyecto (imágenes, plantillas de instancias, grupos de instancias, verificaciones de estado, servicios de backend, mapas de URL, proxy HTTP, direcciones y reglas de reenvío). No puedes borrar las instancias de VM hasta que ejecutes los siguientes comandos.

Ejecuta los siguientes comandos en tu máquina local para borrar los recursos creados para el instructivo:

  1. Borra las reglas de reenvío de HTTP/S:
    gcloud compute forwarding-rules delete https-fwd-rule --global
    
    gcloud compute forwarding-rules delete http-fwd-rule --global
    
  2. Borra la dirección IP estática global:
    gcloud compute addresses delete lb-ip --global
    
  3. Borra los proxies HTTP/S:
    gcloud compute target-https-proxies delete https-lb-proxy
    
    gcloud compute target-http-proxies delete http-lb-proxy
    
  4. Borra el certificado SSL:
    gcloud compute ssl-certificates delete SSL_CERT
    
  5. Borra la asignación de URL:
    gcloud compute url-maps delete lb-map
    
  6. Borra el servicio de backend:
    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
    
  7. Borra la verificación de estado HTTP:
    gcloud compute http-health-checks delete basic-check
    
  8. Borra los grupos de instancias administrados:
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
    
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
    
  9. Borra la plantilla de instancias:
    gcloud compute instance-templates delete win-be-tmpl
    
  10. Borra la imagen:
    gcloud compute images delete IMAGE_NAME
  11. Borra el disco:
    gcloud compute disks delete DISK_NAME

¿Qué sigue?