Configura Cloud CDN con un bucket de backend

Cloud CDN aprovecha los balanceadores de cargas de HTTP(S) externos globales de Google Cloud para proporcionar enrutamiento, verificaciones de estado y asistencia de IP Anycast. Debido a que los balanceadores de cargas de HTTP(S) externos globales pueden tener varios tipos de instancias de backend, instancias de VM de Compute Engine, Pods de Google Kubernetes Engine, orígenes externos fuera de Google Cloud o buckets de Cloud Storage, puedes elegir en qué backends (orígenes) habilitar Cloud CDN.

En esta guía de configuración, se muestra cómo crear un balanceador de cargas de HTTP(S) externo simple con Cloud CDN habilitado. En el ejemplo, se usan los siguientes recursos:

  • La red predeterminada de nube privada virtual (VPC)
  • Un mapa de URL predeterminado
  • Una dirección IP externa reservada
  • Un bucket de Cloud Storage como backend
  • Un bucket de backend del balanceador de cargas único que actúa como un wrapper alrededor del bucket de Cloud Storage

Un bucket de backend admite lo siguiente:

  • Buckets de Cloud Storage de cualquier clase de almacenamiento, incluidos los buckets multirregionales
  • Políticas de Cloud CDN para almacenar en caché el contenido en el extremo global de Google

Si deseas obtener información para saber cómo funciona Cloud CDN, consulta la Descripción general de Cloud CDN.

Backends del balanceador de cargas

Un balanceador de cargas de HTTP(S) externo usa un mapa de URL para dirigir el tráfico de las URL especificadas a los servicios especificados. En la siguiente tabla, se resumen los tipos de backends en los que puedes alojar contenido y servicios.

Configuración de backend del balanceador de cargas Tipo de contenido típico Tipos de backend
Servicio de backend Dinámico (como datos)
  • Grupos de instancias no administrados
  • Grupos de instancias administrados
  • Grupos de extremos de red internos en Google Cloud
  • Grupos de extremos de red externos a Google Cloud
Bucket de backend Estático (como imágenes)
  • Buckets de Cloud Storage (que se analizan en esta página)

Antes de comenzar

Crea un bucket de Cloud Storage

Si tienes un bucket de Cloud Storage existente que aún no se asignó a un balanceador de cargas, puedes pasar al siguiente paso.

Cuando creas un bucket de Cloud Storage para usarlo como backend de un balanceador de cargas de HTTP(S) externo con Cloud CDN, te recomendamos que elijas un bucket multirregional, que replica de forma 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.

Console

  1. En Google Cloud Console, abre el navegador de Cloud Storage.

    Abrir el navegador de Storage

  2. Haz clic en Crear bucket.
  3. Especifica los valores para los campos de la siguiente tabla y deja los demás en sus valores predeterminados.

    Propiedad Valor (escribe el valor o selecciona una opción como se especifica)
    Nombre Para cada bucket, ingresa un nombre global único. Si el nombre que ingresas no es único, verás un mensaje para probar con otro nombre.
    Tipo de ubicación Multirregional
    Ubicación Selecciona una región, como us (varias regiones en Estados Unidos).
    Clase de almacenamiento predeterminada Estándar
    Control de acceso Uniforme
  4. Haz clic en Crear.

  5. Toma nota del nombre del bucket de Cloud Storage recién creado para el siguiente paso.

gsutil

gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_NAME

Copia un archivo gráfico en tu bucket de Cloud Storage

Para que puedas probar la configuración, copia un archivo gráfico de un bucket público de Cloud Storage en tu propio bucket de Cloud Storage.

  1. Ejecuta el siguiente comando en Cloud Shell. Reemplaza BUCKET_NAME por el nombre de tu bucket único de Cloud Storage:

    gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
    
  2. En Cloud Console, haz clic en Actualizar para verificar que se copió el archivo gráfico.

Haz que tu bucket de Cloud Storage sea público

En este ejemplo, se muestra cómo hacer que tu bucket de Cloud Storage tenga acceso público de lectura. Este es el enfoque recomendado para el contenido público. Con esta configuración, cualquier persona en Internet puede ver y enumerar tus objetos y sus metadatos, sin incluir las LCA. Se recomienda dedicar buckets de Cloud Storage específicos para objetos públicos. Para obtener más información, consulta Arquitectura de bucket recomendada.

Las siguientes son alternativas para hacer públicos tus buckets de Cloud Storage:

En el siguiente procedimiento, se otorga a todos los usuarios acceso para ver los objetos de tu bucket de Cloud Storage, lo que hace que el bucket tenga acceso público de lectura.

