Es habitual enviar contenido HTTP y HTTPS a través del mismo nombre de host cuando se usa Cloud CDN. Aunque muchos navegadores aplican el uso de Seguridad en la capa de transporte (TLS) y no permiten la entrega de contenido no seguro, sigue habiendo casos en los que se debe permitir la entrega segura y no segura en el mismo nombre de host. En este artículo se explica cómo puedes conseguir esta funcionalidad con Cloud CDN.
Reto
Cuando un cliente establece una conexión con un servidor perimetral de una CDN, se negocia el protocolo de entrega del usuario final. La mayoría de las plataformas de CDN convencionales dirigen el tráfico a su respectiva cobertura de entrega de la siguiente forma:
- Apuntando a un nombre de dominio que pertenece a la CDN mediante un registro CNAME de DNS.
- Dirigir el tráfico a un subconjunto de servidores que admitan la negociación de TLS para ese nombre de dominio.
Como Cloud CDN se integra con Cloud Load Balancing, su enfoque es diferente al de las CDNs convencionales. Cloud CDN aprovecha la dirección IP Anycast del balanceador de carga de aplicaciones externo. Al configurar Cloud CDN, tiene una dirección IP específica a la que dirigir el tráfico. Para ello, debes crear un registro A (para IPv4) o AAAA (para IPv6) en tu registro DNS, en lugar de un registro CNAME con un valor de nombre de host.
De forma predeterminada, al configurar el frontend del balanceador de carga, se asigna dinámicamente una dirección IP efímera.Google Cloud Como debe configurar las configuraciones HTTP y HTTPS por separado, puede que tenga dos direcciones IP para su instancia de Cloud CDN. Como la misma dirección IP del registro A o AAAA es para HTTP y HTTPS, no es posible gestionar este caso correctamente en el DNS.
Solución
Cuando se envía contenido seguro y no seguro a través del mismo nombre de host, el cliente se dirige a un servidor perimetral que puede negociar HTTP o HTTPS. Para que funcione con Cloud CDN, puedes reservar una dirección IP y vincularla a la configuración de frontend HTTP y HTTPS del balanceador de carga de aplicaciones externo.
En el diagrama:
- Las solicitudes entrantes de www.example.com proceden de clientes que usan HTTP/2, HTTPS y HTTP.
Se reservan dos direcciones IP, una para IPv4 y otra para IPv6:
- 34.95.111.204
- [2600:1901:0:b13e::]
Estas dos direcciones IP están vinculadas a www.example.com en Cloud DNS.
Al configurar el balanceador de carga de aplicaciones externo, la configuración de frontend incluye cuatro reglas de reenvío que usan las direcciones IP reservadas:
Nombre Protocolo IP:Puerto ipv4-http HTTP 34.95.111.204:80 ipv4-https HTTPS 34.95.111.204:443 ipv6-http HTTP [2600:1901:0:b13e::]:80 ipv6-https HTTPS [2600:1901:0:b13e::]:443 En el caso de los fallos de caché de Cloud CDN, el balanceador de carga distribuye las solicitudes a los orígenes de backend en función de los ajustes definidos en el mapa de URLs del balanceador de carga.
Paso 1: Reserva una dirección IP externa global
Crea una dirección IPv4 o IPv6 (o ambas). Para admitir direcciones IPv4 e IPv6, debes crear una dirección IPv4 y una dirección IPv6.
En tu registro DNS,crea un registro A (o AAAA) para dirigir el tráfico a esta dirección IP reservada.
Consola
- En la Google Cloud consola, ve a la página Direcciones IP externas.
- Haz clic en Reservar dirección estática para reservar una dirección IPv4.
- Asigne un Nombre de
ipv4-address
. - Configure el nivel de red como Premium.
- Configura IPv4 (versión de IP) como IPv4.
- En Tipo, seleccione Global.
- Haz clic en Reservar.
El balanceador de carga usa la red de nivel Premium, tal como se requiere cuando Cloud CDN está habilitado.
gcloud
gcloud compute addresses create ipv4-address \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Repite este paso para IPv6.
Para obtener más información, consulta el artículo sobre cómo reservar una dirección IP externa estática.
Paso 2: Enlaza la dirección IP reservada con el balanceador de carga
En esta sección se muestra cómo asignar las direcciones IP a tu balanceador de carga. Las instrucciones completas para configurar el balanceador de carga no se incluyen en este artículo. Para ver un ejemplo de configuración, consulta Crear un balanceador de carga HTTPS.
La sección de configuración de frontend te permite seleccionar el protocolo que se usa entre el cliente y el balanceador de carga.
En este ejemplo, se usan tanto HTTP como HTTPS entre el cliente y el balanceador de carga, por lo que necesitas uno o varios recursos de certificado SSL para configurar el proxy.
Consola
Configurar la regla de reenvío HTTP
- En la Google Cloud consola, ve a la página Balanceo de carga.
- Selecciona el balanceador de carga y haz clic en Editar.
- En el panel de la izquierda, haz clic en Configuración de frontend.
- En el campo Name (Nombre), introduce
ipv4-http
. - En el campo Protocol (Protocolo), selecciona
HTTP
. - Configura Versión de IP como
IPv4
. - En Dirección IP, selecciona
ipv4-address
, que has creado anteriormente. - Asegúrate de que el Puerto esté configurado como
80
para permitir el tráfico HTTP. - Haz clic en Listo.
Configurar la regla de reenvío HTTPS
- En la Google Cloud consola, ve a la página Balanceo de carga.
- Selecciona el balanceador de carga y haz clic en Editar.
- En el panel de la izquierda, haz clic en Configuración de frontend.
- En el campo Name (Nombre), introduce
ipv4-https
. - En el campo Protocol (Protocolo), selecciona
HTTPS
. - Configura Versión de IP como
IPv4
. - En Dirección IP, selecciona
ipv4-address
, que has creado anteriormente. - Asegúrate de que el Puerto esté configurado como
443
para permitir el tráfico HTTP. - Haz clic en la lista desplegable Certificado.
- Si ya tienes un recurso de certificado SSL autogestionado que quieras usar como certificado SSL principal, selecciónalo en el menú desplegable.
- De lo contrario, selecciona Crear un certificado.
- Selecciona Subir mi certificado o Crear certificado gestionado por Google.
- Si has seleccionado Subir mi certificado, sigue estos pasos.
- Escribe un nombre de
www-ssl-cert
. - En los campos correspondientes, sube tu certificado de clave pública (archivo .crt), tu cadena de certificados (archivo .csr) y tu clave privada (archivo .key).
- Haz clic en Crear.
- Escribe un nombre de
- Si eliges Crear certificado gestionado por Google, introduce un dominio.
- Para añadir recursos de certificado además del recurso de certificado SSL principal, sigue estos pasos:
- Haz clic en Añadir certificado.
- Selecciona un certificado de la lista Certificados o haz clic en Crear un certificado y sigue las instrucciones que se indican más arriba.
- Haz clic en Listo.
Repite estos pasos para IPv6.
Revisar y finalizar
- En el panel de la izquierda, 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 proxy HTTP de destino para enrutar las solicitudes a tu mapa de URLs.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map
Crea un proxy HTTPS de destino para enrutar las solicitudes a tu mapa de URLs. El proxy es la parte del balanceador de carga que contiene el certificado SSL para el balanceo de carga HTTPS, por lo que también debes cargar tu certificado en este paso.
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map --ssl-certificates=www-ssl-cert
Crea dos reglas de reenvío globales para enrutar las solicitudes entrantes al proxy, una para cada una de las direcciones IP que hayas creado.
-
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 ipv4-http \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
gcloud compute forwarding-rules create ipv4-https \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
Después de crear las reglas de reenvío globales, la configuración puede tardar varios minutos en propagarse por todo el mundo.
Paso 3: Crea un registro A o AAAA en tu archivo de zona DNS
El último paso del proceso consiste en crear un registro A o AAAA en el archivo de tu zona DNS para que apunte a Cloud CDN, donde el valor de tu nombre de host responderá con las direcciones IP reservadas que hayas asignado en el balanceador de carga.
Ahora puede servir contenido HTTP y HTTPS a través del mismo nombre de host mediante Cloud CDN.
Opcional: Redirigir de HTTP a HTTPS
Si quieres redirigir las solicitudes HTTP a tu balanceador de carga HTTPS, debes añadir un balanceador de carga HTTP parcial que tenga un frontend, pero no backends. El frontend recibe las solicitudes y las redirige al balanceador de carga HTTPS. Para ello, usa lo siguiente:
- Una regla de reenvío con la misma dirección IP externa reservada que usa tu balanceador de carga HTTPS, tal como se muestra en esta página.
- Un proxy HTTP de destino, como se muestra en esta página.
- Un mapa de URLs que redirige el tráfico al balanceador de carga HTTPS.
Obtener asistencia
Si tienes alguna pregunta sobre Google Cloud y Cloud CDN, ponte en contacto con tu Google Cloud equipo de Ventas o a través del Google Cloudcanal de Slack de la comunidad y publica una nota en el canal #cloud-cdn.
Siguientes pasos
- Para obtener información sobre el contenido que se almacena en caché, consulta Detalles del almacenamiento en caché.
- Para solucionar problemas con el balanceador de carga, consulta la página de solución de problemas del balanceador de carga.
- Para resolver problemas de Cloud CDN, consulta la página de solución de problemas de Cloud CDN.
- Para obtener información sobre cómo usar Cloud CDN en GKE, consulta la página Funciones de Cloud CDN en Ingress.
- Para comprobar si Cloud CDN está sirviendo respuestas desde la caché, consulta los registros.
- Limpiar la configuración del balanceador de carga.