Configura Cloud CDN con un grupo de instancias administrado

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. Los balanceadores de cargas de HTTP(S) externos globales pueden tener varios tipos de instancias de backend, y puedes elegir en qué backends (o en qué 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 y un backend de Compute Engine con Cloud CDN habilitado. El balanceador de cargas tiene los siguientes recursos:

En esta guía de configuración, se muestra cómo crear un balanceador de cargas HTTP(S) externo y un backend de Compute Engine con los siguientes recursos:

Si este ejemplo no coincide con tu caso de uso, consulta una de las siguientes páginas:

Para conocer los conceptos generales, consulta la Descripción general del balanceo de cargas de HTTP(S) externo.

Topologías de balanceador de cargas

Para un balanceador de cargas HTTPS, crea la configuración que se ilustra en el siguiente diagrama.

Balanceador de cargas HTTPS con un backend de Compute Engine (haz clic para ampliar)
Balanceador de cargas HTTPS con un backend de Compute Engine (haz clic para ampliar)

Para un balanceador de cargas HTTP, crea la configuración que se ilustra en el siguiente diagrama.

Balanceador de cargas HTTP con un backend de Compute Engine (haz clic para ampliar)
Balanceador de cargas HTTP con un backend de Compute Engine (haz clic para ampliar)

La secuencia de eventos de los diagramas es la siguiente:

  1. Un cliente envía una solicitud de contenido a la dirección IPv4 externa que se define en la regla de reenvío.
  2. El balanceador de cargas verifica si la solicitud se puede entregar desde la caché. Si es así, el balanceador de cargas entrega el contenido solicitado fuera de la caché. De lo contrario, el procesamiento continúa.

  3. Para un balanceador de cargas HTTPS, la regla de reenvío dirige la solicitud al proxy HTTPS de destino.

    Para un balanceador de cargas HTTP, la regla de reenvío dirige la solicitud al proxy HTTP de destino.

  4. El proxy de destino usa la regla en el mapa de URL para determinar si un único servicio de backend recibe todas las solicitudes.

  5. El balanceador de cargas determina que el servicio de backend tiene solo un grupo de instancias y dirige la solicitud a una instancia de máquina virtual (VM) en ese grupo.

  6. La VM entrega el contenido que solicitó el usuario.

Balanceo de cargas HTTP(S) con un backend de Compute Engine y Cloud CDN habilitados (haz clic para ampliar)
Balanceo de cargas HTTP(S) con un backend de Compute Engine y Cloud CDN habilitados (haz clic para ampliar)

Antes de comenzar

Asegúrate de que tu configuración cumpla con los requisitos previos.

Configura un recurso de certificado SSL

Para un balanceador de cargas HTTPS, crea un recurso de certificado SSL como se describe a continuación:

Recomendamos que uses un certificado administrado por Google.

En este ejemplo, se supone que ya tienes un recurso de certificado SSL llamado www-ssl-cert.

Configura los permisos

A fin de completar los pasos de esta guía, debes tener permiso para crear instancias de Compute Engine, reglas de firewall y direcciones IP reservadas en un proyecto. Debes tener la función de propietario o editor del proyecto, o las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear instancias Administrador de instancias
Agregar y quitar reglas de firewall Administrador de seguridad
Crear componentes del balanceador de cargas Administrador de redes
Crear un proyecto (opcional) Creador de proyectos

Si deseas obtener más información, consulta las siguientes guías:

Crea un grupo de instancias administrado

Para configurar un balanceador de cargas con un backend de Compute Engine, tus VM deben estar en un grupo de instancias. En esta guía, se describe cómo crear un grupo de instancias administrado con las VM de Linux en las que se ejecuta Apache y, luego, configurar el balanceo de cargas. Un grupo de instancias administrado crea cada una de sus instancias administradas según las plantillas de instancias que especifiques.

El grupo de instancias administrado proporciona VM que ejecutan los servidores de backend de un balanceador de cargas de HTTP(S) externo. A modo de demostración, los backends entregan sus propios nombres de host.

Antes de crear un grupo de instancias administrado, crea una plantilla de instancias.

Console

  1. En Cloud Console, ve a la página Plantillas de instancias.

    Ir a Plantillas de instancia

  2. Haga clic en Crear plantilla de instancias.

  3. En Nombre, ingresa lb-backend-template.

  4. Asegúrate de que el disco de arranque esté establecido en una imagen de Debian, como Debian GNU/Linux 9 (stretch). En estas instrucciones, se usan comandos que solo están disponibles en Debian, como apt-get.

  5. No configures la opción Firewall.

    Debido a que el balanceador de cargas HTTP(S) externo es un proxy, no es necesario seleccionar Permitir tráfico HTTPS ni Permitir tráfico HTTP en Firewall. En Configura una regla de firewall, debes crear la única regla de firewall necesaria para este balanceador de cargas.

  6. En Administración, seguridad, discos, redes, usuario único, en la pestaña Administración, inserta la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.

    #! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    sudo echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  7. En la pestaña Herramientas de redes, agrega las siguientes etiquetas de red: allow-health-check

  8. Haga clic en Crear.

gcloud

  1. Crea la plantilla.

    gcloud compute instance-templates create TEMPLATE_NAME \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo vm_hostname="$(curl -H "Metadata-Flavor:Google" \
       http://169.254.169.254/computeMetadata/v1/instance/name)"
       sudo echo "Page served from: $vm_hostname" | \
       tee /var/www/html/index.html
       sudo systemctl restart apache2'
    

Crea el grupo de instancias administrado y selecciona la plantilla de instancias.

Console

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

    Ir a la página Grupos de instancias

  2. Haga clic en Crear grupo de instancias.
  3. A la izquierda, elige Nuevo grupo de instancias administrado (sin estado).
  4. En Nombre, ingresa lb-backend-example.
  5. En Ubicación, selecciona Zona única.
  6. En Región, selecciona tu región preferida. En este ejemplo, se usa us-east1.
  7. En Zona, selecciona us-east1-b.
  8. En Plantilla de instancias, selecciona la plantilla de instancias lb-backend-template.
  9. En Modo de ajuste de escala automático, selecciona Sin ajuste de escala automático.
  10. En Cantidad de instancias, ingresa 2.
  11. Para crear el grupo de instancias nuevo, haz clic en Crear.

gcloud

  1. Crea el grupo de instancias administrado en función de la plantilla.

    gcloud compute instance-groups managed create lb-backend-example \
    --template=TEMPLATE_NAME --size=2 --zone=us-east1-b
    

Agrega un puerto con nombre al grupo de instancias

En el grupo de instancias, define un servicio HTTP y mapea un nombre de puerto al puerto pertinente. El servicio de balanceo de cargas reenvía el tráfico al puerto especificado.

Console

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

    Ir a la página Grupos de instancias

  2. Haz clic en el nombre del grupo de instancias (en este ejemplo, lb-backend-example).
  3. En la página Descripción general del grupo de instancias, haz clic en Editar .
  4. Haz clic en Especificar la asignación del nombre de puerto.
  5. Haz clic en Agregar elemento.
  6. En el nombre de puerto, ingresa http. En el número de puerto, ingresa 80.
  7. Haz clic en Guardar.

gcloud

Usa el comando gcloud compute instance-groups set-named-ports.

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone us-east1-b

Configura una regla de firewall

En este ejemplo, se crea la regla de firewall fw-allow-health-check. Esta es una regla de entrada que permite el tráfico de los sistemas de verificación de estado de Google Cloud (130.211.0.0/2235.191.0.0/16). En este ejemplo, se usa la etiqueta de destino allow-health-check para identificar las VM.

Console

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

    Ir a la página Firewall

  2. Haz clic en Crear regla de firewall para crear la segunda regla de firewall:
  3. En Nombre, ingresa fw-allow-health-check.
  4. En Red, selecciona Predeterminado.
  5. En Destinos, selecciona Etiquetas de destino especificadas.
  6. Propaga el campo Etiquetas de destino con allow-health-check.
  7. Configura Filtro de fuente como Rangos de IPv4.
  8. Establece Rangos de IPv4 de origen en 130.211.0.0/2235.191.0.0/16.
  9. En Protocolos y puertos, selecciona Protocolos y puertos especificados.
  10. Selecciona la casilla de verificación tcp y, luego, escribe 80 para los números de puerto.
  11. Haz clic en Crear.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

Reserva una dirección IP externa

Ahora que tus instancias están en funcionamiento, configura una dirección IP externa, estática y global que tus clientes usarán para llegar al balanceador de cargas.

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. En Nombre, ingresa lb-ipv4-1.
  4. En Nivel de servicio de red, establece Premium.
  5. Configura Versión de IP como IPv4.
  6. Establece Tipo en Global.
  7. Haz clic en Reservar.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

Préstale atención a la dirección IPv4 que estaba reservada:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Configura el balanceador de cargas

En este ejemplo, se usa HTTP o HTTPS entre el cliente y el balanceador de cargas. Para HTTPS, necesitas uno o más recursos de certificado SSL a fin de configurar el proxy. Recomendamos que uses un certificado administrado por Google.

Incluso si usas HTTPS en el frontend, puedes usar HTTP en el backend. Google encripta de forma automática el tráfico entre Google Front Ends (GFE) y los backends que residen en las redes de VPC de Google Cloud.

Console

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

    Ir a 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. En Administración avanzada del tráfico, selecciona Balanceador de cargas de HTTP(S) clásico.
  5. Haga clic en Continuar.
  6. En el campo Nombre del balanceador de cargas, ingresa algo como web-map-https o web-map-http.
  7. Haga clic en Configuración de backend.
    1. En Crear o seleccionar servicios y buckets de backend, selecciona Servicios de backend > Crear un servicio de backend.
    2. Agrega un nombre al servicio de backend, como web-backend-service.
    3. En Protocolo, selecciona HTTP.
    4. En Puerto con nombre, ingresa http.
    5. En Backends > Nuevo backend > Grupo de instancias, selecciona el grupo de instancias lb-backend-example.
    6. En Números de puerto, ingresa 80.
    7. Mantén la configuración predeterminada.
    8. En Verificación de estado, selecciona Crear una verificación de estado y, luego, agrega un nombre para la verificación de estado, como http-basic-check.
    9. Configura el protocolo como HTTP y, luego, haz clic en Guardar y continuar.
    10. Selecciona Habilitar Cloud CDN.
    11. Modifica la configuración del modo de almacenamiento en caché y de TTL (opcional).
    12. Mantén la configuración predeterminada.
    13. Haz clic en Crear.
  8. En Reglas de host y de ruta de acceso, mantén la configuración predeterminada.
  9. En Configuración de frontend, usa los siguientes valores:
    1. Configura el campo Protocolo como HTTPS o HTTP.
    2. Configura el campo Dirección IP como lb-ipv4-1 (la que creaste antes).
    3. Asegúrate de que el valor de Puerto esté configurado como 443 para permitir el tráfico HTTPS, o bien 80 para el tráfico HTTP.
    4. Si seleccionaste HTTPS, haz lo siguiente:
      1. Haz clic en Certificado y selecciona tu certificado SSL principal.
      2. Selecciona la casilla de verificación Habilitar el redireccionamiento HTTP a HTTPS para habilitar los redireccionamientos del puerto 80 al puerto 443 (opcional).

        Si habilitas esta casilla de verificación, se creará un balanceador de cargas de HTTP parcial adicional que usa la misma dirección IP que tu balanceador de cargas de HTTPS y redirecciona las solicitudes HTTP entrantes al frontend de HTTPS del balanceador de cargas.

        Esta casilla de verificación solo se puede seleccionar cuando se selecciona el protocolo HTTPS y se usa una dirección IP reservada.

    5. Haga clic en Listo.
  10. Haga clic en Revisar y finalizar.
  11. Cuando termines de configurar el balanceador de cargas, haz clic en Crear.
  12. Espere a que se cree el balanceador de cargas.

    Si creaste un balanceador de cargas de HTTPS y seleccionaste la casilla de verificación Habilitar el redireccionamiento de HTTP a HTTPS también verás un balanceador de cargas HTTP creado con un sufijo de redireccionamiento.

  13. Haz clic en el nombre del balanceador de cargas.
  14. En la pantalla Detalles del balanceador de cargas, toma nota del valor de IP:Puerto de tu balanceador de cargas.

gcloud

  1. Crea una verificación de estado.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Crea un servicio de backend.
        gcloud compute backend-services create web-backend-service \
            --load-balancing-scheme=EXTERNAL \
            --protocol=HTTP \
            --port-name=http \
            --health-checks=http-basic-check \
            --global
        
  3. Agrega tu grupo de instancias como backend al servicio de backend:
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. Para HTTP, crea un mapa de URL a fin de enrutar las solicitudes entrantes al servicio de backend predeterminado.
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. Para HTTPS, crea un mapa de URL a fin de enrutar las solicitudes entrantes al servicio de backend predeterminado.
        gcloud compute url-maps create web-map-https \
            --default-service web-backend-service
        

Configura un frontend de HTTPS

Omite esta sección para los balanceadores de cargas HTTP.
  1. Para HTTPS, si aún no lo hiciste, crea el recurso de certificado SSL global, como se muestra en:
  2. En el caso de HTTPS, crea un proxy HTTPS de destino para enrutar las solicitudes a tu mapa de URL. 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 https-lb-proxy \
            --url-map=web-map-https \
            --ssl-certificates=www-ssl-cert
        
  3. Para HTTPS, crea una regla de reenvío global a fin de enrutar las solicitudes entrantes al proxy.
        gcloud compute forwarding-rules create https-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        

Configura un frontend de HTTP

Omite esta sección para los balanceadores de cargas HTTPS.

  1. En el caso de HTTP, crea un proxy HTTP de destino para enrutar las solicitudes a tu mapa de URL.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map=web-map-http
        
  2. Para HTTP, crea una regla de reenvío global a fin de enrutar las solicitudes entrantes al proxy.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Habilita Cloud CDN

Si no habilitaste Cloud CDN cuando creaste tu servicio de backend, puedes hacerlo ahora si actualizas el servicio de backend.

gcloud compute backend-services update web-backend-service 
--enable-cdn
--cache-mode=CACHE_MODE

Para establecer el modo de almacenamiento en caché, reemplaza CACHE_MODE por uno de los siguientes valores:

  • CACHE_All_STATIC: Almacena en caché el contenido estático de forma automática.

  • USE_ORIGIN_HEADERS: Se requiere que se configuren encabezados de almacenamiento en caché válidos para el contenido de la caché en el origen.

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

Conecta tu dominio al balanceador de cargas

Después de crear el balanceador de cargas, toma nota de la dirección IP asociada con este: por ejemplo, 30.90.80.100. Para apuntar tu dominio al balanceador de cargas, crea un registro A mediante tu servicio de registro de dominio. Si agregaste varios dominios a tu certificado SSL, debes agregar un registro A para cada uno, que apunte a la dirección IP del balanceador de cargas. Por ejemplo, a fin de crear registros A para www.example.com y example.com:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Si usas Google Domains, consulta la página de ayuda de Google Domains para obtener más información.

Prueba el tráfico enviado a las instancias

Ahora que el servicio de balanceo de cargas está en ejecución, puedes enviar tráfico a la regla de reenvío y ver cómo este se dispersa en las diferentes instancias.

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 el balanceador de cargas que acabas de crear.
  3. En la sección Backend, confirma que las VM estén en buen estado. La columna En buen estado debe estar propagada, de modo que se indique que ambas VM están en buen estado (2/2). Si no ves esto, vuelve a cargar la página. Puede tomar unos minutos que Cloud Console indique que las VM están en buen estado. Si los backends no se muestran en buen estado después de unos minutos, revisa la configuración del firewall y la etiqueta de red asignada a tus VM de backend.
  4. Para HTTPS, si usas un certificado administrado por Google, confirma que el estado de tu recurso de certificado sea ACTIVO. Para obtener más información, consulta Estado de los recursos de certificado SSL administrado por Google.
  5. Después de que en Cloud Console se muestre que las instancias de backend están en buen estado, puedes probar tu balanceador de cargas con un navegador web en https://IP_ADDRESS (o http://IP_ADDRESS). Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas.
  6. Si usaste un certificado autofirmado para las pruebas de HTTPS, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado.
  7. El navegador debe procesar una página con contenido que muestre el nombre de la instancia que entregó la página, junto con su zona (por ejemplo, Page served from: lb-backend-example-xxxx). Si el navegador no procesa esta página, revisa las opciones de configuración que aparecen en esta guía.

gcloud

gcloud compute addresses describe lb-ipv4-1 \
   --format="get(address)" \
   --global

Después de unos minutos, puedes ejecutar el siguiente comando de curl para probar la configuración.

curl http://IP_ADDRESS

O

curl https://HOSTNAME

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 inhabilitas Cloud CDN y, luego, vuelves a habilitarlo, es posible que la mayor parte del contenido almacenado en caché, o todo el contenido, aún siga almacenado en caché. Para evitar que el contenido se entregue desde la caché, debes invalidar ese contenido.

Próximos pasos