Balanceo de cargas entre regiones con backends de Microsoft IIS

En este instructivo, se describe cómo usar el servicio de balanceador de cargas HTTP(S) de Google Compute Engine para distribuir el tráfico a los servidores web de Microsoft Internet Information Services (IIS) entre las distintas regiones de Compute Engine.

Situación

Debes balancear las cargas del tráfico del sitio www.example.com. Deseas asegurarte de que las solicitudes entrantes se enruten a la región más cercana. Sin embargo, también deseas asegurarte de que, en caso de falla o de instancias en una región que alcancen la capacidad máxima, las solicitudes puedan pasar a una instancia en buen estado en la siguiente región más cercana.

Una vez que configures esta situación, tendrás un balanceador de cargas HTTP(S) que recibe solicitudes a través de una dirección IP global. Esta dirección IP podrá enrutar cada solicitud entrante por tipo de conexión, es decir, HTTP o HTTPS. En las solicitudes HTTPS, el balanceador de cargas implementará 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:

Diagrama del 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 balanceo de cargas HTTP(S).

Antes de comenzar

En este instructivo, se supone lo siguiente:

Configura las instancias de backend

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

Crea la instancia de imagen de origen

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

  1. En la máquina local Windows, abre PowerShell.
  2. Crea una instancia nueva de Windows Server 2012 en la región us-central1 y agrega las etiquetas rdp-tag y www-tag a la instancia. Más adelante, crearás reglas de firewall orientadas a estas etiquetas para habilitar el acceso externo a la instancia:

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

Una vez que crees la instancia de imagen de origen, configura las reglas de firewall para permitir el acceso externo a la instancia:

  1. Crea una regla de firewall para permitir el acceso externo al puerto 3389 en todas las instancias etiquetadas como rdp-tag. Esta regla permitirá que la instancia de imagen de origen, y cualquier instancia posterior que use la etiqueta rdp-tag, sea accesible con RDP:

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. Crea otra regla de firewall para permitir el acceso externo al puerto 80 en todas las instancias etiquetadas como www-tag. Esta regla permitirá que la instancia de imagen de origen, y cualquier instancia posterior que use la etiqueta www-tag, envíe y reciba tráfico HTTP:

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

Configura la instancia de imagen de origen

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

  1. En el navegador web, visita la página de VM Instances en GCP Console y haz clic en el nombre de la instancia de imagen de origen (src-img).
  2. Haz clic en el botón Configurar contraseña de Windows.
  3. 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.
  4. Copia la contraseña proporcionada y cierra el cuadro de diálogo.
  5. En la página de la consola de la instancia, haz clic en RDP.

    • Si instalaste la extensión Chrome RDP, se abrirá la ventana de la extensión. Confirma que deseas conectarte a la instancia, ingresa tu nombre de usuario y contraseña y, luego, haz clic en Aceptar para conectarte a la instancia.
    • Si eliges no instalar la extensión Chrome RDP, tendrás la opción de descargar el archivo de RDP para la instancia. Usa este archivo para conectarte a la instancia mediante la Conexión a escritorio remoto de Windows o el cliente de terceros que prefieras.

Una vez que establezcas una conexión RDP con la instancia de imagen de origen, instala IIS y agrega una página principal predeterminada:

  1. En la instancia de imagen de origen, abre PowerShell como administrador.
  2. En PowerShell, pega lo siguiente para instalar los servicios y las dependencias de IIS:

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. Una vez instalados los servicios, crea una página principal nueva en C:\inetpub\wwwroot, el directorio web predeterminado de IIS:

    PS C:\> 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 el navegador web, accede a la página de VM Instances. Haz clic en la IP externa de la instancia para verificar que esté entregando la página principal que creaste anteriormente.

Crea una imagen reutilizable de Windows Server 2012 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:

     PS C:> GCESysprep

    Una vez que se complete la operación GCESysprep, te desconectarás 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:

     PS C:> gcloud compute instances delete src-img --keep-disks boot

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

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

Crea una plantilla de instancias con la imagen de origen

Ahora que ya creaste una imagen de disco desde el servidor de Windows configurado, puedes usarla como imagen de origen para una plantilla de instancias. Más adelante, configurarás dos grupos de instancias administrados que usarán esta plantilla para crear instancias nuevas.

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

PS C:\> 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

