En este documento se explica cómo crear un balanceador de carga de aplicaciones externo para enrutar las solicitudes de contenido estático a cubos de Cloud Storage. Una vez que hayas configurado un balanceador de carga con los segmentos de backend, las solicitudes a las rutas de URL que empiecen por /love-to-fetch
se enviarán al segmento de Cloud Storage us-east1
, y todas las demás solicitudes se enviarán al segmento de Cloud Storage europe-north1
, independientemente de la región del usuario.
Si tus backends sirven contenido dinámico a través de HTTP(S), te recomendamos que uses servicios de backend en lugar de buckets de backend.
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.Segmentos de Cloud Storage como backends de balanceadores de carga
Un balanceador de carga de aplicaciones externo usa un mapa de URLs para dirigir el tráfico de las rutas de URLs especificadas a tus back-ends.
En el siguiente diagrama, el balanceador de carga envía tráfico con una ruta de /love-to-fetch/
a un segmento de Cloud Storage en la región us-east1
. Todas las demás solicitudes se envían a un segmento de Cloud Storage de la región europe-north1
.
De forma predeterminada, Cloud Storage usa la misma caché que Cloud CDN. Si habilitas Cloud CDN en el backend, puedes usar los controles de Cloud CDN en tu contenido.
Los controles de Cloud CDN incluyen, por ejemplo, modos de caché, URLs firmadas e invalidación. Cloud CDN también te permite almacenar en caché contenido de gran tamaño (más de 10 MB). Si no habilitas Cloud CDN en tu segmento de backend, solo podrás usar los encabezados Cache-Control
de origen para controlar el almacenamiento en caché de contenido más pequeño, tal como se define en los metadatos de Cloud Storage.
Antes de empezar
Asegúrate de que tu configuración cumpla los siguientes requisitos previos. Si usas la utilidad gcloud storage
, puedes instalarla siguiendo las instrucciones de Descubrir el almacenamiento de objetos con la herramienta gcloud.
Definir un proyecto predeterminado
Consola
- 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.
-
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.
gcloud
gcloud config set project PROJECT_ID
Sustituye PROJECT_ID
por el proyecto que vas a usar en esta guía.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Permisos
Para seguir esta guía, debes crear segmentos de Cloud Storage y un balanceador de carga en un proyecto. Debes tener el rol de propietario o editor del proyecto, o bien los siguientes roles de gestión de identidades y accesos de Compute Engine:
Tarea | Rol obligatorio |
---|---|
Crear componentes de balanceador de carga | Administrador de red |
Crear segmentos de Cloud Storage | Administrador de objetos de Storage |
Para obtener más información, consulta las siguientes guías:
Configurar un recurso de certificado SSL
En el caso de un balanceador de carga HTTPS, crea un recurso de certificado SSL tal como se describe en la siguiente documentació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
.
Preparar los segmentos y el contenido de Cloud Storage
El proceso para preparar tus segmentos de Cloud Storage es el siguiente:
Crea los segmentos.
Copia el contenido en los segmentos.
Proporciona acceso público a los segmentos.
Crear segmentos de Cloud Storage
En este ejemplo, se crean dos segmentos de Cloud Storage a los que puede acceder el balanceador de carga. En las implementaciones de producción, le recomendamos que elija un cubo multirregional, que replica automáticamente los objetos en varias regiones Google Cloud . De esta forma, se puede mejorar la disponibilidad del contenido y la tolerancia a fallos de la aplicación.
Anota los nombres de los segmentos de Cloud Storage que crees, ya que los usarás más adelante. En esta guía, se denominan BUCKET_1_NAME y BUCKET_2_NAME.
Consola
En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
Haz clic en Crear segmento.
En el cuadro Ponle nombre al segmento, escribe un nombre único a nivel global que cumpla las directrices de nomenclatura.
Haz clic en Elige dónde quieres almacenar los datos.
En Tipo de ubicación, selecciona Región.
Asigna a Location el valor europe-north1. Esto es BUCKET_1_NAME en esta guía.
Haz clic en Crear.
Haz clic en Segmentos para volver a la página Segmentos de Cloud Storage. Sigue estas instrucciones para crear un segundo segmento, pero define el valor de Ubicación como us-east1. Este es el BUCKET_2_NAME de 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
Sustituye BUCKET_1_NAME
y BUCKET_2_NAME
por los nombres de los contenedores que quieras crear.
Terraform
Para crear los segmentos, usa el recurso google_storage_bucket
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Transferir contenido a tus segmentos de Cloud Storage
Para que puedas probar la configuración más adelante, copia las siguientes imágenes de un segmento de Cloud Storage público a tus segmentos de Cloud Storage.
gcloud
Haz clic en
Activar Cloud Shell.Ejecuta los siguientes comandos en Cloud Shell y sustituye las variables de nombre de segmento por los nombres de tus segmentos 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 segmento, puedes usar el recurso google_storage_bucket_object
.
También puede usar 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 Google Cloud consola, haz clic en Actualizar en la página de detalles de cada contenedor para verificar que el archivo se haya copiado correctamente.
Hacer que los segmentos de Cloud Storage se puedan leer públicamente
Cuando haces que los segmentos de Cloud Storage se puedan leer públicamente, cualquier persona en Internet puede enumerar y ver sus objetos, así como sus metadatos (excepto las ACLs). No incluyas información sensible en tus segmentos públicos.
Para reducir la probabilidad de que se exponga accidentalmente información sensible, no almacene objetos públicos y datos sensibles en el mismo segmento.
Consola
Para conceder a todos los usuarios acceso para ver los objetos de tus cubos, repite el siguiente procedimiento para cada cubo:
En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
Haz clic en el nombre del segmento y, a continuación, en la pestaña Permisos.
Haz clic en Añadir.
En el cuadro Nuevos directores, introduce
allUsers
.En el cuadro Seleccionar un rol, selecciona Cloud Storage > Visor de objetos de Storage.
Haz clic en Guardar.
Haz clic en Permitir acceso público.
gcloud
Para conceder a todos los usuarios acceso para ver los objetos de tus contenedores, ejecuta los siguientes comandos:
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
Para conceder a todos los usuarios acceso para ver los objetos de tus segmentos, usa el recurso google_storage_bucket_iam_member
y especifica el miembro allUsers
.
Reservar una dirección IP externa
Una vez que hayas configurado tus segmentos de Cloud Storage, puedes reservar una dirección IP externa estática global que tu audiencia use para acceder a tu balanceador de carga.
Este paso es opcional, pero recomendable, ya que una dirección IP externa estática proporciona una única dirección a la que dirigir tu dominio.
Consola
En la Google Cloud consola, ve a la página Direcciones IP externas.
Haz clic en Reservar dirección estática.
En el cuadro Name (Nombre), introduce
example-ip
.Configure el Nivel de servicio de red como Premium.
Configura IPv4 (versión de IP) como IPv4.
En Tipo, seleccione Global.
Haz clic en Reservar.
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Anota la dirección IPv4 que se ha reservado:
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
.
Crear un balanceador de carga de aplicación externo con segmentos de backend
Estas instrucciones explican cómo crear un balanceador de carga HTTP o HTTPS. Para crear un balanceador de carga HTTPS, debes añadir un recurso de certificado SSL al frontend del balanceador de carga. Para obtener más información, consulta el artículo Información general sobre los certificados SSL.
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 externo global y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
- En el cuadro Name (Nombre), introduce
http-lb
.
Configurar el backend
Haz clic en Configuración de backend.
Haz clic en el cuadro Servicios y segmentos de backend y, a continuación, en Crear un segmento de backend.
En el cuadro Nombre del segmento de backend, introduce
cats
.En el cuadro Segmento de Cloud Storage, haga clic en Examinar.
Selecciona BUCKET_1_NAME y, a continuación, haz clic en Seleccionar. Si creas primero el segmento de backend
cats
, se convertirá en el predeterminado, al que se dirigirán todas las solicitudes de tráfico no coincidentes. No puedes cambiar las reglas de redirección de un backend predeterminado en el balanceador de carga.Haz clic en Crear.
Sigue el mismo proceso para crear un backend bucket llamado
dogs
y selecciona BUCKET_2_NAME.Haz clic en Aceptar.
Configurar reglas de enrutamiento
Las reglas de enrutamiento determinan cómo se dirige el tráfico. Para configurar el enrutamiento, debes configurar reglas de host y matchers de ruta, que son componentes de configuración del mapa de URLs de un balanceador de carga de aplicaciones externo. Para configurar las reglas de este ejemplo, sigue estos pasos:
- Haz clic en Reglas de enrutamiento.
- En
dogs
, introduce*
en el campo Hosts (Hosts) y/love-to-fetch/*
en el campo Paths (Rutas).
Configurar 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 según se especifique) 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 keep-alive HTTP Introduce un valor de tiempo de espera entre 5 y 1200 segundos. El valor predeterminado es de 610 segundos. Si quieres crear un balanceador de carga HTTPS en lugar de un balanceador de carga HTTP, debes tener un certificado SSL (
gcloud compute ssl-certificates list
) y rellenar los campos de la siguiente manera:Propiedad Valor (escribe un valor o selecciona una opción según se especifique) Protocolo HTTP o HTTPS Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP example-ip Puerto 443 Opcional: tiempo de espera de keep-alive HTTP Introduce un valor de tiempo de espera entre 5 y 1200 segundos. El valor predeterminado es de 610 segundos. Certificado Selecciona el certificado www-ssl-cert
que has creado en la sección Configurar un recurso de certificado SSL o crea uno nuevo.Opcional: Habilita la opción de redireccionamiento de HTTP a HTTPS Marca esta casilla 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 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.
Revisar la configuración
Haz clic en Revisar y finalizar.
Revisa Frontend, Reglas de host y ruta y Backend buckets.
Haz clic en Crear y espera a que se cree el balanceador de carga.
Haz clic en el nombre del balanceador de carga (http-lb).
Anota la dirección IP del balanceador de carga para la siguiente tarea. En esta guía, se denomina IP_ADDRESS.
gcloud
Configurar 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
Configurar 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
Configurar 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
Sustituye HTTP_KEEP_ALIVE_TIMEOUT_SEC
por el valor de tiempo de espera de keep-alive HTTP del cliente, que va de 5 a 1200 segundos. El valor predeterminado es 610 segundos. Este campo es opcional.
Configurar 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 carga, utiliza los siguientes recursos de Terraform.
Configurar el backend
Para crear el backend, usa el recurso google_compute_backend_bucket
.
Configurar el mapa de URL
Para crear el mapa de URLs, usa el recurso google_compute_url_map
.
Configurar el proxy de destino
Para crear el proxy HTTP de destino, usa el recurso google_compute_target_http_proxy
.
Configurar 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 carga de aplicación clásico, asigna el valor load_balancing_scheme
al atributo "EXTERNAL"
en lugar de "EXTERNAL_MANAGED"
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Enviar tráfico a tu balanceador de carga
Unos minutos después de configurar el balanceador de carga, puedes empezar a enviar tráfico a su dirección IP.
Consola
La consola Google Cloud no es compatible.
gcloud
Usa el comando curl
para probar la respuesta de las siguientes URLs. Sustituye IP_ADDRESS
por la dirección IPv4 del balanceador de carga:
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 amplía el ejemplo de configuración para ofrecer opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes llevarlas a cabo en el orden que quieras.
Actualizar el tiempo de espera de keep-alive HTTP del cliente
El balanceador de carga creado en los pasos anteriores se ha configurado con un valor predeterminado para el tiempo de espera de keep-alive HTTP del cliente.Para actualizar el tiempo de espera de keep-alive HTTP del cliente, sigue estas instrucciones.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en el nombre del balanceador de carga que quiera modificar.
- Haz clic en Editar.
- Haz clic en Configuración de frontend.
- Despliega Funciones avanzadas. En Tiempo de espera de HTTP Keep-Alive, introduce un valor de tiempo de espera.
- Haz clic en Actualizar.
- Para revisar los cambios, haz clic en Revisar y finalizar y, a continuación, en Actualizar.
gcloud
En el caso de un balanceador de carga HTTP, actualiza el proxy HTTP de destino con el comando gcloud 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
En el caso de un balanceador de carga HTTPS, actualiza el proxy HTTPS de destino con el comando gcloud 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
Haz los cambios siguientes:
TARGET_HTTP_PROXY_NAME
: nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: nombre del proxy HTTPS de destino.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: el valor del tiempo de espera de HTTP Keep-Alive de 5 a 600 segundos.
Parámetros de cadena de consulta de la API XML de Cloud Storage
Cuando se incluyen determinados parámetros de cadena de consulta en las solicitudes enviadas a un segmento de backend a través de un balanceador de carga de aplicaciones, el cliente recibe una respuesta HTTP 404 con el error "Unsupported query parameter" (Parámetro de consulta no admitido). Esto ocurre porque la API XML de Cloud Storage no admite estos parámetros cuando la solicitud procede de un balanceador de carga de aplicaciones.
En la siguiente tabla se resume cómo responde la API XML de Cloud Storage a varios parámetros de consulta cuando las solicitudes se enrutan a través de un balanceador de carga de aplicaciones. Los parámetros se agrupan por comportamiento observado para ayudar a identificar cuáles se admiten, se ignoran o se rechazan en este contexto.
Tipo de parámetro | Parámetros | Qué ha sucedido |
---|---|---|
Parámetros admitidos |
generation ,
prefix ,
marker ,
max-keys
|
Si añade estos parámetros (con los valores adecuados), funcionará como se describe en la documentación de la API XML de Cloud Storage. La API devuelve una respuesta HTTP estándar. |
Parámetros ignorados |
acl ,
billing ,
compose ,
delimiter ,
encryption ,
encryptionConfig ,
response-content-disposition ,
response-content-type ,
tagging ,
versions ,
websiteConfig
|
Añadir estos parámetros no tiene ningún efecto. Si el balanceador de carga transfiere estos parámetros a Cloud Storage, la API XML de Cloud Storage los ignora y responde como si no existieran. |
Parámetros rechazados |
cors ,
lifecycle ,
location ,
logging ,
storageClass ,
versioning
|
La API XML de Cloud Storage devuelve un error "Unsupported query parameter" (Parámetro de consulta no admitido). |
Limitaciones
- Los segmentos de backend solo se admiten con balanceadores de carga de aplicación externos globales y con balanceadores de carga de aplicación clásicos. No son compatibles con el balanceador de carga de aplicación externo regional ni con ningún otro tipo de balanceador de carga.
- Identity-Aware Proxy no admite los contenedores de backend.
- El balanceador de carga de aplicación externo global no admite subidas a cubos de Cloud Storage.
- El balanceador de carga de aplicación externo global no admite el uso de URLs firmadas a menos que Cloud CDN esté habilitado.