Console

  1. En Google Cloud Console, abre el navegador de Cloud Storage.

    Abrir el navegador de Storage

  2. Navega al bucket y haz clic en la pestaña Permisos.
  3. Haz clic en Agregar miembros.
  4. En Nuevos miembros, ingresa allUsers.
  5. Para la función, selecciona Cloud Storage > Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

gsutil

gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME

Reserva una dirección IP externa

Ahora que el bucket de Cloud Storage está en funcionamiento, configura una dirección IP externa estática global que tus clientes usen 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

  1. En Google Cloud Console, ve a la página Direcciones IP externas.

    Ir a la página Direcciones IP externas

  2. Para reservar una dirección IPv4, haz clic en Reservar dirección estática.
  3. Asigna un Nombre de example-ip.
  4. Establece el Nivel de servicio de red en Premium.
  5. Configura la Versión de IP como IPv4.
  6. Configura el Tipo como Global.
  7. Haz clic en Reservar.

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Toma nota de la dirección IPv4 que estaba reservada:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Crea el balanceador de cargas de HTTP(S) externo

En este procedimiento, crearás el bucket de backend del balanceador de cargas, que funciona como wrapper para tu bucket de Cloud Storage. Cuando creas o editas un bucket de backend, puedes habilitar Cloud CDN.

Console

Inicia el proceso de configuración del balanceador de cargas de HTTP(S) externo

  1. En Google Cloud Console, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.
  3. Selecciona De Internet a mis VM y, luego, haz clic en Continuar.
  4. Establece el Nombre en http-lb y, luego, ve al paso siguiente.

Configura el backend y habilita Cloud CDN

Crea el bucket de backend del balanceador de cargas, que funciona como wrapper para el bucket de Cloud Storage. Cuando creas o editas un bucket de backend, puedes habilitar Cloud CDN.

  1. Haz clic en Configuración de backend.
  2. En Servicios y buckets de backend, haz clic en Crear o seleccionar servicios y buckets de backend. A continuación, haz clic en Buckets de backend > Crear un bucket de backend.
  3. Configura el campo Nombre como cat-backend-bucket. No es necesario que este nombre sea único a nivel global, y puede ser diferente al nombre del bucket real de Cloud Storage.
  4. En bucket de Cloud Storage, haz clic en Explorar.
  5. Selecciona el BUCKET_NAME único global de Cloud Storage que creaste y, a continuación, haz clic en Seleccionar.
  6. Haz clic en Habilitar Cloud CDN.

  7. Haz clic en Crear.

Configura reglas de host y comparadores de rutas de acceso

Las reglas de host y los comparadores de rutas de acceso son componentes de configuración de un mapa de URL del balanceador de cargas de HTTP(S) externo.

En Reglas de host y ruta de acceso, puedes mantener la configuración predeterminada.

Para ver un ejemplo de configuración personalizada, consulta Agrega buckets de backend a balanceadores de cargas.

Para obtener más información sobre las reglas de host y los comparadores de rutas de acceso, consulta la Descripción general de los mapas de URL.

Configura el frontend

  1. Haz clic en Configuración de frontend.
  2. 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

    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 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 uno nuevo
  3. Haz clic en Listo.

Revisa la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa los Buckets de backend, las Reglas de host y ruta de acceso y las secciones sobre Frontend.
  3. Haz clic en Crear.
  4. Espera a que se cree el balanceador de cargas.
  5. Haz clic en el nombre del balanceador de cargas (http-lb).
  6. Anota la dirección IP del balanceador de cargas para la siguiente tarea. Se hace referencia a ella como IP_ADDRESS.

gcloud

Configura el backend

gcloud compute backend-buckets create cat-backend-bucket \
    --gcs-bucket-name=BUCKET_NAME \
    --enable-cdn

Configura el mapa de URL

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cat-backend-bucket

Configura el proxy de destino

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

Configura la regla de reenvío

gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

Envía tráfico a tu bucket de backend

Después de crear la regla de reenvío global, la configuración puede demorar varios minutos en propagarse a nivel mundial. Después de varios minutos, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas.

Console

  1. En Google Cloud Console, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. Haz clic en http-lb para expandir el balanceador de cargas que acabas de crear.

    En la sección Backend, confirma que el bucket de backend esté en buen estado. Debe haber una marca de verificación verde junto al bucket de backend. En caso contrario, primero vuelve a cargar la página. Puede llevar unos minutos que Cloud Console indique que los backends están en buen estado.

  3. Después de que en Cloud Console se muestre que el bucket de backend está en buen estado, puedes probar tu balanceador de cargas con un navegador web en http://IP_ADDRESS/never-fetch/three-cats.jpg. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Tu navegador debe renderizar una página con contenido que muestre el archivo gráfico.