A continuación, crea grupos de instancias administrados en cada región. Una vez que crees cada grupo de instancias, el grupo se propagará con dos instancias idénticas basadas en la plantilla de instancias que definiste anteriormente. 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, realiza lo siguiente:

  1. En la máquina local, ejecuta el siguiente comando para crear un nuevo grupo de instancias administrado en la zona us-central1-f y propagarlo con dos instancias idénticas:

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. Realiza la misma acción en la zona europe-west1-d:

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

Verifica que las instancias de backend se estén ejecutando

En el navegador web, accede a la página de VM Instances. Haz clic en la 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 consta de varios componentes. En esta sección, crearás estos componentes y los conectarás entre sí.

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

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

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check
  3. Agrega los grupos de instancias como objetivos de backend para el servicio de backend:

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. Crea un mapa de URL predeterminado que redireccione todas las solicitudes entrantes a todas las instancias:

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. Crea un recurso de certificado SSL. El balanceador de cargas usará este recurso para encriptar y desencriptar el tráfico.

    Si ya tienes una clave privada y un certificado SSL de una autoridad certificada, puedes usarlos para crear un recurso SSLCertificate nuevo con el siguiente comando. De lo contrario, puedes crear y usar un certificado autofirmado para las pruebas. Consulta Certificados SSL para obtener más información.

    Ejecuta el siguiente comando para crear el recurso de certificado SSL. Reemplaza <crt_file_path> por la ruta del archivo local del certificado y <key_file_path> por la ruta del archivo de tu clave privada.

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  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:

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  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 IP estática global, ejecuta el siguiente comando:

     PS C:> gcloud compute addresses create lb-ip --global

    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.

    Reemplaza <lb_ip_addr> en los siguientes comandos por la dirección IP estática que creaste en el paso anterior:

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address  --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address  --global ^
          --target-https-proxy https-lb-proxy --port-range 443

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

PS C:\> gcloud compute backend-services get-health be-srv

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.

Para enviar tráfico a los backends, sigue estos pasos:

  1. Abre la página Balanceador de cargas HTTP(S) en GCP Console.
  2. Haz clic en las direcciones IP en la columna Tráfico entrante. Deberías ver la página principal predeterminada.

Restringe el acceso a los backends

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

  1. En la máquina local, ejecuta el siguiente comando para actualizar la regla de firewall www-rule. Restringe sus IP de origen permitidas al rango 130.211.0.0/22, que es el rango de IP de verificación de estado del balanceo de cargas HTTP(S):

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22 ^
           --target-tags www-tag
  2. En el navegador web, accede a la página de VM Instances.

  3. Haz clic en cada instancia para verificar que ahora sean inaccesibles.

Simula una interrupción

Puedes simular una interrupción en una o más instancias de una región de modo que puedas observar cómo se balanceará la carga entre las instancias restantes en buen estado.

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 de estado y evita todas las conexiones HTTP nuevas desde el balanceador de cargas a la instancia:

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

    PS C:\> gcloud compute backend-services get-health be-srv
  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 en buen estado.

  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 que no está en buen estado, ejecuta el siguiente comando para borrar la regla:

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

Limpia

Una vez que termines el instructivo de Microsoft IIS, puedes limpiar los recursos que creaste en GCP para que no consuman tu cuota y no se te facturen en el futuro. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra el proyecto de Cloud Platform

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

Para borrar el proyecto, haz lo siguiente:

  1. En la GCP Console, dirígete a la página Proyectos.

    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.

Borra las instancias

Para borrar una instancia de Compute Engine:

  1. En GCP Console, dirígete a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en la casilla de verificación junto ala instancia que deseas borrar.
  3. Haz clic en el botón Borrar en la parte superior de la página para borrar la instancia.

Borra tus discos persistentes

Para borrar un disco de Compute Engine:

  1. En GCP Console, ve a la página Discos.

    Ir a la página Discos

  2. Marca la casilla de verificación junto al disco que quieres borrar.
  3. Haz clic en el botón Borrar en la parte superior de la página para borrar el disco.

Próximos pasos

Más información sobre el uso de Windows en Compute Engine

Revisa la documentación Instancias de Windows en Compute Engine.

Prueba otros instructivos

Prueba otras funciones de Google Cloud Platform tú mismo. Revisa nuestros instructivos.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine