Puedes usar un backend externo cuando el contenido esté alojado en un servidor local o en otra nube. El backend externo te permite servir el contenido desde la CDN de Google Cloud.
En este documento se explica el proceso para configurar un almacenamiento de objetos de terceros, como Amazon Simple Storage Service (Amazon S3) o Azure Blob Storage, como backend externo de Cloud CDN. Los backends externos y Cloud CDN funcionan junto con un balanceador de carga de aplicación externo.
Arquitectura
Para crear el backend externo, crea un grupo de puntos finales de red (NEG) de Internet que apunte al servicio de almacenamiento de terceros como backend del balanceador de carga. Los NEGs de Internet se usan para backends externos.
Para configurar el segmento de almacenamiento de terceros como backend, debe hacer lo siguiente:
- Prepara el segmento de almacenamiento de terceros para publicar contenido.
- Crea un NEG de Internet que use el FQDN del bucket.
- Configura el balanceador de carga de aplicación externo con el NEG de Internet como backend.
- Prueba la configuración.
Preparar el contenedor para publicar contenido
Antes de empezar la configuración en Google Cloud, asegúrate de que el contenedor esté configurado correctamente. En estas instrucciones se da por hecho que usas un segmento de Amazon S3 y que tienes los permisos necesarios para hacer cambios en el segmento y los objetos de Amazon S3.
Asegúrate de que el segmento de Amazon S3 y los objetos que contiene sean públicos o de que hayas configurado la autenticación de origen privado para el segmento de Amazon S3.
Asegúrate de que el contenido cumpla los requisitos de almacenamiento en caché que se indican en Contenido que se puede almacenar en caché. Si necesitas añadir metadatos de objetos, consulta la base de conocimientos de AWS. Por ejemplo, puedes consultar el artículo Editar metadatos de objetos.
Necesitará el endpoint del contenedor de Amazon S3 (el FQDN) cuando configure el NEG de Internet. Para obtener la información del endpoint, sigue las instrucciones que se indican en la base de conocimientos de AWS. Por ejemplo, consulta el artículo sobre cómo acceder a un bucket. También puede obtener la URL del endpoint de Amazon S3 desde la página de resumen del objeto.
Crear un NEG de Internet que use el nombre de host del segmento
Para simplificar, en este ejemplo se usa el FQDN backend.example.com
. Asegúrate de sustituirlo por el nombre de dominio completo del segmento de almacenamiento de terceros, que podría ser algo parecido a http://unique-name-bucket.s3-us-west-1.amazonaws.com/
.
En esta guía se usa un ejemplo para describir los conceptos básicos del uso de un backend externo (a veces denominado origen personalizado) en un balanceador de carga de aplicación externo. Un backend externo es un endpoint que es externo a Google Cloud. Si usas un backend externo con un balanceador de carga de aplicación externo, puedes mejorar el rendimiento usando el almacenamiento en caché de Cloud CDN.
En la guía se explica cómo configurar un balanceador de carga de aplicación externo global con un servicio de backend habilitado para Cloud CDN que actúa como proxy de un servidor de backend externo en backend.example.com
.
En el ejemplo, el balanceador de carga acepta solicitudes HTTPS de los clientes y las proxyiza como HTTPS al backend externo. En este ejemplo se da por supuesto que el backend externo admite HTTPS.
Otra opción sería configurar un balanceador de carga para que acepte solicitudes HTTP o HTTPS y usar HTTPS al proxyizar solicitudes al backend externo.
En esta guía se da por hecho que ya ha configurado un balanceador de carga y que va a añadir un nuevo backend externo. Para obtener más información, consulta Configurar un balanceador de carga de aplicaciones clásico con un backend de grupo de instancias gestionado.
En la figura 1 se muestra una arquitectura de ejemplo.
En el diagrama, www.example.com
tiene un frontend de balanceador de carga con la dirección IP 120.1.1.1
. Cuando se produce un fallo de caché, las solicitudes de los usuarios de /cart/id/1223515
se obtienen del backend externo mediante HTTPS. Todo el resto del tráfico entrante se dirige al Google Cloud servicio de backend
con VMs de Compute Engine o al backend bucket, en función del mapa de URLs.
Antes de empezar
Antes de seguir esta guía, familiarízate con lo siguiente:
Descripción general de los grupos de puntos finales de red de Internet, donde se incluyen las limitaciones.
Permisos
Para seguir esta guía, debe crear un grupo de puntos finales de red (NEG) de Internet y crear o modificar un balanceador de carga de aplicaciones externo en un proyecto. Debes ser propietario o editor del proyecto, o bien tener los dos roles de gestión de identidades y accesos de Compute Engine siguientes.
Tarea | Rol necesario |
---|---|
Crear y modificar componentes de balanceadores de carga | Administrador de red |
Crear y modificar grupos de puntos de conexión de red | Administrador de instancias de Compute |
Configurar un balanceador de carga con un backend externo
En esta sección se explica cómo configurar y probar un NEG de Internet.
Descripción general de la configuración
Para configurar una NEG de Internet, debes hacer lo siguiente:
- Definir el endpoint de Internet en un NEG de Internet.
- Añadir un NEG de Internet como backend a un servicio de backend.
- Definir qué tráfico de usuarios se asignará a este servicio de backend configurando el mapa de URLs de tu balanceador de carga de aplicación externo.
- Incluir en la lista de permitidas los intervalos de IP necesarios.
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 serPREMIUM
. - El proxy de destino comprueba cada solicitud con el mapa de URLs para determinar el servicio backend adecuado para la solicitud.
- En el caso de los backends externos, el proxy de destino debe ser
TargetHttpProxy
oTargetHttpsProxy
. En este ejemplo se usaTargetHttpsProxy
. - Si la CDN de Cloud está habilitada (opcional) en el servicio de backend, se pueden almacenar en caché y servir respuestas desde las cachés de Cloud CDN.
- En este ejemplo se incluye un encabezado personalizado, que es obligatorio cuando el backend externo espera un valor concreto para el encabezado
Host
de la solicitud HTTP.
La configuración es similar a la siguiente.
Crear el NEG y el endpoint de Internet
Consola
- En la Google Cloud consola, ve a la página Grupos de endpoints de red.
- Haz clic en Crear grupo de endpoints de red.
- Introduce el nombre del grupo de puntos finales de red:
example-fqdn-neg
. - En Tipo de grupo de puntos finales de red, selecciona Grupo de puntos finales de red (Internet).
- En Puerto predeterminado, introduce
443
. - En Nuevo endpoint de red, selecciona Nombre de dominio completo y puerto.
- En FQDN, introduce
backend.example.com
. - En Tipo de puerto, selecciona Predeterminado y comprueba que Número de puerto sea
443
. - Haz clic en Crear.
gcloud
Crea un NEG de Internet y asigna el valor
--network-endpoint-type
ainternet-fqdn-port
(el nombre de host y el puerto en los que se puede acceder a tu backend externo):gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global
Añade tu endpoint al NEG. Si no se especifica ningún puerto, se seleccionará el puerto
80
(HTTP) o443
(HTTPS; HTTP/2) de forma predeterminada, en función del protocolo configurado en el servicio de backend. Incluye la marca--global
:gcloud compute network-endpoint-groups update example-fqdn-neg \ --add-endpoint="fqdn=backend.example.com,port=443" \ --global
Lista la NEG de Internet creada:
gcloud compute network-endpoint-groups list --global
Resultado:
NAME LOCATION ENDPOINT_TYPE SIZE example-fqdn-neg global INTERNET_FQDN_PORT 1
Lista el endpoint de ese NEG:
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global
Resultado:
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
Añadir un backend externo a un balanceador de carga
En el siguiente ejemplo se actualiza un balanceador de carga.
En el balanceador de carga, el servicio predeterminado es un servicio a Google Cloud. En el ejemplo se modifica el mapa de URLs añadiendo un comparador de rutas que envía todas las solicitudes de cart/id/1223515
al servicio de backend images
, que está asociado al NEG de Internet.
Consola
Crea el servicio de backend y añade el NEG de Internet
- En la Google Cloud consola, ve a la página Balanceo de carga.
- Para añadir el servicio backend a un balanceador de carga, selecciona el balanceador de carga de aplicación clásico, haz clic en Menú y, a continuación, selecciona Editar.
- Haz clic en Configuración de backend.
- En el menú Servicios y segmentos de backend, selecciona Crear un servicio de backend.
- Asigna el nombre
images
al servicio de backend. - En Tipo de backend, selecciona Grupo de endpoints de red de Internet.
- Selecciona el protocolo que quieras usar desde el balanceador de carga hasta el NEG de Internet. En este ejemplo, selecciona HTTPS.
- En Nuevo backend > Grupo de endpoints de red de Internet, selecciona
example-fqdn-neg
y, a continuación, haz clic en Hecho. - Selecciona Habilitar Cloud CDN.
- Opcional: Modifica los ajustes de modo de caché y TTL.
- En Configuraciones avanzadas, en Encabezados de solicitud personalizados,
haz clic en Añadir encabezado.
- En Nombre del encabezado, escribe
Host
. - En Valor del encabezado, introduce
backend.example.com
.
- En Nombre del encabezado, escribe
- Haz clic en Crear.
- Mantén la ventana abierta para continuar.
Asociar el servicio backend a un mapa de URLs
- Haz clic en Reglas de host y ruta.
- En la primera fila o filas, se muestran los servicios en la columna de la derecha y uno de ellos ya incluye la regla predeterminada
Any unmatched (default)
para Hosts y Paths. Google Cloud - Asegúrate de que haya una fila con
images
seleccionada en la columna de la derecha. Si no existe, haga clic en Añadir regla de host y ruta y seleccioneimages
. Rellena los demás campos de la siguiente manera:- En Hosts (Hosts), introduce
*
. - En Rutas, introduce
/cart/id/1223515
.
- En Hosts (Hosts), introduce
Revisar y finalizar
- Haz clic en Revisar y finalizar.
- Compara los ajustes con lo que querías crear.
- Si todo es correcto, haz clic en Actualizar.
gcloud
Crea un servicio de backend para el NEG:
gcloud compute backend-services create images \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE \ --protocol=HTTP2
Define el modo de caché. Para ello, sustituye CACHE_MODE por uno de los siguientes valores:
CACHE_ALL_STATIC
: almacena en caché automáticamente el contenido estáticoUSE_ORIGIN_HEADERS
(predeterminado): requiere que el origen defina encabezados de almacenamiento en caché válidos para almacenar contenido en caché.FORCE_CACHE_ALL
: almacena en caché todo el contenido, ignorando las directivasprivate
,no-store
ono-cache
en los encabezados de respuestaCache-Control
Configura el servicio de backend para añadir 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
Usa el comando
backend-services add-backend
para añadir 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
Asocia el nuevo servicio de backend al mapa de URLs del balanceador de carga creando una regla de coincidencia 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
Haz los cambios siguientes:
EXAMPLE_URL_MAP
: el nombre de tu mapa de URLsGCP_SERVICE_EXAMPLE
: el nombre de un servicio de backend predeterminadoCUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE
: el nombre de esta nueva regla de ruta./CART/ID/1223515
: la rutaIMAGES
: el nombre del nuevo servicio de backend con el NEG de Internet adjunto
Incluye en la lista de permitidos los intervalos de IP necesarios.
Para permitir que un balanceador de carga de aplicaciones externo envíe solicitudes a tu NEG de Internet, debes consultar el registro TXT de DNS _cloud-eoips.googleusercontent.com
con una herramienta como dig
o nslookup
.
Por ejemplo, ejecuta el siguiente comando dig
:
dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
La salida contiene dos intervalos de IP, como se indica a continuación:
34.96.0.0/20
34.127.192.0/18
Anota los intervalos de IP y asegúrate de que tu cortafuegos o lista de control de acceso (LCA) de la nube permita estos intervalos.
Para obtener más información, consulta Autenticar solicitudes.
Conectar tu dominio a tu balanceador de carga
Una vez creado el balanceador de carga, anota la dirección IP asociada a él. Por ejemplo, 30.90.80.100
. Para dirigir tu dominio a tu balanceador de carga, crea un registro A
con tu servicio de registro de dominios. Si has añadido varios dominios a tu certificado SSL, debes añadir un registro A
para cada uno de ellos, todos apuntando a la dirección IP del balanceador de carga. Por ejemplo, para crear registros A
de www.example.com
y example.com
, usa lo siguiente:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Si usas Cloud DNS como proveedor de DNS, consulta el artículo sobre cómo añadir, modificar y eliminar registros.
Probar el balanceador de carga de aplicación externo
Ahora que has configurado el balanceador de carga, puedes empezar a enviar tráfico a la dirección IP del balanceador de carga. Si has configurado un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede tardar en completarse, por lo que puedes empezar usando la dirección IP para hacer pruebas.
En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en el balanceador de carga que acabas de crear.
Anota la dirección IP del balanceador de carga.
Si has creado un balanceador de carga HTTP, puedes probarlo con un navegador web en
http://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la página principal del serviciohelloworld
.Si has creado un balanceador de carga HTTPS, puedes probarlo con un navegador web en
https://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la página principal del serviciohelloworld
.Si no funciona y estás usando un certificado gestionado por Google, confirma que el estado del recurso de tu certificado es ACTIVE. Para obtener más información, consulta el estado del recurso de certificado SSL gestionado por Google.
También puedes usar
curl
desde la línea de comandos de tu máquina local. SustituyeIP_ADDRESS
por la dirección IPv4 del balanceador de carga.Si usas un certificado gestionado por Google, prueba el dominio que apunta a la dirección IP del balanceador de carga. Por ejemplo:
curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
Opcional: Si usas un dominio personalizado, puede que tengas que esperar a que se propaguen los ajustes de DNS actualizados. A continuación, prueba tu dominio (por ejemplo,
backend.example.com
) en el navegador web.Si necesitas ayuda para solucionar problemas, consulta el artículo Solucionar problemas de NEG y backend externo e Internet.
Probar Cloud CDN
Prueba 1: Acceder directamente al endpoint del contenedor
En esta prueba se usan los comandos time
y wget
de una máquina virtual. En el ejemplo se descargan los archivos
/cart/id/1223515/image.jpg
del contenedor backend.example.com
.
En el resultado, puedes ver que la solicitud general tarda 780 ms. Este es el tiempo que se tarda en recuperar una imagen de 3,3 MB directamente de 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 carga para recuperar el archivo /cart/id/1223515/image.jpg
. Como es la primera solicitud, debería ser un fallo y Cloud CDN debería obtener la imagen del origen, que es Amazon S3. En el resultado, puedes ver que la solicitud ha tardado 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 la CDN
Ahora haremos una solicitud más con esta IP del balanceador de carga. Esta vez, deberíamos obtener una respuesta almacenada en caché, por lo que debería ser más rápida que las dos primeras pruebas.
Volvemos a usar la misma IP de balanceador de carga LOAD_BALANCER_IP_ADDRESS. En el resultado, podemos ver que la solicitud ha tardado 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
Verificar mediante registros
Los registros de Cloud CDN están asociados al balanceador de carga de aplicaciones externo al que están conectados los backends con Cloud CDN habilitado. Con los registros, puedes comprobar si una solicitud es un acierto o un fallo. Puedes consultar más información sobre los registros de Cloud CDN en Ver registros.
Limitaciones
El segmento de terceros y los objetos deben ser públicos. También puedes mantener tu contenedor y tus objetos privados si configuras la autenticación de origen privado. Los back-ends externos no admiten otros métodos de autenticación de contenido, como las URLs firmadas o las cookies firmadas.
Cuando se usa un servicio de backend externo que espera un valor concreto para la cabecera
Host
de la solicitud HTTP, debe configurar el servicio de backend para que asigne a la cabeceraHost
ese valor esperado. Si no configuras un encabezado de solicitud personalizado, un servicio de backend conservará el encabezadoHost
que el cliente haya usado para conectarse al balanceador de carga de aplicaciones externo Google Cloud . Para obtener información general sobre los encabezados personalizados, consulte Configurar encabezados de solicitud personalizados. Para ver un ejemplo específico, consulta Configurar un balanceador de carga con un backend externo.
Siguientes pasos
- Para comprobar si Cloud CDN está sirviendo respuestas desde la caché, consulta Registros y métricas de almacenamiento en caché.
- Para saber qué contenido se puede almacenar en caché y cuál no, consulta el resumen sobre el almacenamiento en caché.
- Para encontrar puntos de presencia de GFE, consulta Ubicaciones de caché.