Configura Cloud CDN con Cloud Run, Cloud Functions o App Engine

En esta página, se muestra cómo crear un balanceador de cargas de HTTP(S) externo para enrutar solicitudes a backends sin servidores. El término “sin servidores” hace referencia a los siguientes productos de procesamiento sin servidores: App Engine, Cloud Functions y Cloud Run (completamente administrado).

Los NEG sin servidores te permiten usar las apps sin servidores de Google Cloud con balanceo de cargas de HTTP(S) externo. Después de configurar un balanceador de cargas con el backend de NEG sin servidores, las solicitudes al balanceador de cargas se enrutan al backend de la app sin servidores.

Si deseas obtener más información sobre los NEG sin servidores, consulta la descripción general de los NEG sin servidores.

Antes de comenzar

  1. Implementa un servicio de App Engine, Cloud Functions o Cloud Run (completamente administrado).
  2. Si aún no lo hiciste, instala el SDK de Google Cloud.
  3. Configura permisos.
  4. Agrega un recurso de certificado SSL.

Implementa un servicio de App Engine, Cloud Functions o Cloud Run (completamente administrado)

En las instrucciones de esta página, se supone que ya tienes un servicio de Cloud Run (completamente administrado), Cloud Functions o App Engine en ejecución.

En el ejemplo de esta página, usamos la guía de inicio rápido de Cloud Run (completamente administrado) para Python a fin de implementar un servicio de Cloud Run (completamente administrado) en la región us-central1. En el resto de esta página, se muestra cómo configurar un balanceador de cargas de HTTP(S) externo que usa un backend de NEG sin servidores para enrutar las solicitudes a este servicio.

Si aún no implementaste una app sin servidores o si quieres probar un NEG sin servidores con una app de muestra, usa una de las siguientes guías de inicio rápido. Puedes crear una app sin servidores en cualquier región, pero debes usar la misma región más adelante para crear el NEG sin servidores y el balanceador de cargas.

Cloud Run (completamente administrado)

Para crear una aplicación Hello World sencilla, empaquetarla en una imagen de contenedor y, luego, implementarla en Cloud Run (completamente administrado), consulta la Guía de inicio rápido: Compila e implementa.

Si ya subiste un contenedor de muestra a Container Registry, consulta la Guía de inicio rápido: Implementa un contenedor de muestra ya compilado.

Cloud Functions

Consulta Cloud Functions: Guía de inicio rápido de Python.

App Engine

Consulta las siguientes guías de inicio rápido de App Engine para Python 3:

Instala el SDK de Google Cloud

Instala la herramienta de línea de comandos de gcloud. Consulta la Descripción general de gcloud para obtener información conceptual y de instalación de la herramienta.

Si no ejecutaste la herramienta de línea de comandos de gcloud antes, ejecuta primero gcloud init para inicializar tu directorio de gcloud.

Configura permisos

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

Tarea Función requerida
Crear balanceador de cargas y componentes de herramientas de redes Administrador de redes
Crear y modificar los NEG Administrador de instancias de procesamiento
Crear y modificar certificados SSL Administrador de seguridad

Reserva una dirección IP externa

Ahora que tus servicios están en funcionamiento, configura una dirección IP externa estática global que tus clientes usen para llegar a tu balanceador de cargas.

Console

  1. Ve a la página Direcciones IP externas en Google Cloud Console.
    Ir a la página Direcciones IP externas
  2. Haz clic en Reservar dirección estática para reservar una dirección IPv4.
  3. Asigna un Nombre de example-ip.
  4. Establece el nivel 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 \
    --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 un recurso de certificado SSL