gcloud

Usa el comando curl para probar la respuesta desde la URL. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

Toma nota de la dirección IPv4 que estaba reservada:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Envía una solicitud curl como la siguiente:

curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Verifica que Cloud CDN funcione

Si vuelves a cargar la página http://ip-address/never-fetch/three-cats.jpg varias veces seguidas con rapidez, debería haber varios aciertos de caché.

En la siguiente entrada de registro, se muestra un acierto de caché. Para ver los aciertos de caché, abre el visor de registros en Google Cloud Console y filtra por el nombre de regla de reenvío.

Abrir el visor de registros

Visor 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"
}

Console

  1. En Google Cloud Console, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. Haz clic en http-lb para expandir el balanceador de cargas que acabas de crear.

    En la sección Backend, confirma que el bucket de backend esté en buen estado. Debe haber una marca de verificación verde junto al bucket de backend. En caso contrario, primero vuelve a cargar la página. Puede llevar unos minutos que Cloud Console indique que los backends están en buen estado.

  3. Después de que en Cloud Console se muestre que el bucket de backend está en buen estado, puedes probar tu balanceador de cargas con un navegador web en http://IP_ADDRESS/never-fetch/three-cats.jpg. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Tu navegador debe renderizar una página con contenido que muestre el archivo gráfico.

gcloud

Usa el comando curl para probar la respuesta desde la URL. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

Toma nota de la dirección IPv4 que estaba reservada:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Envía una solicitud curl como la siguiente:

curl http://IP_ADDRESS/never-fetch/three-cats.jpg

El contenido se recupera de Cloud Storage, se almacena en caché con Cloud CDN y, luego, se valida y se vuelve a recuperar cuando vence o se expulsa de la caché. El contenido que debe actualizarse antes que el TTL se puede invalidar y volver a recuperar desde Cloud Storage.

Usa modos de almacenamiento en caché y TTL

Para almacenar en caché de forma automática las respuestas estáticas del origen, puedes usar la configuración CACHE_ALL_STATIC en modo de caché.

A fin de controlar la capacidad de almacenamiento en caché de cada respuesta mediante las directivas de caché de HTTP, configura el modo de almacenamiento en caché para usar encabezados de origen (USE_ORIGIN_HEADERS). Para obtener información sobre lo que Cloud CDN no almacena en caché y las directivas de caché que entiende, consulta Contenido que puede almacenarse en caché y Contenido que no puede almacenarse en caché.

Si tu origen no entrega contenido dinámico por usuario, te recomendamos almacenar en caché todas las respuestas del origen. Para ello, usa el modo FORCE_CACHE_ALL. Con este modo, se almacenan en caché todas las respuestas, sin importar el tipo de contenido o las directivas de caché.

Si no seleccionas un modo de caché de forma explícita cuando habilitas Cloud CDN en un backend, la API y la herramienta de línea de comandos de gcloud se establecen de forma predeterminada en USE_ORIGIN_HEADERS, y Cloud Console se establece de forma predeterminada en CACHE_ALL_STATIC”.

Los buckets de backend nuevos con Cloud CDN habilitado usan el modo CACHE_ALL_STATIC de forma automática según la configuración predeterminada.

  1. Habilita Cloud CDN en tu bucket de backend.
  2. Configura el modo de almacenamiento en caché para almacenar en caché de forma automática todo el contenido estático.
  3. Configura un TTL predeterminado adecuado (por ejemplo, un día) para que Cloud CDN lo almacene en caché.

Inhabilita Cloud CDN

Console

Inhabilita Cloud CDN para un solo bucket de backend

  1. En Google Cloud Console, ve a la página Cloud CDN.

    Ir a la página Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Editar.
  3. Desmarca las casillas de verificación de los buckets de backend que deseas que dejen de usar Cloud CDN.
  4. Haz clic en Actualizar.

Quita Cloud CDN de todos los buckets de backend de un origen

  1. En Cloud Console, ve a la página Cloud CDN.

    Ir a la página Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Quitar.
  3. Para confirmar la acción, haz clic en Quitar.

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --no-enable-cdn

Inhabilitar Cloud CDN no invalida ni borra definitivamente las memorias caché. Si desactivas Cloud CDN y vuelves a activarlo, es probable que la mayor parte del contenido almacenado en caché, o todo ese contenido, aún siga almacenado en caché. Para evitar que las memorias caché usen el contenido, debes invalidarlo.

Próximos pasos