Para conocer los conceptos generales, consulta la descripción general de los balanceadores de carga de aplicación externos.
Si ya usas el balanceador de carga de aplicación clásico, consulta el resumen de la migración cuando planifiques una nueva implementación con el balanceador de carga de aplicación externo global.
Topologías del balanceador de carga
En el caso de un balanceador de carga HTTPS, debes crear la configuración que se muestra en el siguiente diagrama.
En el caso de un balanceador de carga HTTP, se crea la configuración que se muestra en el siguiente diagrama.
La secuencia de eventos de los diagramas es la siguiente:
- Un cliente envía una solicitud de contenido a la dirección IPv4 externa definida en la regla de reenvío.
En el caso de un balanceador de carga HTTPS, la regla de reenvío dirige la solicitud al proxy HTTPS de destino.
En el caso de un balanceador de carga HTTP, la regla de reenvío dirige la solicitud al proxy HTTP de destino.
El proxy de destino usa la regla del mapa de URLs para determinar que el servicio de backend único recibe todas las solicitudes.
El balanceador de carga determina que el servicio de backend solo tiene un grupo de instancias y dirige la solicitud a una instancia de máquina virtual (VM) de ese grupo.
La VM sirve el contenido solicitado por el usuario.
Antes de empezar
Sigue estos pasos antes de crear el balanceador de carga.
Configurar un recurso de certificado SSL
En el caso de un balanceador de carga HTTPS, cree un recurso de certificado SSL como se describe a continuación:
Te recomendamos que uses un certificado gestionado por Google.
En este ejemplo se da por hecho que ya tienes un recurso de certificado SSL llamado www-ssl-cert
.
Configurar permisos
Para completar los pasos de esta guía, debes tener permiso para crear instancias de Compute Engine, reglas de cortafuegos y direcciones IP reservadas en un proyecto. Debes tener el rol de propietario o editor de un proyecto o los siguientes roles de gestión de identidades y accesos de Compute Engine.
Tarea | Rol necesario |
---|---|
Crear instancias | Administrador de instancias |
Añadir y eliminar reglas de cortafuegos | Administrador de seguridad |
Crear componentes de balanceador de carga | Administrador de red |
Crear un proyecto (opcional) | Project Creator |
Para obtener más información, consulta las siguientes guías:
Configurar la red y las subredes
Para crear la red y la subred de ejemplo, sigue estos pasos.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
Introduce un nombre para la red.
En Modo de creación de subred, elige Personalizado.
En la sección Nueva subred, configure los siguientes campos:
- Asigna un nombre a la subred.
- Selecciona una región.
- En Tipo de pila de IP, selecciona IPv4 (pila única).
- Introduce un intervalo de direcciones IP. Este es el intervalo IPv4 principal de la subred.
Haz clic en Listo.
Para añadir una subred en otra región, haz clic en Añadir subred y repite los pasos anteriores.
Haz clic en Crear.
gcloud
Crea la red VPC en modo personalizado:
gcloud compute networks create NETWORK \ --subnet-mode=custom
En la red, cree una subred para los backends:
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --stack-type=IPV4_ONLY \ --range=10.1.2.0/24 \ --region=REGION
Haz los cambios siguientes:
NETWORK
: nombre de la red de VPC.SUBNET
: nombre de la subred.REGION
: el nombre de la región.
Crear un grupo de instancias gestionado
Para configurar un balanceador de carga con un backend de Compute Engine, tus VMs deben estar en un grupo de instancias. En esta guía se describe cómo crear un grupo de instancias gestionado con VMs Linux que tengan Apache en ejecución y, a continuación, configurar el balanceo de carga. Un grupo de instancias gestionadas crea cada una de sus instancias gestionadas a partir de las plantillas de instancias que especifiques.
El grupo de instancias gestionado proporciona VMs que ejecutan los servidores backend de un balanceador de carga HTTP(S) externo. Para fines de demostración, los back-ends sirven sus propios nombres de host.
Antes de crear un grupo de instancias gestionado, crea una plantilla de instancia.
Consola
Para admitir el tráfico IPv4, sigue estos pasos:
En la consola, ve a la página Plantillas de instancia. Google Cloud
Haz clic en Crear plantilla de instancia.
En Nombre, escribe
lb-backend-template
.Asegúrate de que el disco de arranque esté configurado con una imagen de Debian, como Debian GNU/Linux 10 (buster). En estas instrucciones se usan comandos que solo están disponibles en Debian, como
apt-get
.Despliega Opciones avanzadas.
Despliega Redes y configura los siguientes campos:
- En Etiquetas de red, introduzca
allow-health-check
. - En la sección Interfaces de red, haz clic en
- Red:
NETWORK
- Subred:
SUBNET
- Tráfico IPv4: IPv4 (single-stack)
Editar y haz los siguientes cambios:
- Red:
- Haz clic en Listo.
- En Etiquetas de red, introduzca
Despliega Gestión. En el campo Secuencia de comandos de inicio, introduce la siguiente secuencia de comandos:
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
Haz clic en Crear.
gcloud
Para admitir el tráfico IPv4, ejecuta el siguiente comando:
gcloud compute instance-templates create TEMPLATE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_ONLY \ --tags=allow-health-check \ --image-family=debian-10 \ --image-project=debian-cloud \ --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://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Terraform
Para crear la plantilla de instancia, usa el google_compute_instance_template
resource.
Crea el grupo de instancias gestionado y selecciona la plantilla de instancia.
Consola
En la consola, ve a la página Grupos de instancias. Google Cloud
Haz clic en Crear grupo de instancias.
A la izquierda, elige Nuevo grupo de instancias gestionado (sin reconocimiento del estado).
En Nombre, escribe
lb-backend-example
.En Ubicación, selecciona Una sola zona.
En Región, selecciona la que prefieras.
En Zona, selecciona una zona.
En Plantilla de instancia, selecciona la plantilla de instancia
lb-backend-template
.En Modo de autoescalado, selecciona Activado: añade y quita instancias del grupo.
Define Número mínimo de instancias como
2
y Número máximo de instancias como2
o más.Para crear el grupo de instancias, haz clic en Crear.
gcloud
Crea el grupo de instancias gestionado a partir de la plantilla.
gcloud compute instance-groups managed create lb-backend-example \ --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
Terraform
Para crear el grupo de instancias gestionado, usa el google_compute_instance_group_manager
recurso.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añadir un puerto con nombre al grupo de instancias
En tu grupo de instancias, define un servicio HTTP y asigna un nombre de puerto al puerto correspondiente. El servicio de balanceo de carga reenvía el tráfico al puerto con nombre. Para obtener más información, consulta Puertos con nombre.
Consola
En la consola, ve a la página Grupos de instancias. Google Cloud
Haz clic en lb-backend-example.
En la página Resumen del grupo de instancias, haz clic en
Editar.En la sección Asignación de puertos, haz clic en Añadir puerto.
- En el nombre del puerto, introduce
http
. En el número de puerto, introduce80
.
- En el nombre del puerto, introduce
Haz clic en Guardar.
gcloud
Usa el comando gcloud compute instance-groups
set-named-ports
.
gcloud compute instance-groups set-named-ports lb-backend-example \ --named-ports http:80 \ --zone ZONE_A
Terraform
El atributo named_port
se incluye en el ejemplo de grupo de instancias gestionado.
Configurar una regla de cortafuegos
En este ejemplo, se crea la regla de cortafuegos fw-allow-health-check
.
Se trata de una regla de entrada que permite el tráfico de los sistemas de comprobación del 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-health-check
para identificar las VMs.
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Haz clic en Crear regla de cortafuegos para crearla.
En Nombre, escribe
fw-allow-health-check
.Selecciona una red.
En Objetivos, seleccione Etiquetas de destino especificadas.
Rellene el campo Etiquetas de destino con
allow-health-check
.En Filtro de origen, elija Intervalos de IPv4.
Asigna los valores
130.211.0.0/22
y35.191.0.0/16
a Intervalos de IPv4 de origen.En Protocolos y puertos, selecciona Protocolos y puertos especificados.
Marca la casilla TCP y, a continuación, escribe
80
en los números de puerto.Haz clic en Crear.
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
Terraform
Para crear la regla de cortafuegos, usa el recurso google_compute_firewall
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Reservar una dirección IP externa
Ahora que tus instancias están en funcionamiento, configura una dirección IP externa estática global que tus clientes usan para llegar a tu balanceador de carga.
Consola
En la Google Cloud consola, ve a la página Direcciones IP externas.
Para reservar una dirección IPv4, haz clic en Reservar dirección IP estática externa.
En Nombre, escribe
lb-ipv4-1
.Configure Nivel de servicio de red como Premium.
Configura Versión de IP como IPv4.
En Tipo, seleccione Global.
Haz clic en Reservar.
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Terraform
Para reservar la dirección IP, usa el google_compute_global_address
recurso.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Configurar el balanceador de carga
En este ejemplo, se usa HTTPS (frontend) entre el cliente y el balanceador de carga. Para HTTPS, necesitas uno o varios recursos de certificado SSL para configurar el proxy. Te recomendamos que uses un certificado gestionado por Google.
Aunque uses HTTPS en el frontend, puedes usar HTTP en el backend. Google encripta automáticamente el tráfico entre los Google Front Ends (GFEs) y tus backends que se encuentren en las Google Cloud redes de VPC.
Consola
Selecciona el tipo de balanceador de carga
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en Crear balanceador de carga.
- En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
- En Público o interno, selecciona Público (externo) y haz clic en Siguiente.
- En Implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo globales y haz clic en Siguiente.
- En Generación del balanceador de carga, selecciona Balanceador de carga de aplicación clásico y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
En Nombre del balanceador de carga, introduce un nombre como web-map-https
o web-map-http
.
Configuración del frontend
- Haz clic en Configuración de frontend.
- En Protocolo, selecciona HTTPS.
- Selecciona
IPv4
para el tráfico IPv4. En Dirección IP, define el valorlb-ipv4-1
, que has creado anteriormente. - Asigna el valor 443 a Puerto.
- Haz clic en Certificado y selecciona tu certificado SSL principal.
- Opcional: Crea una política de SSL:
- En la lista Política de SSL, selecciona Crear una política.
- Asigna el nombre
my-ssl-policy
a la política de SSL. - En Versión mínima de TLS, selecciona TLS 1.0.
- En Perfil, selecciona Moderno. Se muestran las secciones Funciones habilitadas y Funciones inhabilitadas.
- Haz clic en Guardar.
-
Opcional: Marca la casilla Habilitar redirección de HTTP a HTTPS para habilitar las redirecciones.
Si marcas esta casilla, se creará un balanceador de carga HTTP parcial adicional que usará la misma dirección IP que tu balanceador de carga HTTPS y redirigirá las solicitudes HTTP entrantes al frontend HTTPS de tu balanceador de carga.
Esta casilla solo se puede marcar si se selecciona el protocolo HTTPS y se usa una dirección IP reservada.
- Haz clic en Listo.
Configuración de backend
- Haz clic en Configuración de backend.
- En Servicios y segmentos de backend, selecciona Crear un servicio de backend.
- Añade un nombre para tu servicio backend, como
web-backend-service
. - Ve a la sección Seguridad y, a continuación, selecciona Habilitar IAP para proteger el acceso a tus aplicaciones.
Cloud CDN y IAP no son compatibles. Si tienes Cloud CDN habilitado y seleccionas habilitar IAP, Cloud CDN se inhabilita automáticamente.
-
Opcional: Configura una política de seguridad de backend predeterminada. La política de seguridad predeterminada limita el tráfico por encima de un umbral configurado por el usuario. Para obtener más información sobre las políticas de seguridad predeterminadas, consulta el artículo Descripción general de la limitación de frecuencia.
- Para inhabilitar la política de seguridad predeterminada de Cloud Armor, selecciona
None
en la lista Política de seguridad de backend de Cloud Armor. - Para configurar la política de seguridad predeterminada de Cloud Armor, selecciona Política de seguridad predeterminada en la lista Política de seguridad de backend de Cloud Armor.
- En el campo Nombre de la política, acepta el nombre generado automáticamente o introduce un nombre para tu política de seguridad.
- En el campo Número de solicitudes, acepta el número de solicitudes predeterminado o introduce un número entero entre
1
y10,000
. - En el campo Intervalo, selecciona un intervalo.
- En el campo Enforce on key (Aplicar en clave), elige uno de los siguientes valores: All (Todo), IP address (Dirección IP) o X-Forwarded-For IP address (Dirección IP X-Forwarded-For). Para obtener más información sobre estas opciones, consulta Identificar clientes para limitar la frecuencia.
- Para inhabilitar la política de seguridad predeterminada de Cloud Armor, selecciona
- Mantén el resto de los ajustes predeterminados.
- Haz clic en Crear.
Reglas de host y ruta
En Reglas de host y ruta, mantén la configuración predeterminada.
Revisar y finalizar
- Haz clic en Revisar y finalizar.
- Revisa los ajustes de configuración de tu balanceador de carga.
- Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
- Haz clic en Crear.
Espera a que se cree el balanceador de carga.
Si has creado un balanceador de carga HTTPS y has marcado la casilla Habilitar redirección de HTTP a HTTPS, también verás un balanceador de carga HTTP creado con el sufijo -redirect.
- Haz clic en el nombre del balanceador de carga.
- En la pantalla Detalles del balanceador de carga, anota la IP:Puerto de tu balanceador de carga.
gcloud
- Crea una comprobación del estado.
gcloud compute health-checks create http http-basic-check \ --port 80
- Crea un servicio de backend.
gcloud compute backend-services create web-backend-service \ --load-balancing-scheme=EXTERNAL \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
- Añade tu grupo de instancias como backend al servicio de backend.
gcloud beta compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=ZONE_A \ --global
- En el caso de HTTP, crea un mapa de URLs para enrutar las solicitudes entrantes al servicio backend predeterminado.
gcloud beta compute url-maps create web-map-http \ --default-service web-backend-service
- En el caso de HTTPS, crea un mapa de URLs para enrutar las solicitudes entrantes al servicio de backend predeterminado.
gcloud beta compute url-maps create web-map-https \ --default-service web-backend-service
Configurar un frontend HTTPS
Omite esta sección si usas balanceadores de carga HTTP.
- En el caso de HTTPS, si aún no lo has hecho, crea el recurso de certificado SSL global, tal como se muestra en las siguientes secciones:
- Crear un recurso de certificado SSL gestionado por Google
- Crear un recurso de certificado SSL autogestionado
En el caso de HTTPS, crea un proxy HTTPS de destino para dirigir las solicitudes a tu mapa de URLs. El proxy es la parte del balanceador de carga que contiene el certificado SSL de un balanceador de carga HTTPS, por lo que también debes cargar el certificado en este paso.
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map-https \ --ssl-certificates=www-ssl-cert
- En el caso de HTTPS, cree una regla de reenvío global para enrutar las solicitudes entrantes al proxy.
gcloud compute forwarding-rules create https-content-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
- Opcional: En el caso de HTTPS, crea una política de SSL global y adjúntala al proxy HTTPS.
Para crear una política de SSL global, sigue estos pasos: Para adjuntar la política de SSL al proxy HTTPS de destino global, sigue estos pasos:gcloud compute ssl-policies create my-ssl-policy \ --profile MODERN \ --min-tls-version 1.0
gcloud compute target-https-proxies update https-lb-proxy \ --ssl-policy my-ssl-policy
Configurar un frontend HTTP
Omite esta sección si usas balanceadores de carga HTTPS.
- En el caso de HTTP, crea un proxy HTTP de destino para enrutar las solicitudes a tu mapa de URLs.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http
- En el caso de HTTP, crea una regla de reenvío global para enrutar las solicitudes entrantes al proxy.
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
-
Para crear la comprobación del estado, usa el recurso
google_compute_health_check
. -
Para crear el servicio de backend, usa el recurso
google_compute_backend_service
.En este ejemplo se usa
load_balancing_scheme="EXTERNAL_MANAGED"
, que configura un balanceador de carga de aplicación externo global con gestión de tráfico avanzada. Para crear un balanceador de carga de aplicación clásico, asegúrate de cambiarload_balancing_scheme
aEXTERNAL
antes de ejecutar la secuencia de comandos. -
Para crear el mapa de URLs, usa el recurso
google_compute_url_map
. -
Para crear el proxy HTTP de destino, usa el recurso
google_compute_target_http_proxy
. -
Para crear la regla de reenvío, usa el recurso
google_compute_global_forwarding_rule
.En este ejemplo se usa
load_balancing_scheme="EXTERNAL_MANAGED"
, que configura un balanceador de carga de aplicación externo global con gestión de tráfico avanzada. Para crear un balanceador de carga de aplicación clásico, asegúrate de cambiarload_balancing_scheme
aEXTERNAL
antes de ejecutar la secuencia de comandos.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Conectar tu dominio a tu balanceador de carga
Una vez creado el balanceador de carga, anota la dirección IP asociada a él. Por ejemplo, 30.90.80.100
. Para dirigir tu dominio a tu balanceador de carga, crea un registro A
con tu servicio de registro de dominios. Si has añadido varios dominios a tu certificado SSL, debes añadir un registro A
para cada uno de ellos, todos apuntando a la dirección IP del balanceador de carga. Por ejemplo, para crear registros A
de www.example.com
y example.com
, usa lo siguiente:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Si usas Cloud DNS como proveedor de DNS, consulta el artículo sobre cómo añadir, modificar y eliminar registros.
Tráfico de prueba enviado a tus instancias
Ahora que el servicio de balanceo de carga está en funcionamiento, puedes enviar tráfico a la regla de reenvío y ver cómo se dispersa entre las diferentes instancias.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haz clic en el balanceador de carga que acabas de crear.
En la sección Backend, comprueba que las VMs estén en buen estado. La columna Estado debe estar rellenada, lo que indica que ambas máquinas virtuales están en buen estado (
2/2
). Si no es así, prueba a volver a cargar la página. La consola de Google Cloud puede tardar unos instantes en indicar que las VMs están en buen estado. Si los back-ends no parecen estar en buen estado después de unos minutos, revisa la configuración del cortafuegos y la etiqueta de red asignada a tus VMs de backend.- En el caso de HTTPS, si usas un certificado gestionado por Google, comprueba que el estado del recurso de certificado sea ACTIVE. Para obtener más información, consulta Estado del recurso de certificado SSL gestionado por Google.
- Una vez que la consola muestre que las instancias de backend están en buen estado, puedes probar el balanceador de carga con un navegador web. Para ello, ve a
https://IP_ADDRESS
(ohttp://IP_ADDRESS
). SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Google Cloud - Si has usado un certificado autofirmado para probar HTTPS, tu navegador mostrará una advertencia. Debes indicar explícitamente a tu navegador que acepte un certificado autofirmado.
- Tu navegador debería renderizar una página con contenido que muestre el nombre de la instancia que ha servido la página, junto con su zona (por ejemplo,
Page served from: lb-backend-example-xxxx
). Si tu navegador no renderiza esta página, revisa los ajustes de configuración de esta guía.
gcloud
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Transcurridos unos minutos, puedes probar la configuración ejecutando el siguiente comando curl
.
curl http://IP_ADDRESS
-O-
curl https://HOSTNAME
Siguientes pasos
- Para configurar el redireccionamiento de HTTP a HTTPS en tu balanceador de carga de aplicación clásico, consulta el artículo Configurar el redireccionamiento de HTTP a HTTPS en balanceadores de carga de aplicación clásicos.
- Para ver un ejemplo complejo con IPv6 y balanceo de carga multirregional, consulta Configurar un balanceador de carga HTTPS.
- Limpiar la configuración del balanceador de carga.
- Para habilitar IAP, consulta Habilitar IAP en el balanceador de carga de aplicación externo.
- Para usar un módulo de Terraform, consulta los ejemplos de módulos de Terraform para balanceadores de carga de aplicación externos.