Configura Cloud CDN con almacenamiento de objetos de terceros

Puedes usar un origen personalizado cuando el contenido se aloja de forma local o en otra nube. El origen personalizado te permite entregar el contenido desde Cloud CDN de Google.

En este documento, se explica el proceso de configuración de almacenamiento de objetos de terceros, como Amazon Simple Storage Service (Amazon S3) o el almacenamiento de Azure Blob, como un origen personalizado para Cloud CDN. Los orígenes personalizados y Cloud CDN funcionan en conjunto con un balanceador de cargas HTTP(S) externo.

Arquitectura

Para crear el origen personalizado, crea un grupo de extremos de red de Internet (NEG) que apunte al servicio de almacenamiento de terceros como backend para el balanceador de cargas. Los NEG de Internet se usan para orígenes personalizados.

Para configurar el depósito de almacenamiento de terceros como backend, debes hacer lo siguiente:

  1. Prepara el depósito de almacenamiento de terceros para que entregue contenido.
  2. Crea un NEG de Internet que use el FQDN del depósito.
  3. Configura el balanceador de cargas HTTP(S) externo con el NEG de Internet como backend.
  4. Prueba la configuración

Prepara el depósito para entregar contenido

Antes de comenzar la configuración en Google Cloud, asegúrate de que el depósito esté configurado correctamente. En estas instrucciones, se supone que usas Amazon S3 y tienes los permisos necesarios para realizar cambios en el depósito y los objetos de Amazon S3.

  1. Asegúrate de que el depósito de Amazon S3 y los objetos del depósito sean públicos. Para obtener instrucciones, consulta la base de conocimiento de AWS. Por ejemplo: ¿Cómo puedo otorgar acceso de lectura público a algunos objetos en mi depósito de Amazon S3?

  2. Asegúrate de que el contenido cumpla con los requisitos de capacidad de almacenamiento en caché, que se enumeran en el contenido que puede almacenarse en caché. Si necesitas agregar metadatos de objetos, consulta la base de conocimiento de AWS. Por ejemplo: Edita metadatos de objetos.

  3. Observa el extremo del depósito de Amazon S3 (el FQDN). Necesitarás esta información cuando configures el NEG de Internet. Para obtener la información del extremo, sigue las instrucciones en la base de conocimiento de AWS. Por ejemplo: Accede a un depósito. También puedes obtener la URL del extremo de Amazon S3 desde la página de descripción general del objeto.

Crea un NEG de Internet que use el nombre de host del depósito

Para simplificar, en este ejemplo se usa el FQDN backend.example.com. Asegúrate de reemplazar esto con el FQDN de tu depósito de almacenamiento externo, que podría ser similar a http://unique-name-bucket.s3-us-west-1.amazonaws.com/.

En esta guía, se usa un ejemplo para explicar los conceptos básicos sobre el uso de un origen personalizado en un grupo de extremos de red (NEG) de Internet. Un origen personalizado es un extremo de Internet externo a Google Cloud. Puedes usar un NEG de Internet como backend para un balanceador de cargas de HTTP(S) externo y mejorar el rendimiento mediante el almacenamiento en caché de Cloud CDN.

En la guía, se explica cómo configurar un balanceador de cargas de HTTP(S) externo global con un servicio de backend con Cloud CDN habilitado que se conecta mediante proxy a un servidor de origen personalizado en backend.example.com.

En el ejemplo, el balanceador de cargas acepta las solicitudes HTTPS de clientes y las reenvía mediante proxy como HTTP/2 al origen personalizado. Se da por sentado que el origen admite HTTP/2.

Otra opción sería configurar un balanceador de cargas para aceptar solicitudes HTTP o HTTP/2 y usar HTTPS cuando se reenvían solicitudes mediante proxy al origen personalizado.

En esta guía, se supone que ya configuraste un balanceador de cargas y que agregas un nuevo backend de origen personalizado.

Una arquitectura de muestra se ve así:

Caso práctico de depósito S3 para orígenes personalizados
Caso práctico del depósito S3 para orígenes personalizados