Si quieres crear un balanceador de cargas de HTTPS, debes agregar un recurso de certificado SSL al frontend del balanceador de cargas. Crea un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.

  • Certificados administrados por Google. Se recomienda usar certificados administrados por Google, ya que Google Cloud obtiene, administra y renueva estos certificados de manera automática. Si quieres crear un certificado administrado por Google, debes tener un dominio y los registros DNS para ese dominio a fin de que se aprovisione el certificado. Si aún no tienes un dominio, puedes obtener uno en Google Domains. Además, deberás actualizar el registro DNS A del dominio a fin de que apunte a la dirección IP del balanceador de cargas que se creó en el paso anterior (example-ip). Para obtener instrucciones detalladas, consulta Usa certificados administrados por Google.

  • Certificados autofirmados. Si no deseas configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para realizar una prueba.

En este ejemplo, se supone que ya creaste un recurso de certificado SSL.

Si quieres probar este proceso sin crear un recurso de certificado SSL (o un dominio requerido por los certificados administrados por Google), puedes seguir las instrucciones de esta página para configurar un balanceador de cargas de HTTP en su lugar.

Crea el balanceador de cargas de HTTP(S) externo

En el siguiente diagrama, el balanceador de cargas usa un backend de NEG sin servidores para dirigir las solicitudes a un servicio de Cloud Run (completamente administrado) sin servidores. En este ejemplo, usamos la guía de inicio rápido de Cloud Run (completamente administrado) para Python a fin de implementar un servicio de Cloud Run (completamente administrado).

Balanceo de cargas de HTTPS para una app de Cloud Run (haz clic para ampliar)
Balanceo de cargas de HTTPS para una app de Cloud Run

Debido a que las verificaciones de estado no admiten los servicios de backend con backends de NEG sin servidores, no necesitas crear una regla de firewall que permita verificaciones de estado si el balanceador de cargas solo tiene backends de NEG sin servidores.

Console

Asigna un nombre al balanceador de cargas

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.
  3. En Orientado a Internet o solo interno, selecciona De Internet a mis VM.
  4. Haz clic en Continuar.
  5. Para el Nombre del balanceador de cargas, ingresa serverless-lb.
  6. Mantén la ventana abierta para continuar.

Configura los servicios de backend

  1. Haz clic en Configuración de backend.
  2. En el menú desplegable Create or select a backend service, mantén el puntero del mouse sobre Servicios de backend y, luego, selecciona Crear un servicio de backend.
  3. Ingresa un Nombre.
  4. En Tipo de backend, selecciona Grupo de extremos de red sin servidores.
  5. Deja Protocolo sin modificar. Este parámetro se ignora.
  6. En Backends, en la ventana Nuevo backend, selecciona Crear grupo de extremos de red sin servidores.
  7. Ingresa un Nombre.
  8. En Región, selecciona us-central1. Luego, selecciona Cloud Run.
  9. Elige Seleccionar nombre de servicio.
  10. En el menú desplegable Servicio, selecciona el servicio de Cloud Run (completamente administrado) para el que deseas crear un balanceador de cargas.
  11. Haz clic en Crear.
  12. En la ventana Nuevo backend, haz clic en Listo.
  13. Selecciona Habilitar Cloud CDN. Conserva la configuración predeterminada de modo de almacenamiento en caché y de TTL.
  14. 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.

  1. Haz clic en Reglas de host y ruta de acceso.
  2. Conserva los hosts y las rutas de acceso predeterminados. Para este ejemplo, todas las solicitudes se envían al servicio de backend que creaste en el paso anterior.

Configura el frontend

  1. Haz clic en Configuración de frontend.
  2. Ingresa un Nombre.
  3. Para crear un balanceador de cargas de HTTPS, debes tener un certificado SSL (gcloud compute ssl-certificates list). Te recomendamos usar un certificado administrado por Google como se describió antes. Para configurar un balanceador de cargas de HTTP(S) externo, completa los campos como se muestra a continuación.

    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 HTTPS
    Nivel de servicio de red Premium
    Versión de IP IPv4
    Dirección IP example-ip
    Puerto 443
    Certificado Selecciona un certificado SSL existente o crea uno nuevo.

    Si deseas crear un balanceador de cargas de HTTPS, debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.
    Para crear un certificado administrado por Google, debes tener un dominio. El registro A del dominio debe resolverse en la dirección IP del balanceador de cargas (en este ejemplo, example-ip). Se recomienda usar certificados administrados por Google porque Google Cloud obtiene, administra y renueva estos certificados de forma automática. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para realizar pruebas.

  4. Haz clic en Listo.

