Cloud CDN aprovecha el balanceador de carga de aplicación externo global o el balanceador de carga de aplicación clásico que elijas para proporcionar enrutamiento, comprobaciones del estado y compatibilidad con direcciones IP anycast. Como los balanceadores de carga de aplicaciones externos globales pueden tener varios tipos de instancias de backend (instancias de VM de Compute Engine, pods de Google Kubernetes Engine, cubos de Cloud Storage o backends externos fuera de Google Cloud), puedes elegir en qué backends (orígenes) habilitar Cloud CDN.
En esta guía de configuración se explica cómo crear un balanceador de carga de aplicación externo con Cloud CDN habilitado. En el ejemplo se usan los siguientes recursos:
- La red de nube privada virtual (VPC) predeterminada
- Un mapa de URLs predeterminado
- Una dirección IP externa reservada
- Un segmento de Cloud Storage como backend
- Un único segmento de backend de balanceador de carga que actúa como contenedor del segmento de Cloud Storage
Un backend bucket admite lo siguiente:
- Segmentos de Cloud Storage de cualquier clase de almacenamiento, incluidos los segmentos multirregionales
- Políticas de Cloud CDN para almacenar contenido en caché en el perímetro global de Google
Para saber cómo funciona Cloud CDN, consulta la información general sobre Cloud CDN.
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.
Backends del balanceador de carga
Un balanceador de carga de aplicaciones externo usa un mapa de URLs para dirigir el tráfico de URLs especificadas a servicios especificados. En la siguiente tabla se resumen los tipos de back-ends en los que puedes alojar contenido y servicios.
Configuración de backend del balanceador de carga | Tipo de medio habitual | Tipos de backend |
---|---|---|
Servicio de backend | Dinámicos (como los datos) |
|
Segmento de backend | Estático (como imágenes) |
|
Antes de empezar
- Si usas HTTPS en el frontend, crea un certificado SSL, ya sea autogestionado o gestionado por Google. Te recomendamos que uses un certificado gestionado por Google.
- Si usas la CLI de Google Cloud, consulta el artículo Descubrir el almacenamiento de objetos con la herramienta gcloud para instalarla.
Consola
- En la Google Cloud consola, ve a la página Inicio.
- A la derecha de Google Cloud, selecciona un proyecto en el menú desplegable.
gcloud
gcloud config set project PROJECT_ID
Sustituye PROJECT_ID
por el ID de tu proyecto. Google Cloud
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Crea un segmento de Cloud Storage
Si tienes un segmento de Cloud Storage que aún no se ha asignado a un balanceador de carga, puedes ir al siguiente paso.
Cuando creas un segmento de Cloud Storage para usarlo como backend de un balanceador de carga de aplicaciones externo con Cloud CDN, te recomendamos que elijas un segmento 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.
Consola
- En la Google Cloud consola, abre la página Segmentos de Cloud Storage.
- Haz clic en Crear segmento.
Especifique los valores de los campos de la siguiente tabla y deje el resto con los valores predeterminados.
Propiedad Valor (escribe el valor o selecciona una opción según se especifique) Nombre Asigna un nombre único a cada segmento. Si el nombre que introduces no es único, verás un mensaje para que pruebes con otro. Tipo de ubicación Multirregional Ubicación Seleccione una región, como us (varias regiones de Estados Unidos). Clase de almacenamiento predeterminada Estándar Control de acceso Uniform Haz clic en Crear.
Anota el nombre del segmento de Cloud Storage que acabas de crear para el siguiente paso.
gcloud
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Terraform
Para crear un segmento, usa el google_storage_bucket
recurso.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Copiar un archivo gráfico en tu segmento de Cloud Storage
Para que puedas probar la configuración, copia un archivo gráfico de un segmento de Cloud Storage público a tu propio segmento de Cloud Storage.
gcloud
Ejecuta el siguiente comando en Cloud Shell. Sustituye BUCKET_NAME
por el nombre único de tu segmento de Cloud Storage:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
Para copiar el objeto, usa local-exec
Provisioner
con el comando gcloud storage cp
.
resource "null_resource" "upload_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive" } }
También puede usar el recurso google_storage_bucket_object
para subir un objeto.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
En la consola Google Cloud , haz clic en Actualizar para comprobar que el archivo gráfico se haya copiado.
Hacer público un segmento de Cloud Storage
En este ejemplo, se hace que tu segmento de Cloud Storage sea de lectura pública. Este es el enfoque recomendado para el contenido público. Con este ajuste, cualquier usuario de Internet puede ver y enumerar tus objetos y sus metadatos, excepto las ACLs. Para reducir el riesgo de que los datos se expongan de forma accidental, normalmente debes dedicar segmentos de Cloud Storage específicos a los objetos públicos.
Estas son algunas alternativas a la hora de hacer público un segmento de Cloud Storage:
Usa carpetas gestionadas para hacer que una parte de tu segmento se pueda leer públicamente.
Hacer que los objetos se puedan leer públicamente. No recomendamos este enfoque, ya que utiliza un sistema de permisos antiguo específico de Cloud Storage.
Usa URLs firmadas.
El siguiente procedimiento concede a todos los usuarios acceso para ver objetos en tu segmento de Cloud Storage, lo que hace que el segmento sea de lectura pública.
Consola
- En la Google Cloud consola, abre la página Segmentos de Cloud Storage.
- Ve al segmento y haz clic en la pestaña Permisos.
- Haz clic en Añadir principales.
- En Principales nuevos, introduce
allUsers
. - En el campo "Rol", selecciona Cloud Storage > Visor de objetos de Storage.
- Haz clic en Guardar.
gcloud
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
Para hacer público tu segmento de Cloud Storage, usa el recurso google_storage_bucket_iam_member
.
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 tu segmento de Cloud Storage está en funcionamiento, configura una dirección IP externa estática global que tus clientes usan para llegar 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.
- Para reservar una dirección IPv4, haz clic en Reservar dirección estática.
- Asigne un Nombre de
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, usa el recurso google_compute_global_address
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Crear el balanceador de carga de aplicación externo
En este procedimiento, creará el segmento de backend del balanceador de carga, que actuará como contenedor de su segmento de Cloud Storage. Cuando crees o edites un backend bucket, puedes habilitar Cloud CDN.
Consola
Iniciar el proceso de configuración del balanceador de carga de aplicación externo
- En la Google Cloud consola, ve a la página Balanceo de carga.
- En Balanceo de carga de HTTP y HTTPS, haz clic en Iniciar configuración.
- Seleccione De Internet a mis VMs y, a continuación, haga clic en Continuar.
- En Gestión avanzada del tráfico, seleccione una de las siguientes opciones:
- En el caso de los balanceadores de carga de aplicación clásicos, selecciona Balanceador de carga HTTP(S) clásico.
- En el caso de los balanceadores de carga de aplicación externos globales, selecciona Balanceador de carga HTTP(S) con gestión de tráfico avanzada.
- Asigna el valor
http-lb
a Nombre y, a continuación, ve al paso siguiente.
Configurar el backend y habilitar Cloud CDN
Crea el segmento de backend del balanceador de carga, que actúa como contenedor del segmento de Cloud Storage. Cuando creas o editas un backend de tipo cubo, puedes habilitar Cloud CDN.
- Haz clic en Configuración de backend.
- En Servicios y segmentos de backend, haz clic en Crear o seleccionar servicios y segmentos de backend y, a continuación, en Segmentos de backend > Crear un segmento de backend.
- Asigna el valor
cat-backend-bucket
a Nombre. Este nombre no tiene por qué ser único de forma global y puede ser diferente del nombre del segmento de Cloud Storage. - En Segmento de Cloud Storage, haz clic en Examinar.
- Selecciona el nombre único global de Cloud Storage
BUCKET_NAME
que has creado y, a continuación, haz clic en Seleccionar. Haz clic en Habilitar Cloud CDN.
(Opcional) Modifica el modo de caché y los ajustes de TTL.
Haz clic en Crear.
Configurar reglas de host y comparadores de rutas
Las reglas de host y los matchers de ruta son componentes de configuración del mapa de URLs de un balanceador de carga de aplicaciones externo.
En Reglas de host y ruta, puede mantener la configuración predeterminada.
Para ver un ejemplo de configuración personalizada, consulta Añadir segmentos de backend a balanceadores de carga.
Para obtener más información sobre las reglas de host y los matchers de ruta, consulta la descripción general de los mapas de URLs.
Configurar el frontend
- Haz clic en Configuración de frontend.
Verifique que las 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 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 HTTPS Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP example-ip
Puerto 443 Certificado Selecciona un certificado o Crea un certificado. Haz clic en Listo.
Revisar la configuración
- Haz clic en Revisar y finalizar.
- Consulta las secciones Backend buckets, Reglas de host y ruta y Frontend.
- Haz clic en Crear.
- 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. Se denomina
IP_ADDRESS
.
gcloud
Configurar el backend
gcloud compute backend-buckets create cat-backend-bucket \ --gcs-bucket-name=BUCKET_NAME \ --enable-cdn \ --cache-mode=CACHE_MODE
Define el modo de caché. Para ello, sustituye CACHE_MODE por uno de los siguientes valores:
CACHE_ALL_STATIC
oUSE_ORIGIN_HEADERS
: usa los encabezados definidos según los metadatos de control de caché de Cloud Storage. Cloud Storage siempre proporciona un encabezadoCache-Control
a Cloud CDN. Si no se elige ningún valor explícitamente, se envía un valor predeterminado.FORCE_CACHE_ALL
: almacena en caché todo el contenido, ignorando las directivasprivate
,no-store
ono-cache
en los encabezados de respuestaCache-Control
enviados por Cloud Storage.
Configurar el mapa de URL
gcloud compute url-maps create http-lb \ --default-backend-bucket=cat-backend-bucket
Configurar el proxy de destino
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
Configurar la regla de reenvío
-
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-lb-forwarding-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
Configurar el backend
Para configurar el backend, usa el recurso google_compute_backend_bucket
.
Configurar el mapa de URL
Para configurar el backend, usa el recurso google_compute_url_map
.
Configurar el proxy de destino
Para configurar el proxy de destino, usa el recurso google_compute_target_http_proxy
o el recurso google_compute_target_https_proxy
.
Configurar la regla de reenvío
Para configurar la regla de reenvío, usa el recurso google_compute_global_forwarding_rule
.
- En el caso de los balanceadores de carga de aplicación externos globales, úsalo 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"
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Enviar tráfico a tu bucket de backend
Después de crear la regla de reenvío global, la configuración puede tardar varios minutos en propagarse por todo el mundo. Después de que hayan transcurrido varios minutos, puedes empezar a enviar tráfico a la dirección IP del balanceador de carga.
Consola
- En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en
http-lb
para desplegar el balanceador de carga que acabas de crear.En la sección Backend, comprueba que el contenedor de backend esté en buen estado. Debería haber una marca de verificación verde junto a tu backend bucket. Si no es así, prueba a volver a cargar la página. La consola Google Cloud puede tardar unos instantes en indicar que los back-ends están en buen estado.
Una vez que la consola Google Cloud indique que el contenedor backend está en buen estado, puedes probar el balanceador de carga con un navegador web. Para ello, ve a
http://IP_ADDRESS/never-fetch/three-cats.jpg
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. El navegador debería renderizar una página con contenido que muestre el archivo gráfico.
gcloud
Usa el comando curl
para probar la respuesta de la URL. Sustituye IP_ADDRESS
por la dirección IPv4 del balanceador de carga.
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Envía una solicitud curl:
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
Verificar que Cloud CDN funciona
Si recargas la http://IP_ADDRESS/never-fetch/three-cats.jpg
página
varias veces seguidas, debería haber varios aciertos de caché.
La siguiente entrada de registro muestra un acierto de caché. Para ver los aciertos de caché en la consolaGoogle Cloud , abre el Explorador de registros y filtra por el nombre de la regla de reenvío.
Abrir el Explorador de registros
Explorador de registros
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg" requestSize: "577" status: 254 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:25.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:25.588272510Z" spanId: "7b6537d3672e08e1" }
Consola
- En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en
http-lb
para desplegar el balanceador de carga que acabas de crear.En la sección Backend, comprueba que el contenedor de backend esté en buen estado. Debería haber una marca de verificación verde junto a tu backend bucket. Si no es así, prueba a volver a cargar la página. La consola Google Cloud puede tardar unos instantes en indicar que los back-ends están en buen estado.
Una vez que la consola Google Cloud indique que el contenedor backend está en buen estado, puedes probar el balanceador de carga con un navegador web. Para ello, ve a
http://IP_ADDRESS/never-fetch/three-cats.jpg
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. El navegador debería renderizar una página con contenido que muestre el archivo gráfico.
gcloud
Usa el comando curl
para probar la respuesta de la URL. Sustituye IP_ADDRESS
por la dirección IPv4 del balanceador de carga.
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Envía una solicitud curl:
curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg
El contenido se obtiene de Cloud Storage, Cloud CDN lo almacena en caché y, a continuación, se valida y se vuelve a obtener cuando caduca o se elimina de la caché por otros motivos.
El contenido de la caché tiene un encabezado Age
mayor que cero.
El contenido que deba actualizarse antes del TTL se puede invalidar y volver a obtener de Cloud Storage.
Inhabilitar Cloud CDN
Consola
Inhabilitar Cloud CDN en un solo segmento de backend
- En la Google Cloud consola, ve a la página Cloud CDN.
- En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Editar.
- Desmarque las casillas de los backend buckets que quiera dejar de usar en Cloud CDN.
- Haz clic en Actualizar.
Quitar Cloud CDN de todos los segmentos de backend de un origen
- En la Google Cloud consola, ve a la página Cloud CDN.
- En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Quitar.
- Para confirmar la acción, haz clic en Eliminar.
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \ --no-enable-cdn
Si inhabilita Cloud CDN, no se invalidarán ni se purgarán las cachés. Si desactivas Cloud CDN y lo vuelves a activar, es posible que la mayoría o todo tu contenido almacenado en caché siga en caché. Para evitar que las cachés usen el contenido, debes invalidarlo.
Siguientes pasos
- Para saber qué contenido se almacena en caché, consulta el resumen del almacenamiento en caché.
- Para usar Cloud CDN en GKE, consulta las funciones de Ingress.
- Para comprobar si Cloud CDN está sirviendo respuestas desde la caché, consulta Ver registros.
- Para obtener información sobre problemas habituales y sus soluciones, consulta la sección Solución de problemas.
- Para configurar políticas de filtrado y control de acceso para tu contenido, consulta Políticas de seguridad perimetrales.