En el diagrama, www.example.com tiene un frontend de balanceador de cargas con la dirección IP 120.1.1.1. Cuando hay un error de caché, las solicitudes de usuario para /cart/id/1223515 se recuperan del origen personalizado por medio de HTTP/2. El resto del tráfico entrante se dirige al servicio de backend de Google Cloud con las VM de Compute Engine o al bucket de backend, según el mapa de URL.

Antes de comenzar

Antes de seguir con esta guía, familiarízate con lo siguiente:

Permisos

Para seguir esta guía, debes crear un NEG de Internet y crear o modificar un balanceador de cargas de HTTP(S) externo en un proyecto. Debes ser propietario o editor de proyecto o tener ambas de las siguientes funciones de IAM de Compute Engine.

Tarea Función requerida
Crear y modificar componentes del balanceador de cargas Administrador de redes
Crear y modificar los NEG Administrador de instancias de procesamiento

Configura un balanceador de cargas con un origen personalizado

En esta guía, se muestra cómo configurar y probar un NEG de Internet.

Descripción general de la configuración

La configuración de un NEG de Internet implica hacer lo siguiente:

  • Definir el extremo de Internet en un NEG de Internet
  • Agregar un NEG de Internet como el backend de un servicio de backend
  • Definir a qué tráfico de usuario se mapea este servicio de backend mediante la configuración del mapa de URL del balanceador de cargas de HTTP(S) externo

En este ejemplo, se crean los siguientes recursos:

  • Una regla de reenvío con la dirección IP 120.1.1.1 dirige las solicitudes entrantes a un proxy de destino.
    • El networkTier de la regla de reenvío debe ser PREMIUM.
  • El proxy de destino compara cada solicitud con el mapa de URL a fin de determinar el servicio de backend apropiado para la solicitud.
    • El proxy de destino debe ser TargetHttpProxy o TargetHttpsProxy para los orígenes personalizados. En este ejemplo, se usa TargetHttpsProxy.
  • En el servicio de backend, Cloud CDN habilitado (opcional) permite almacenar en caché y entregar respuestas desde las cachés de Cloud CDN.
  • La configuración del servicio de backend dirige el tráfico a un NEG de Internet. Este NEG de Internet contiene el extremo de red en el que el balanceador de cargas de HTTP(S) externo envía tráfico en caso de un error de caché en Cloud CDN.
  • En este ejemplo, se incluye un encabezado de la solicitud definido por el usuario, que se requiere cuando el origen personalizado espera un valor específico para el encabezado Host de la solicitud HTTP.

La configuración se verá de la siguiente manera:

Cloud CDN con el backend del depósito de Amazon S3
Cloud CDN con backend de depósito de Amazon S3

Crea el NEG y el extremo de Internet

Console

  1. En Google Cloud Console, ve a la página Grupos de extremos de red.

    Ir a la página Grupos de extremos de red

  2. Haz clic en Crear un grupo de extremos de red.
  3. Ingresa el nombre del grupo de extremos de red: example-fqdn-neg.
  4. En Tipo de grupo de extremos de red, selecciona Grupo de extremos de red (Internet).
  5. En Puerto predeterminado, ingresa 443.
  6. En Nuevo extremo de red, selecciona Nombre y puerto de dominio completamente calificados.
  7. En el FQDN, ingresa backend.example.com.
  8. En Tipo de puerto, selecciona Predeterminado y verifica que el Número de puerto sea 443.
  9. Haz clic en Crear.

gcloud

  1. Crea un NEG de Internet y establece --network-endpoint-type como internet-fqdn-port (el nombre de host y el puerto en el que se encuentra el origen):

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --network-endpoint-type="internet-fqdn-port" --global
    
  2. Agrega el extremo al NEG. Si no se especifica un puerto, la selección se establece de forma predeterminada en el puerto 80 (HTTP) o 443 (HTTPS; HTTP/2), según el protocolo configurado en el servicio de backend. Asegúrate de incluir la marca --global.

    gcloud compute network-endpoint-groups update example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Enumera el NEG de Internet creado:

    gcloud compute network-endpoint-groups list --global
    

    Resultado:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. Enumera el extremo dentro del NEG:

    gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \
        --global
    

    Resultado:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Agrega un origen personalizado a un balanceador de cargas