Revisa la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa el Backend, las Reglas de host y ruta de acceso y el 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 (serverless-lb).
  6. Anota la dirección IP del balanceador de cargas para la siguiente tarea. Se hace referencia a ella como IP_ADDRESS.

gcloud

  1. Crea un NEG sin servidores para tu app sin servidores. Si deseas crear un NEG sin servidores con un servicio de Cloud Run (completamente administrado), ejecuta el siguiente comando:

    gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
        --region=us-central1 \
        --network-endpoint-type=serverless  \
        --cloud-run-service=CLOUD_RUN_SERVICE_NAME
    
    Si deseas ver más opciones, consulta la guía de referencia de gcloud para gcloud compute network-endpoint-groups create.
  2. Crea un servicio de backend.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --global \
        --enable-cdn \
        --cache-mode=CACHE_MODE \
        --custom-response-header='Cache-Status: {cdn_cache_status}' \
        --custom-response-header='Cache-ID: {cdn_cache_id}'
    

    Reemplaza CACHE_MODE por uno de los siguientes valores:

    • CACHE_All_STATIC (predeterminado): Almacena en caché el contenido estático de forma automática. Las respuestas con la marca de que no pueden almacenarse en caché (directivas private, no-store o no-cache en encabezados de respuesta Cache-Control) no se almacenan en caché. Para almacenar en caché contenido dinámico, el contenido debe tener encabezados de almacenamiento en caché válidos. Este es el comportamiento predeterminado de todos los backends nuevos con Cloud CDN habilitado.

    • USE_ORIGIN_HEADERS: Se requiere que se configuren encabezados de almacenamiento en caché válidos para el contenido de la caché en el origen. Las respuestas sin estos encabezados no se almacenan en caché en el extremo de Google y requieren un recorrido completo al origen en cada solicitud, lo que podría afectar el rendimiento y aumentar la carga en el servidor de origen. Este es el comportamiento predeterminado de todos los backends existentes con Cloud CDN habilitado.

    • FORCE_CACHE_ALL: Almacena en caché todo el contenido, sin importar las directivas private, no-store o no-cache en los encabezados de respuesta Cache-Control. Esto podría provocar que se almacene en caché el contenido privado por usuario (lo que permita identificarlo). Solo se debería habilitar en backends que no entreguen contenido dinámico ni privado, como buckets de Cloud Storage.

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

  3. Agrega el NEG sin servidores como un backend al servicio de backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --global \
        --network-endpoint-group=SERVERLESS_NEG_NAME \
        --network-endpoint-group-region=us-central1
    
  4. Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend:
    gcloud compute url-maps create URL_MAP_NAME \
        --default-service BACKEND_SERVICE_NAME
    

    Este mapa de URL de ejemplo solo se orienta a un servicio de backend que representa una sola app sin servidores, por lo que no es necesario configurar reglas de host ni comparadores de rutas de acceso. Si tienes más de un servicio de backend, puedes usar reglas de host a fin de dirigir las solicitudes a diferentes servicios según el nombre de host y configurar comparadores de rutas de acceso para dirigir solicitudes a diferentes servicios según la ruta de acceso de la solicitud.

  5. Si deseas crear un balanceador de cargas de HTTPS, debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado. Se recomienda usar certificados administrados por Google, ya que Google Cloud obtiene, administra y renueva estos certificados de manera automática.

    Para crear un certificado administrado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para las pruebas.

    Si deseas crear un recurso de certificado SSL administrado por Google, haz lo siguiente:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --domains DOMAIN
    

    Si deseas crear un recurso de certificado SSL autoadministrado, haz lo siguiente:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
    

  6. Crea un proxy HTTP(S) de destino para enrutar las solicitudes a tu mapa de URL.

    Para un balanceador de cargas de HTTPS, crea un proxy HTTPS de destino. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas de HTTPS, por lo que también debes cargar el certificado en este paso.

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
        --ssl-certificates=SSL_CERTIFICATE_NAME \
        --url-map=URL_MAP_NAME
    

  7. Crea una regla de reenvío global para enrutar las solicitudes entrantes al proxy.

    Para un balanceador de cargas de HTTPS, ingresa el siguiente comando:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
        --address=example-ip \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

