En este tutorial se describe cómo usar un balanceador de carga de aplicaciones externo para distribuir el tráfico a servidores web de Microsoft Internet Information Services (IIS) que se ejecutan en máquinas virtuales de Compute Engine aprovisionadas en diferentes regiones.
Objetivo
En este tutorial se explica cómo balancear la carga del tráfico del sitio www.example.com
y asegurarse de que:
- Las solicitudes entrantes se dirigen a la región más cercana.
- Si una instancia falla o alcanza su capacidad, el balanceador de carga dirige las solicitudes a otras instancias que responden en la misma región o en otra.
La configuración de este caso práctico usa un balanceador de carga de aplicación 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. En el caso de las solicitudes HTTPS, el balanceador de carga implementa el cifrado SSL/TLS entre el cliente que envía la solicitud y el balanceador de carga.
En el siguiente diagrama se muestra la arquitectura del balanceador de carga:
Ten en cuenta que el balanceador de carga incluye varios componentes para ofrecer la máxima configurabilidad. Para ver una descripción de la función de cada componente, consulta la descripción general de los balanceadores de carga de aplicación externos.
En este tutorial se explica cómo completar las siguientes tareas para alcanzar tu objetivo:
- Configura las instancias de backend.
- Crea y configura el servicio de balanceo de carga.
- Envía tráfico a los backends.
- Restringe el acceso a los backends.
- Simular una interrupción del servicio.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Compute Engine virtual machine (VM) instances
- Compute Engine persistent disks
- Optional: Google-managed SSL certificate
- Windows Server 2016 machine images
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- 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 RDP, puedes saltarte esta tarea.
- Decide las zonas y las regiones en las que quieres aprovisionar tus recursos. El diagrama de arquitectura muestra los recursos desplegados en las distintas zonas de las regiones de EE. UU. y la Unión Europea. Esto es solo para que lo tengas en cuenta. Puedes implementar tus recursos en las regiones o zonas que quieras.
- Opcional: Lee y comprende la información general sobre el balanceador de carga de aplicación externo.
En la Google Cloud consola, ve a la página de Cloud Marketplace de ASP.NET Framework.
Haz clic en Lanzar.
En el campo Nombre de la implementación, introduce src-img.
En el campo Zona, selecciona la zona en la que quieras desplegar la imagen.
En el campo Windows Server OS Version (Versión del SO Windows Server), selecciona 2016.
En la sección Redes - Firewall, seleccione solo las siguientes opciones:
- Permitir el tráfico HTTP
- Permitir el tráfico HTTPS
- Permitir el tráfico de RDP
Acepta los términos del servicio y haz clic en Implementar.
Espera a que se cree la instancia de Compute Engine.
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en el nombre de tu instancia de imagen de origen (
src-img
).Haz clic en Configurar contraseña de Windows.
En el cuadro de diálogo Set new Windows password (Definir nueva contraseña de Windows), añade tu nombre de usuario y haz clic en Set (Definir) para crear la cuenta de usuario en tu instancia.
Copia la contraseña proporcionada y cierra el cuadro de diálogo.
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 con un cliente RDP. Para obtener más información, consulta Clientes de Escritorio Remoto de Microsoft.
En la instancia de la imagen de origen, abre PowerShell como administrador.
Crea una página principal 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
- En la instancia de la imagen de origen, abre PowerShell como administrador.
Ejecuta el siguiente comando para preparar tu sistema para la clonación:
GCESysprep
Cuando se complete la operación de
GCESysprep
, se te desconectará automáticamente de tu sesión de RDP.En tu máquina local, ejecuta el siguiente comando para eliminar tu instancia de origen y conservar su disco persistente raíz:
gcloud compute instances delete src-img \ --keep-disks=boot \ --zone=INSTANCE_ZONE
Sustituye
INSTANCE_ZONE
por la zona de tu instancia de origen.Una vez eliminada la instancia, crea una imagen a partir del disco persistente raíz que has conservado:
gcloud compute images create win-be-img \ --source-disk=src-img \ --source-disk-zone=IMAGE_ZONE
Sustituye
IMAGE_ZONE
por la zona en la que quieras crear la imagen de origen.En tu máquina local, ejecuta el siguiente comando para crear un grupo de instancias gestionadas en la zona en la que has creado la imagen y rellénalo automáticamente 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
Haz los cambios siguientes:
MANAGED_INSTANCE_GROUP_NAME_1
: el nombre de tu instancia gestionadaBASE_INSTANCE_NAME_1
: el nombre de tu instancia baseZONE_1
: la zona en la que quieres desplegar tu instancia gestionada
Crea un grupo de instancias gestionado 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
Haz los cambios siguientes:
MANAGED_INSTANCE_GROUP_NAME_2
: el nombre de tu instancia gestionadaBASE_INSTANCE_NAME_2
: el nombre de tu instancia baseZONE_2
: la zona en la que quieres desplegar tu instancia gestionada
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en la dirección IP externa de cada backend para verificar que el backend está sirviendo la página principal que has creado antes.
En tu máquina local, ejecuta el siguiente comando para crear una comprobación del estado. Tu balanceador de carga usa esta comprobación para comprobar la capacidad de respuesta de tus instancias de backend:
gcloud compute http-health-checks create basic-check
Crea un servicio de backend:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --protocol=HTTP \ --http-health-checks=basic-check \ --global
Sustituye
BACKEND_SERVICE_NAME
por el nombre del servicio de backend.Añade tus grupos de instancias como destinos de backend de tu 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
Crea un mapa de URLs predeterminado que dirija todas las solicitudes entrantes a todas tus instancias:
gcloud compute url-maps create lb-map \ --default-service=BACKEND_SERVICE_NAME
Crea un recurso de certificado SSL. Tu balanceador de carga usa este recurso para cifrar y descifrar el tráfico.
Si ya tienes una clave privada y un certificado SSL de una autoridad de certificación, puedes usarlos para crear un recurso
SSLCertificate
ejecutando el siguiente comando. De lo contrario, puedes crear y usar un certificado SSL gestionado por Google o un certificado autofirmado para hacer pruebas. Para obtener más información, consulta el artículo 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
Haz los cambios siguientes:
CRT_FILE_PATH
: ruta del archivo local de tu certificadoKEY_FILE_PATH
: la ruta del archivo de tu clave privada
Crea proxies HTTP y HTTPS de destino para enrutar las solicitudes a tu mapa de URLs. El proxy es la parte del balanceador de carga que contiene el certificado SSL para el balanceo de carga 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
Sustituye SSL_CERT por lo siguiente:
- Si has creado un recurso SSLCertificate con tu certificado SSL y tu clave privada, sustituye
SSL_CERT
por www-cert. - Si usas un certificado SSL gestionado por Google o autofirmado, sustituye
SSL_CERT
por el nombre de tu certificado.
- Si has creado un recurso SSLCertificate con tu certificado SSL y tu clave privada, sustituye
Para que tu balanceador de carga reciba tráfico de forma fiable, debes asignarle una dirección IP estática global a la regla de reenvío global del balanceador de carga.
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.
Crea dos reglas de reenvío globales para gestionar las solicitudes HTTP y HTTPS entrantes. Cada regla de reenvío envía tráfico a uno de los proxies de destino que hayas creado en función de la dirección IP, el protocolo IP y el puerto especificados.
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
load-balancing-scheme=EXTERNAL_MANAGED
. Este ajuste ofrece funciones avanzadas de gestión del tráfico. - En el caso de un balanceador de carga de aplicación 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
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
En la Google Cloud consola, ve a la página Balanceo de carga.
Selecciona la pestaña Frontends.
Para ver tu página principal predeterminada, haz clic en las direcciones IP de la columna Dirección.
En la Google Cloud consola, ve a la página Cortafuegos.
Haz clic en el nombre de la regla de cortafuegos que permite el acceso externo al puerto
tcp:80
.Haz clic en Editar para modificar la regla de cortafuegos.
En el campo Intervalos de IPv4 de origen, elimina el valor
0.0.0.0/0
e introduce 130.211.0.0/22. De esta forma, las IPs de origen permitidas de la regla de cortafuegos se restringen al intervalo130.211.0.0/22
, que es el intervalo de IPs de comprobación del estado del balanceo de carga HTTPS.Haz clic en Guardar.
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en la dirección IP externa de cada instancia para verificar que ya no se puede acceder a ella.
- Establece una conexión RDP con la instancia.
- En la instancia, abre PowerShell como administrador.
Ejecuta el siguiente comando para crear una regla de cortafuegos en la instancia. Este comando bloquea el tráfico de comprobación del estado del comprobador del estado e impide todas las conexiones HTTP nuevas del balanceador de carga 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
En tu máquina local, ejecuta el siguiente comando para verificar que la instancia ahora informa del estado
UNHEALTHY
:gcloud compute backend-services get-health BACKEND_SERVICE_NAME
Una vez que la instancia empiece a informar del estado
UNHEALTHY
, envía una solicitud a tu balanceador de carga. Solo deben responder las instancias adaptables.Cuando hayas terminado de simular una interrupción, puedes restaurar la conectividad de tu instancia eliminando la regla de firewall. Después de abrir PowerShell como administrador en la instancia que no responde, ejecuta el siguiente comando para eliminar la regla:
netsh advfirewall firewall delete rule name="Outage Test"
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- Elimina 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
- Elimina la dirección IP estática global:
gcloud compute addresses delete lb-ip --global
- Elimina los proxies HTTP/S:
gcloud compute target-https-proxies delete https-lb-proxy
gcloud compute target-http-proxies delete http-lb-proxy
- Elimina el certificado SSL:
gcloud compute ssl-certificates delete SSL_CERT
- Elimina el mapa de URLs:
gcloud compute url-maps delete lb-map
- Elimina el servicio backend:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
- Elimina la comprobación del estado de HTTP:
gcloud compute http-health-checks delete basic-check
- Elimina los grupos de instancias gestionados:
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
- Elimina la plantilla de instancia:
gcloud compute instance-templates delete win-be-tmpl
- In the Google Cloud console, go to the Images page.
- Select the checkbox for the image that you want to delete.
- To delete the image, click Delete.
- In the Google Cloud console, go to the Disks page.
- Select the checkbox for the disk that you want to delete.
- To delete the disk, click Delete.
- Sigue el tutorial para desplegar servidores web IIS con balanceo de carga.
- Consulta las prácticas recomendadas del Google Cloud framework Well-Architected.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.
Configurar las instancias de backend
En esta sección, crearás dos servicios backend en regiones diferentes. Cada servicio de backend incluye dos instancias de backend, cada una de las cuales ejecuta un servidor web Microsoft IIS en Windows Server 2016. Para evitar tener que configurar manualmente cada servidor, crea una imagen de disco a partir de una instancia de servidor y, a continuación, usa esta imagen para crear las demás instancias de servidor.
Crear y configurar una instancia de Compute Engine
Para crear la instancia que se usará como imagen de origen, sigue estos pasos:
En Google Cloud Marketplace, inicia una instancia de Windows Server 2016 que ejecute Microsoft IIS en Compute Engine en la zona que elijas y configura reglas de cortafuegos para permitir el tráfico HTTP, HTTPS y RDP externo a tu instancia de imagen de origen:
Configurar la instancia de imagen de origen
Para configurar la nueva instancia de imagen de origen, crea un usuario de Windows en la instancia de imagen de origen y establece una conexión RDP:
Después de establecer una conexión RDP con la instancia de imagen de origen, añade una página principal predeterminada en el directorio web predeterminado de IIS:
Verificar que la instancia de la imagen de origen puede publicar contenido
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en la dirección IP externa de tu instancia para verificar que está sirviendo la página principal que has creado antes.
Crear una imagen reutilizable de Windows Server 2016 a partir de la instancia de imagen de origen
Después de verificar que la instancia de imagen de origen está configurada correctamente y puede servir contenido, crea una imagen de disco reutilizable a partir del disco persistente raíz de la instancia:
Crear una plantilla de instancia con tu imagen de origen
Usa la imagen de disco de tu servidor Windows configurado como imagen de origen de una plantilla de instancia. Más adelante, configurarás dos grupos de instancias gestionadas para que usen esta plantilla en las instancias nuevas.
En tu máquina local, ejecuta el siguiente comando para crear una plantilla de instancia 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 gestionado para cada región
En cada región, crea grupos de instancias gestionadas. Después de crear cada grupo de instancias, se rellenará automáticamente con dos instancias idénticas basadas en la plantilla de instancia que hayas definido anteriormente. Más adelante, configurará el balanceador de carga para que trate estos grupos de instancias como destinos de backend.
Para crear tus grupos de instancias gestionadas, sigue estos pasos:
Verificar que las instancias de backend se están ejecutando
Crear y configurar el servicio de balanceo de carga
El servicio de balanceo de carga de Compute Engine incluye varios componentes. En esta sección, crearás estos componentes y los conectarás entre sí.
Después de crear las reglas de reenvío globales, la configuración puede tardar varios minutos en propagarse. Para comprobar el progreso de la propagación, puedes monitorizar tu configuración en laGoogle Cloud console o ejecutar el siguiente comando en tu máquina local:
gcloud compute backend-services get-health BACKEND_SERVICE_NAME
Enviar tráfico a tus backends
Ahora que has configurado tu servicio de balanceo de carga, puedes empezar a enviar tráfico a la regla de reenvío y ver cómo se dispersa el tráfico a diferentes instancias.
Envía tráfico a tus backends de la siguiente manera:
Restringir el acceso a tus backends
Una vez que hayas verificado que todo funciona correctamente, modifica las reglas del cortafuegos para que el tráfico HTTP o HTTPS solo pueda proceder de tu servicio de balanceo de carga:
Simular una interrupción del servicio
Para ver cómo se equilibra la carga entre las instancias que responden, puedes simular una interrupción en una o varias instancias de una región.
Para evitar que una instancia reciba más solicitudes, sigue estos pasos:
Limpieza
Cuando hayas terminado el tutorial, puedes eliminar los recursos que has creado para que dejen de usar cuota y generar cargos. En las siguientes secciones se explica cómo eliminar o desactivar dichos recursos.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Eliminar recursos concretos
Deberá eliminar individualmente todos los recursos creados para el proyecto (imágenes, plantillas de instancia, grupos de instancias, comprobaciones de estado, servicios de backend, mapa de URLs, proxy HTTP, direcciones y reglas de reenvío). No puedes eliminar las instancias de VM hasta que ejecutes los siguientes comandos.
Ejecuta los siguientes comandos en tu máquina local para eliminar los recursos creados en el tutorial: