En este documento, se muestra cómo crear un balanceador de cargas de aplicaciones externo para enrutar las solicitudes de contenido estático a buckets de Cloud Storage. Después de configurar un balanceador de cargas con los buckets de backend, las solicitudes a rutas de URL que comienzan con /love-to-fetch
se envían al bucket de Cloud Storage us-east1
, y todas las demás solicitudes se envían al bucket de Cloud Storage europe-north1
, sin importar la región del usuario.
Si tus backends entregan contenido dinámico a través de HTTP(S), considera usar servicios de backend en lugar de buckets de backend.
Si eres un usuario existente del balanceador de cargas de aplicaciones clásico, asegúrate de revisar la descripción general de la migración cuando planifiques una implementación nueva con el balanceador de cargas de aplicaciones externo global.Usa buckets de Cloud Storage como backends del balanceador de cargas
Un balanceador de cargas de aplicaciones externo usa un mapa de URL para dirigir el tráfico de las rutas de URL especificadas a tus backends.
En el siguiente diagrama, el balanceador de cargas envía tráfico mediante una ruta de acceso de /love-to-fetch/
a un bucket de Cloud Storage en la región us-east1
. Todas las demás solicitudes van a un bucket de Cloud Storage en la región europe-north1
.
De forma predeterminada, Cloud Storage usa la misma caché que usa Cloud CDN. Si habilitas Cloud CDN en el bucket de backend, puedes usar los controles de Cloud CDN en tu contenido.
Los controles de Cloud CDN incluyen, por ejemplo, los modos de almacenamiento en caché, las URL firmadas y la invalidación. Cloud CDN también te permite almacenar en caché contenido grande (más de 10 MB). Si no habilitas Cloud CDN en tu bucket de backend, solo puedes usar encabezados Cache-Control
de origen para controlar el almacenamiento en caché del contenido más pequeño, como lo configuran los metadatos de Cloud Storage.
Antes de comenzar
Asegúrate de que tu configuración cumpla con los requisitos. Si usas
la utilidad gcloud storage
, puedes instalarla con las instrucciones de
Descubre el almacenamiento de objetos con la herramienta de gcloud.
Configura un proyecto predeterminado
Console
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
Reemplaza PROJECT_ID
por el proyecto que usas para esta guía.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Permisos
Para seguir esta guía, debes crear un balanceador de cargas y buckets de Cloud Storage en un proyecto. Debes ser propietario o editor de un proyecto o tener las siguientes funciones de IAM de Compute Engine:
Tarea | Función requerida |
---|---|
Crea componentes del balanceador de cargas | Administrador de redes |
Crea buckets de Cloud Storage | Administrador de objetos de almacenamiento |
Si deseas obtener más información, consulta las siguientes guías:
Configura un SSL certificate resource
Para un balanceador de cargas HTTPS, crea un SSL certificate resource como se describe en el documento a continuación:
Recomendamos que uses un certificado administrado por Google.
En este ejemplo, se supone que ya tienes un SSL certificate resource llamado www-ssl-cert
.
Prepara el contenido y los buckets de Cloud Storage
El proceso para preparar los buckets de Cloud Storage es el siguiente:
Se crean los buckets.
Se copia el contenido en los buckets.
Se proporciona acceso público a los buckets.
Crea buckets de Cloud Storage
En este ejemplo, se crean dos buckets de Cloud Storage para que el balanceador de cargas acceda. Para implementaciones de producción, te recomendamos que elijas un bucket multirregión, que replica de manera automática los objetos en varias regiones de Google Cloud. Esto puede mejorar la disponibilidad de tu contenido y la tolerancia a errores en tu aplicación.
Toma nota de los nombres de los buckets de Cloud Storage que creas, ya que se usan más adelante. En esta guía, se denominan BUCKET_1_NAME y BUCKET_2_NAME.
Console
En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
Haga clic en Crear bucket.
En el cuadro Asigna un nombre a tu bucket, ingresa un nombre global único que siga los lineamientos de nomenclatura.
Haz clic en Elige dónde almacenar tus datos.
Configura Tipo de ubicación como Región.
Configura la Ubicación como europe-north1. Esto es BUCKET_1_NAME en esta guía.
Haz clic en Crear.
Haz clic en Buckets para volver a la página Buckets de Cloud Storage. Usa estas instrucciones para crear un segundo bucket, pero establece la Ubicación en us-east1. Esto es BUCKET_2_NAME en esta guía.
gcloud
gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Reemplaza BUCKET_1_NAME
y BUCKET_2_NAME
por los nombres de los buckets que deseas crear.
Terraform
Para crear los depósitos, usa el recurso google_storage_bucket
.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Transfiere contenido a tus buckets de Cloud Storage
Para poder probar la configuración más adelante, copia las siguientes imágenes de un bucket público de Cloud Storage en tus propios buckets de Cloud Storage.
gcloud
Haz clic en
Activate Cloud Shell (Activar Cloud Shell).Ejecuta el siguiente comando en Cloud Shell y reemplaza las variables de nombre del bucket por los nombres de tus buckets de Cloud Storage:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
Terraform
Para copiar elementos en el bucket, puedes usar el recurso google_storage_bucket_object
.
Como alternativa, usa el recurso null_resource
.
resource "null_resource" "upload_cat_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/" } } resource "null_resource" "upload_dog_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/" } }
En la consola de Google Cloud, haz clic en Actualizar en la página de detalles de cada bucket para verificar que el archivo se haya copiado correctamente.
Haz que los buckets de Cloud Storage sean legibles de forma pública
Cuando haces que los buckets de Cloud Storage sean legibles de forma pública, cualquier persona en Internet puede enumerar y ver sus objetos y ver sus metadatos (sin incluir las LCA). No incluyas información sensible en los buckets públicos.
Para reducir la probabilidad de exposición accidental de información sensible, no almacenes objetos públicos y datos sensibles en el mismo bucket.
Console
A fin de otorgar a todos los usuarios acceso para ver objetos en tus buckets, repite el siguiente procedimiento para cada bucket:
En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
Haz clic en el nombre del bucket seguido de la pestaña Permisos.
Haz clic en Agregar.
En el cuadro Nuevos principales, ingresa
allUsers
.En el cuadro Selecciona una función, selecciona Cloud Storage > Visualizador de objetos de Storage.
Haz clic en Guardar.
Haz clic en Permitir acceso público.
gcloud
Ejecuta los siguientes comandos a fin de otorgar a todos los usuarios acceso para ver objetos en tus buckets:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
Si quieres otorgar acceso a todos los usuarios para ver objetos en tus buckets, usa el recurso google_storage_bucket_iam_member
y especifica el miembro allUsers
.
Reservar una dirección IP externa
Después de configurar los buckets de Cloud Storage, puedes reservar una dirección IP externa estática global que tu público use para llegar al balanceador de cargas.
Este paso es opcional, pero se recomienda hacerlo, ya que una dirección IP externa estática proporciona una sola dirección a la que puedes apuntar tu dominio.
Console
En la consola de Google Cloud, ve a la página Direcciones IP externas.
Haz clic en Reservar dirección estática.
En el cuadro Nombre, ingresa
example-ip
.Establece el Nivel de servicio de red en Premium.
Configura la Versión de IP como IPv4.
Configura el Tipo como Global.
Haz clic en Reservar.
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Tome nota de la dirección IPv4 que estaba reservada:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
Para reservar una dirección IP externa, usa el recurso google_compute_global_address
.
Crea un balanceador de cargas de aplicaciones externo con buckets de backend
En estas instrucciones, se explica cómo crear un balanceador de cargas de HTTP o HTTPS. Si quieres crear un balanceador de cargas de HTTPS, debes agregar un SSL certificate resource al frontend del balanceador de cargas. Para obtener más información, consulta Descripción general de certificados SSL.
Console
Inicia la configuración
En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en Crear balanceador de cargas.
- En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
- En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
- En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo globales y haz clic en Siguiente.
- En Generación de balanceadores de cargas, selecciona Balanceador de cargas de aplicaciones externo global y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
- En el cuadro Nombre, ingresa
http-lb
.
Configure el backend
Haz clic en Configuración de backend.
Haz clic en las casillas Servicios de backend y Buckets de backend y, luego, en Crear un bucket de backend.
En el cuadro Nombre del bucket de backend, ingresa
cats
.En el cuadro Bucket de Cloud Storage, haz clic en Explorar.
Selecciona BUCKET_1_NAME y, luego, haz clic en Seleccionar. La creación del bucket de backend
cats
primero lo convierte en el predeterminado, al cual se dirigen todas las solicitudes de tráfico no coincidentes. No puedes cambiar las reglas de redireccionamiento de un bucket de backend predeterminado en el balanceador de cargas.Haz clic en Crear.
Usa el mismo proceso para crear un bucket de backend llamado
dogs
y selecciona BUCKET_2_NAME.Haz clic en Aceptar.
Configura reglas de enrutamiento
Las reglas de enrutamiento determinan cómo se dirige el tráfico. Para configurar el enrutamiento, deberás configurar las reglas del host y comparadores de rutas de acceso, que son componentes de configuración de un mapa de URL del balanceador de cargas de aplicaciones externo. Para configurar las reglas de este ejemplo, haz lo siguiente:
- Haga clic en Reglas de enrutamiento.
- En
dogs
, ingresa*
en el campo Hosts y/love-to-fetch/*
en el campo Rutas.
Configura el frontend
Haz clic en Configuración de frontend.
Verifica que las siguientes opciones estén configuradas con estos valores:
Propiedad Valor (escribe un valor o selecciona una opción como se especifica) Protocolo HTTP Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP example-ip Puerto 80 Opcional: Tiempo de espera de keepalive de HTTP (opcional) Ingresa un valor de tiempo de espera de 5 a 1,200 segundos. El valor predeterminado es 610 segundos. Si deseas crear un balanceador de cargas de HTTPS en lugar de un balanceador de cargas de HTTP, debes tener un certificado SSL (
gcloud compute ssl-certificates list
) y debes completar los campos de la siguiente manera:Propiedad Valor (escribe un valor o selecciona una opción como se especifica) Protocolo HTTP(S) Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP example-ip Puerto 443 Opcional: Tiempo de espera de keepalive de HTTP (opcional) Ingresa un valor de tiempo de espera de 5 a 1,200 segundos. El valor predeterminado es 610 segundos. Certificado Selecciona el certificado www-ssl-cert
que creaste en la sección Configura un recurso de certificado SSL o crea un certificado nuevo.(Opcional) Habilitar el redireccionamiento de HTTP a HTTPS Usa esta casilla de verificación para habilitar los redireccionamientos. Si habilitas esta casilla de verificación, se creará un balanceador de cargas HTTP parcial adicional que usa la misma dirección IP que tu balanceador de cargas HTTPS y redirecciona las solicitudes HTTP al frontend de HTTPS del balanceador de cargas.
Esta casilla de verificación solo se puede seleccionar cuando se selecciona el protocolo HTTPS y se usa una dirección IP reservada.
Haz clic en Listo.
Revisa la configuración
Haz clic en Revisar y finalizar.
Revisa el Frontend, las Reglas de host y ruta de acceso y los Buckets de backend.
Haz clic en Crear y espere a que se cree el balanceador de cargas.
Haz clic en el nombre del balanceador de cargas (http-lb).
Anota la dirección IP del balanceador de cargas para la siguiente tarea. En esta guía, se hace referencia a ella como IP_ADDRESS.
gcloud
Configura el backend
gcloud compute backend-buckets create cats \ --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \ --gcs-bucket-name=BUCKET_2_NAME
Configura el mapa de URL
gcloud compute url-maps create http-lb \ --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \ --path-matcher-name=path-matcher-2 \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=dogs" \ --default-backend-bucket=cats
Configura el proxy de destino
gcloud compute target-http-proxies create http-lb-proxy \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=http-lb
Reemplaza HTTP_KEEP_ALIVE_TIMEOUT_SEC
por el valor de tiempo de espera de keepalive de HTTP del cliente de 5 a 1,200 segundos. El valor predeterminado es 610 segundos. Este campo es opcional.
Configura la regla de reenvío
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
Para crear el balanceador de cargas, usa los siguientes recursos de Terraform.
Configure el backend
Para crear el servicio de backend, usa el recurso google_compute_backend_bucket
.
Configura el mapa de URL
Para crear el mapa de URL, usa el recurso google_compute_url_map
.
Configura el proxy de destino
Para crear el proxy HTTP de destino, usa el google_compute_target_http_proxy
recurso.
Configura la regla de reenvío
Para crear la regla de reenvío, usa el recurso google_compute_global_forwarding_rule
.
NOTA: Para cambiar el modo al balanceador de cargas de aplicaciones clásico, configura el atributo load_balancing_scheme
en "EXTERNAL"
en lugar de "EXTERNAL_MANAGED"
.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Envía tráfico a tu balanceador de cargas
Varios minutos después de configurar el balanceador de cargas, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas.
Console
La consola de Google Cloud no es compatible.
gcloud
Usa el comando curl
para probar la respuesta de estas URL. Reemplaza IP_ADDRESS
por la dirección IPv4 del balanceador de cargas:
curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
Configuración adicional
En esta sección se expande el ejemplo de configuración para proporcionar opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en cualquier orden.
Actualiza el tiempo de espera de keepalive del HTTP del cliente
El balanceador de cargas creado en los pasos anteriores se configuró con un valor predeterminado para el tiempo de espera de keepalive de HTTP del cliente.Para actualizar el tiempo de espera de keepalive del cliente HTTP, sigue las siguientes instrucciones.
Console
En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en el nombre del balanceador de cargas que deseas modificar.
- Haz clic en Editar.
- Haz clic en Configuración de frontend.
- Expande Funciones avanzadas. Para el tiempo de espera de keepalive de HTTP, ingresa un valor de tiempo de espera.
- Haz clic en Actualizar.
- Para revisar los cambios, haz clic en Revisar y finalizar y, luego, haz clic en Actualizar.
gcloud
Para un balanceador de cargas de HTTP, actualiza el proxy HTTP de destino con el comandogcloud compute target-http-proxies update
:
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Para un balanceador de cargas de HTTPS, actualiza el proxy HTTPS de destino con el comandogcloud compute target-https-proxies update
:
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Reemplaza lo siguiente:
TARGET_HTTP_PROXY_NAME
: el nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: el nombre del proxy HTTPS de destino.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: El valor de tiempo de espera de keepalive de HTTP de 5 a 600 segundos.
Limitaciones
- Los buckets de backend solo son compatibles con los balanceadores de cargas de aplicaciones externo global y con el balanceador de cargas de aplicaciones clásico. No son compatibles con ningún balanceador de cargas de aplicaciones regional ni ningún otro tipo de balanceador de cargas.
- Los buckets de backend no son compatibles con Identity-Aware Proxy.
- El balanceador de cargas de aplicaciones externo global no admite cargas en buckets de Cloud Storage.