Configurar un segmento de backend

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-Controlde 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)
  • Grupos de instancias sin gestionar
  • Grupos de instancias administradas
  • Grupos de puntos finales de red internos a Google Cloud
  • Grupos de puntos finales de red externos a Google Cloud
Segmento de backend Estático (como imágenes)
  • Segmentos de Cloud Storage (que se explican en esta página)

Antes de empezar

Consola

  1. En la Google Cloud consola, ve a la página Inicio.

    Ve a la Google Cloud página principal.

  2. 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

  1. En la Google Cloud consola, abre la página Segmentos de Cloud Storage.

    Abre la página Cubos.

  2. Haz clic en Crear segmento.
  3. 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
  4. Haz clic en Crear.

  5. 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.

# Cloud Storage bucket
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "default" {
  name                        = "${random_id.bucket_prefix.hex}-my-bucket"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
  // Assign specialty files
  website {
    main_page_suffix = "index.html"
    not_found_page   = "404.html"
  }
}

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.

# image object for testing, try to access http://<your_lb_ip_address>/test.jpg
resource "google_storage_bucket_object" "test_image" {
  name = "test-object"
  # Uncomment and add valid path to an object.
  #  source       = "/path/to/an/object"
  #  content_type = "image/jpeg"

  # Delete after uncommenting above source and content_type attributes
  content      = "Data as string to be uploaded"
  content_type = "text/plain"

  bucket = google_storage_bucket.default.name
}

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:

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

  1. En la Google Cloud consola, abre la página Segmentos de Cloud Storage.

    Abre la página Cubos.

  2. Ve al segmento y haz clic en la pestaña Permisos.
  3. Haz clic en Añadir principales.
  4. En Principales nuevos, introduce allUsers.
  5. En el campo "Rol", selecciona Cloud Storage > Visor de objetos de Storage.
  6. 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.

# make bucket public
resource "google_storage_bucket_iam_member" "default" {
  bucket = google_storage_bucket.default.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

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

  1. En la Google Cloud consola, 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. Asigne un Nombre de example-ip.
  4. Configure el Nivel de servicio de red como Premium.
  5. Configura IPv4 (versión de IP) como IPv4.
  6. En Tipo, seleccione Global.
  7. 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.

# reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

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

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a la página Balanceo de carga

  2. En Balanceo de carga de HTTP y HTTPS, haz clic en Iniciar configuración.
  3. Seleccione De Internet a mis VMs y, a continuación, haga clic en Continuar.
  4. 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.
  5. 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.

  1. Haz clic en Configuración de backend.
  2. 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.
  3. 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.
  4. En Segmento de Cloud Storage, haz clic en Examinar.
  5. Selecciona el nombre único global de Cloud Storage BUCKET_NAME que has creado y, a continuación, haz clic en Seleccionar.
  6. Haz clic en Habilitar Cloud CDN.

  7. (Opcional) Modifica el modo de caché y los ajustes de TTL.

  8. 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

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

Revisar la configuración

  1. Haz clic en Revisar y finalizar.
  2. Consulta las secciones Backend buckets, Reglas de host y ruta y Frontend.
  3. Haz clic en Crear.
  4. Espera a que se cree el balanceador de carga.
  5. Haz clic en el nombre del balanceador de carga (http-lb).
  6. 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 o USE_ORIGIN_HEADERS: usa los encabezados definidos según los metadatos de control de caché de Cloud Storage. Cloud Storage siempre proporciona un encabezado Cache-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 directivas private, no-store o no-cache en los encabezados de respuesta Cache-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.

# backend bucket with CDN policy with default ttl settings
resource "google_compute_backend_bucket" "default" {
  name        = "cat-backend-bucket"
  description = "Contains beautiful images"
  bucket_name = google_storage_bucket.default.name
  enable_cdn  = true
  cdn_policy {
    cache_mode        = "CACHE_ALL_STATIC"
    client_ttl        = 3600
    default_ttl       = 3600
    max_ttl           = 86400
    negative_caching  = true
    serve_while_stale = 86400
  }
}

Configurar el mapa de URL

Para configurar el backend, usa el recurso google_compute_url_map.

# url map
resource "google_compute_url_map" "default" {
  name            = "http-lb"
  default_service = google_compute_backend_bucket.default.id
}

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.

# http proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Configurar la regla de reenvío

Para configurar la regla de reenvío, usa el recurso google_compute_global_forwarding_rule.

# forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}
  • 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

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a la página Balanceo de carga

  2. 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.

  3. 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. Sustituye IP_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.jpgpá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

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a la página Balanceo de carga

  2. 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.

  3. 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. Sustituye IP_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

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

    Ve a la página de Cloud CDN.

  2. En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Editar.
  3. Desmarque las casillas de los backend buckets que quiera dejar de usar en Cloud CDN.
  4. Haz clic en Actualizar.

Quitar Cloud CDN de todos los segmentos de backend de un origen

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

    Ve a la página de Cloud CDN.

  2. En el lado derecho de la fila del origen, haz clic en Menú y, a continuación, selecciona Quitar.
  3. 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