En el siguiente ejemplo, se actualiza un balanceador de cargas existente.

En el balanceador de cargas existente, el servicio predeterminado es un servicio de Google Cloud. El ejemplo modifica el mapa de URL existente mediante la incorporación de un comparador de rutas de acceso que envía todas las solicitudes de cart/id/1223515 al servicio de backend images, que está asociado con el NEG de Internet.

Console

Crea el servicio de backend y agrega el NEG de Internet

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

    Ir a la página Balanceo de cargas

  2. Para agregar el servicio de backend a un balanceador de cargas existente, selecciona el balanceador de cargas de HTTP(S) externo y haz clic en Menú y, luego, selecciona Editar.
  3. Haz clic en Configuración de backend.
  4. En el menú desplegable Crear o seleccionar servicios y depósitos de backend, selecciona Servicios de backend > Crear un servicio de backend.
  5. Configura el nombre del servicio de backend como images.
  6. En Tipo de backend, selecciona Grupo de extremos de red de Internet.
  7. Selecciona el protocolo que quieres usar desde el balanceador de cargas al NEG de Internet. En este ejemplo, selecciona HTTP/2.
  8. En Nuevo backend > Grupo de extremos de red de Internet, selecciona example-fqdn-neg y, luego, haz clic en Listo.
  9. Selecciona Habilitar Cloud CDN.
  10. Conserva la configuración predeterminada de modo de almacenamiento en caché y de TTL.
  11. En Configuración avanzada, en Encabezados de solicitud personalizados, haz clic en Agregar encabezado.
    1. En Nombre del encabezado, ingresa Host.
    2. En Valor de encabezado, ingresa backend.example.com.
  12. Haz clic en Crear.
  13. Mantén la ventana abierta para continuar.

Conecta el servicio de backend a un mapa de URL existente

  1. Haz clic en Reglas de host y ruta.
  2. La primera fila o filas tienen servicios de Google Cloud en la columna derecha, y una de ellas ya se propagó con la regla predeterminada Any unmatched (default) para hosts y Rutas.
  3. Asegúrate de que exista una fila con images seleccionado en la columna de la derecha. Si no existe, haz clic en Agregar regla de host y de ruta y selecciona images. Propaga los otros campos de la siguiente manera:
    1. En Hosts, ingresa *.
    2. En Rutas, ingresa /cart/id/1223515.

Revisa y finaliza

  1. Haz clic en Revisar y finalizar.
  2. Compara la configuración con lo que pretendías crear.
  3. Si todo parece correcto, haz clic en Crear para crear el balanceador de cargas de HTTP(S) externo.

gcloud

  1. Crea un servicio de backend nuevo para el NEG:

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --protocol=HTTP2
    
  2. Configura el servicio de backend para agregar el encabezado de solicitud personalizado Host: backend.example.com a la solicitud:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. Usa el comando backend-services add-backend para agregar el NEG de Internet al servicio de backend:

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. Conecta el servicio de backend nuevo con el mapa de URL del balanceador de cargas mediante la creación de una regla coincidente nueva para dirigir las solicitudes a ese backend.

    gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \
      --default-service=GCP_SERVICE_EXAMPLE \
      --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \
      --backend-service-path-rules=/CART/ID/1223515=IMAGES
    

    Reemplaza lo siguiente:

    • EXAMPLE_URL_MAP: El nombre del mapa de URL existente
    • GCP_SERVICE_EXAMPLE: El nombre de un servicio de backend predeterminado existente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: El nombre de esta regla de ruta de acceso nueva
    • /CART/ID/1223515: La ruta
    • IMAGES: El nombre del nuevo servicio de backend con el NEG de Internet conectado

Prueba el balanceador de cargas de HTTP(S) externo

