Balanceo de cargas entre regiones con los 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

Supón que necesitas balancear las cargas del tráfico del sitio www.example.com. Quieres que las solicitudes entrantes se enruten a la región más cercana. Sin embargo, también deseas que, si se produce una falla o si las instancias de una región ya alcanzaron la capacidad máxima, se pueda hacer una conmutación por error para que las solicitudes pasen a una instancia en buen estado en la siguiente región más cercana.

Para esta situación, la configuración usa un balanceador de cargas de HTTP(S) 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 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 incluye 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, debes 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 se usará como imagen de origen, sigue estos pasos:

  1. En la máquina local Windows, abre PowerShell.
  2. Crea una nueva instancia 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:

    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 con rdp-tag. Esta regla permite que la instancia de imagen de origen, y cualquier instancia posterior que use la etiqueta rdp-tag, sea accesible mediante RDP:

    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 con www-tag. Esta regla hace que tu instancia de imagen de origen y cualquier instancia posterior que use la etiqueta www-tag envíe y reciba tráfico HTTP:

    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

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 Google Cloud Console, 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. Haz clic en el botón 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. 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, tienes 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:

    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 nueva página principal en C:\inetpub\wwwroot, el directorio web predeterminado de IIS:

    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 Cloud Console, ve a la página Instancias de VM.

Ir a Instancias de VM

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:

    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
  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 us-central1-f

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 us-central1-f y propagarlo con dos instancias idénticas:

    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:

    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

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

    Ir a Instancias de VM

  2. 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 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 de estado para comprobar el estado de las instancias de backend:

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

    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:

    gcloud beta compute backend-services add-backend be-srv \
       --instance-group us-be-group \
       --zone us-central1-f
    
    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 dirija todas las solicitudes entrantes a todas tus instancias:

    gcloud compute url-maps create lb-map --default-service be-srv
  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 autofirmado a fin de realizar pruebas. Para obtener más información, consulta Certificados SSL.

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

    gcloud beta 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 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:

    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.

    gcloud compute forwarding-rules create http-fwd-rule \
       --address LB_IP_ADDR \
       --global \
       --target-http-proxy http-lb-proxy \
       --port-range 80
    
    gcloud beta compute forwarding-rules create https-fwd-rule \
       --address LB_IP_ADDR \
       --global \
       --target-https-proxy https-lb-proxy \
       --port-range 443

    Reemplaza LB_IP_ADDR por la dirección IP estática que creaste en el paso anterior.

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 Google Cloud Console o ejecutar el siguiente comando en tu máquina local:

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.

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

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

    Ir al balanceo de cargas

  2. Para ver la página principal predeterminada, haz clic en las direcciones IP en la columna Tráfico entrante.

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 tu máquina local, ejecuta el siguiente comando para actualizar la regla de firewall www-rule. Restringe las 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):

    gcloud compute firewall-rules update www-rule \
       --source-ranges 130.211.0.0/22 \
       --target-tags www-tag
  2. En Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

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

Simula una interrupción

Para ver cómo se balancea una carga entre las instancias en buen estado, 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 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:

    netsh advfirewall firewall delete rule name="Outage Test"

Realiza una limpieza

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

Borra el proyecto de tu proyecto de Cloud

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

Para borrar el proyecto, sigue estos pasos:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el 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, haz lo siguiente:

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

    Ir a Instancias de VM

  2. Selecciona tu instancia en la casilla de verificación de es la instancia que deseas borrar.
  3. Para borrar la instancia, haz clic en Más acciones, en Borrar y, luego, sigue las instrucciones.

Borra los discos persistentes

Para borrar un disco de Compute Engine, haz lo siguiente:

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

    Ir a Discos

  2. Selecciona la casilla de verificación para el disco que deseas borrar.
  3. Para borrar el disco, haz clic en Borrar.

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

Explora arquitecturas de referencia, diagramas, instructivos y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.