Actualiza los registros DNS del dominio para usar la dirección IP del balanceador de cargas

Si aún no lo hiciste, actualiza el registro A o AAAA de DNS del dominio para que apunte a la dirección IP del balanceador de cargas, a fin de que el tráfico que se envía a las URL del dominio personalizado existente se enrute, en su lugar, mediante el balanceador de cargas.

Por ejemplo, si tienes un dominio personalizado de example.com, y todos tus servicios se mapean a este dominio, debes actualizar el registro A o AAAA de DNS para que example.com apunte a la dirección IP del balanceador de cargas.

Antes de actualizar los registros DNS, puedes probar la configuración de manera local si fuerzas la resolución de DNS local del dominio personalizado a la dirección IP del balanceador de cargas. Si deseas realizar una prueba local, modifica el archivo /etc/hosts/ en tu máquina local para apuntar example.com a la dirección IP del balanceador de cargas o usa la marca curl --resolve a fin de forzar a curl a usar la dirección IP del balanceador de cargas en la solicitud.

Cuando el registro DNS de example.com se resuelve en la dirección IP del balanceador de cargas de HTTPS, las solicitudes enviadas a example.com comienzan a enrutarse a través del balanceador de cargas. El balanceador de cargas las envía al servicio de backend pertinente según su mapa de URL. Además, si el servicio de backend está configurado con una máscara de URL, el NEG sin servidores usa la máscara para enrutar la solicitud al servicio de Cloud Run (completamente administrado), Cloud Functions o App Engine adecuado.

Si usas certificados administrados por Google, la migración de un servicio existente a un balanceador de cargas de HTTP(S) externo puede generar cierto tiempo de inactividad, que suele ser de menos de una hora. Esto se debe a que el certificado SSL del balanceador de cargas de HTTP(S) externo no se aprovisionará hasta que actualices los registros DNS para que apunten a la dirección IP del balanceador de cargas.

Prueba el balanceador de cargas

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. En el caso de un balanceador de cargas de HTTPS, puedes probar tu balanceador de cargas mediante un navegador web en https://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Deberías dirigirte a la página principal del servicio 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.

    Si usaste un certificado autofirmado para las pruebas, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado. Haz clic en la advertencia para ver la página real.

  5. Para verificar las respuestas almacenadas en caché, usa curl desde la línea de comandos de la máquina local. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

    curl -v -o/dev/null https://IP_ADDRESS
    

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

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    Si usas un certificado autofirmado, también debes especificar la marca -k. La opción -k de curl permite que curl funcione si tienes un certificado autofirmado. Solo debes usar el parámetro -k para probar tu propio sitio. En circunstancias normales, un certificado válido es una medida de seguridad importante y no se deben ignorar sus advertencias.

    El resultado debe contener los encabezados personalizados Cache-ID y Cache-Status que configuraste para indicar si la respuesta se entregó desde la caché:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    El resultado contiene los encabezados de respuesta que indican que hubo un acierto de caché, lo que significa que el recurso estático de la app sin servidores se entregó al usuario desde una caché perimetral de Cloud CDN.

    El encabezado cache-status indica el valor disabled para las respuestas que no se almacenan en caché en Cloud CDN. Para las respuestas almacenadas en caché, el valor del encabezado cache-status es hit, miss o revalidated.

Inhabilita Cloud CDN

Console

Inhabilita Cloud CDN para un solo servicio 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 servicios de backend que deseas que dejen de usar Cloud CDN.
  4. Haz clic en Actualizar.

Quita Cloud CDN de todos los servicios 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-services update BACKEND_SERVICE_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