Ahora que ya configuraste el balanceador de cargas, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas. Si configuraste un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede llevar un tiempo en completarse, por lo que puedes comenzar a usar la dirección IP para realizar pruebas.

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en el balanceador de cargas que acabas de crear.
  3. Toma nota de la Dirección IP del balanceador de cargas.
  4. Si creaste un balanceador de cargas de HTTP, puedes probarlo mediante un navegador web en http://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Se te debería dirigir a la página principal del servicio de helloworld.

    Si creaste un balanceador de cargas de HTTPS, puedes probarlo mediante un navegador web en https://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Se te debería dirigir a la página principal del servicio de helloworld.

    Si eso no funciona y usas un certificado administrado por Google, confirma que el estado del recurso de certificado sea ACTIVO. Para obtener más información, consulta el estado de los recursos del certificado SSL administrado por Google.

    Como alternativa, puedes usar curl desde la línea de comandos de tu máquina local. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

    Si usas un certificado administrado por Google, prueba el dominio que apunta a la dirección IP del balanceador de cargas. Por ejemplo:

    curl -s 'backend.example.com:443' --connect-to test.example.com:443:IP_ADDRESS:443
    

  5. Si usas un dominio personalizado, es posible que debas esperar a que se propague la configuración de DNS actualizada (opcional). Luego, prueba el dominio (por ejemplo, backend.example.com) en el navegador web.

    Para obtener ayuda con la solución de problemas, consulta Soluciona problemas de NEG de Internet y de origen personalizado.

Prueba Cloud CDN

Prueba 1: prueba el extremo del depósito directamente

En esta prueba, se usan los comandos time y wget de una VM. En el ejemplo, se descarga /cart/id/1223515/image.jpg del depósito backend.example.com.

En el resultado, puede ver que la solicitud general tarda 780 ms. Este es el momento de recuperar una imagen de 3.3 MB directamente en Amazon S3.

time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46--  backend.example.com/cart/id/1223515/image.jpg
Resolving backend.example.com (backend.example.com)... 52.219.120.233
Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.47'
/cart/id/1223515/image.jpg.47                                                 100%[==============================================================================================================================================>]   3.29M  6.25MB/s    in 0.5s
2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106]
real    0m0.780s
user    0m0.003s
sys     0m0.012s

Prueba 2: Primera solicitud a través de Cloud CDN

Esta prueba usa la dirección IP del balanceador de cargas para recuperar el archivo /cart/id/1223515/image.jpg. Debido a que esta es la primera solicitud, debería ser un error y Cloud CDN debe recuperar la imagen del origen, que es Amazon S3. En el resultado, puedes ver que la solicitud tardó en 844 ms.

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.44'
/cart/id/1223515/image.jpg.44                                                 100%[==============================================================================================================================================>]   3.29M  8.23MB/s    in 0.4s
2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106]
real    0m0.844s
user    0m0.003s
sys     0m0.012s

Prueba 3: Segunda solicitud a través de CDN

Haremos una solicitud más con esta IP del balanceador de cargas. Esta vez, debemos recibir una respuesta almacenada en caché, por lo que debería ser más rápida que las primeras 2 pruebas.

Estamos usando la misma IP de balanceo de cargas LOAD_BALANCER_IP_ADDRESS. En el resultado, podemos ver que la solicitud tardó solo 18 ms.

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.45'
/cart/id/1223515/image.jpg.45                                                 100%[==============================================================================================================================================>]   3.29M  --.-KB/s    in 0.008s
2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106]
real    0m0.018s
user    0m0.001s
sys     0m0.010s

Verifica mediante registros

Los registros para Cloud CDN están asociados con el balanceador de cargas HTTP(S) externo al que se vinculan tus backends habilitados para Cloud CDN. Con los registros, puedes verificar si una solicitud es un acierto o un error. Puedes obtener más información sobre los registros de Cloud CDN en Visualiza registros.

Limitaciones

  • El depósito de terceros y los objetos deben ser públicos. Los orígenes personalizados no admiten las URL firmadas ni las cookies firmadas.

¿Qué sigue?