Es común entregar contenido HTTP y HTTPS con el mismo nombre de host cuando se usa Cloud CDN. Si bien muchos navegadores implementan el uso de la seguridad de la capa de transporte (TLS) e inhabilitan la entrega de contenido no seguro, todavía hay casos de uso en los que la entrega no segura y la segura se deben permitir en el mismo nombre de host. En este artículo, se explica cómo puedes lograr esta funcionalidad mediante Cloud CDN.
Desafío
Cuando un cliente establece una conexión con un servidor periférico de 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 huella de entrega respectiva de la siguiente manera:
- Apuntan a un nombre de dominio que pertenece a la CDN mediante un registro CNAME de DNS.
- Enrutan el tráfico a un subconjunto de servidores que admite la negociación TLS para ese nombre de dominio.
Debido a que Cloud CDN se integra a Cloud Load Balancing, el enfoque de Cloud CDN difiere del enfoque de las CDN convencionales. Cloud CDN aprovecha la dirección IP Anycast del balanceador de cargas de aplicaciones externo. Cuando configuras Cloud CDN, tienes una dirección IP específica a la que dirigir el tráfico. Esto requiere una construcción de un registro A (destinado a IPv4) o AAAA (para IPv6) en el registro DNS, en lugar de un registro CNAME con un valor de nombre de host.
De forma predeterminada, cuando se configura el frontend del balanceador de cargas, Google Cloud asigna de manera dinámica una dirección IP efímera. Ya que necesitas establecer la configuración de HTTP y HTTPS por separado, esto puede provocar que tengas dos direcciones IP para la instancia de Cloud CDN. Debido a que la misma dirección IP de registro A o AAAA es para HTTP y HTTPS, no es posible controlar de forma correcta este caso en DNS.
Solución
Cuando se entrega 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 hacer este trabajo con Cloud CDN, puedes reservar una dirección IP y vincular la dirección IP reservada a la configuración del frontend de HTTP y HTTPS en el balanceador de cargas de aplicaciones externo.
En el diagrama, se muestra lo siguiente:
- Las solicitudes entrantes para www.example.com provienen de clientes que usan HTTP/2, HTTPS y HTTP.
Hay dos direcciones IP reservadas, 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.
Cuando se configura el balanceador de cargas 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 Para los errores de caché en Cloud CDN, el balanceador de cargas distribuye las solicitudes a los orígenes del backend, según la configuración definida en el mapa de URL del balanceador de cargas.
Paso 1: reserva una dirección IP externa global
Crea una dirección IPv4 o IPv6 (o ambas). Para admitir la dirección IPv4 e IPv6, debes crear una dirección IPv4 y una IPv6.
En el registro DNS, crea un registro A (o AAAA) para dirigir el tráfico a esta dirección IP reservada.
Console
- En la consola de Google Cloud, ve a la página Direcciones IP externas.
- Haz clic en Reservar dirección estática para reservar una dirección IPv4.
- Asigna un Nombre de
ipv4-address
. - Establece el nivel de red en Premium.
- Configura la Versión de IP como IPv4.
- Configura el Tipo como Global.
- Haz clic en Reservar.
El balanceador de cargas usa las herramientas de redes de nivel Premium, según sea necesario cuando Cloud CDN está habilitado.
gcloud
gcloud compute addresses create ipv4-address \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Toma nota de la dirección IPv4 que se reservó:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Repite este paso para IPv6.
Para obtener más información, consulta Reserva una dirección IP externa estática nueva.
Paso 2: vincula la dirección IP reservada al balanceador de cargas
En esta sección, se muestra cómo asignar las direcciones IP al balanceador de cargas. Las instrucciones de extremo a extremo para configurar el balanceador de cargas exceden el alcance de este artículo. Para ver una configuración de ejemplo, consulta Crea un balanceador de cargas de HTTPS.
La sección de configuración de frontend te permite seleccionar el protocolo que se usará entre el cliente y el balanceador de cargas.
En este ejemplo, se usan HTTP y HTTPS entre el cliente y el balanceador de cargas, por lo que se necesita uno o más recursos de certificado SSL para configurar el proxy.
Console
Configura la regla de reenvío de HTTP
- En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Selecciona el balanceador de cargas y haz clic en Editar.
- En el panel izquierdo, haz clic en Configuración de frontend.
- En el campo Nombre, ingresa
ipv4-http
. - En el campo Protocolo, selecciona
HTTP
. - Establece la Versión de IP como
IPv4
. - En Dirección IP, selecciona
ipv4-address
, que creaste antes. - Asegúrate de que el Puerto esté establecido en
80
para permitir el tráfico HTTP. - Haz clic en Listo.
Configura la regla de reenvío de HTTPS
- En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Selecciona el balanceador de cargas y haz clic en Editar.
- En el panel izquierdo, haz clic en Configuración de frontend.
- En el campo Nombre, ingresa
ipv4-https
. - En el campo Protocolo, selecciona
HTTPS
. - Establece la Versión de IP como
IPv4
. - En Dirección IP, selecciona
ipv4-address
, que creaste antes. - Asegúrate de que el Puerto esté establecido en
443
para permitir el tráfico HTTP. - Haz clic en la lista desplegable Certificado.
- Si ya tienes un recurso de certificado SSL autoadministrado que deseas usar como certificado SSL principal, selecciónalo en el menú desplegable.
- De lo contrario, selecciona Crear un nuevo certificado.
- Selecciona Subir mi certificado o Crear certificado que administra Google.
- Si seleccionaste Subir certificado, completa estos pasos.
- En Nombre, ingresa
www-ssl-cert
. - En los campos correspondientes, sube el Certificado de clave pública (archivo .crt), la Cadena de certificados (archivo .csr) y la Clave privada (archivo .key).
- Haz clic en Crear.
- En Nombre, ingresa
- Si seleccionas Crear certificado administrado por Google, ingresa un Dominio.
- Para agregar otros recursos de certificado, además del recurso de certificado SSL principal, haz lo siguiente:
- Haz clic en Agregar certificado.
- Selecciona un certificado de la lista Certificados o haz clic en Crear un certificado nuevo y sigue las instrucciones anteriores.
- Haz clic en Listo.
Repite estos pasos para IPv6.
Revisión y finalización
- En el panel izquierdo, haz clic en Revisar y finalizar.
- Compara tu configuración con lo que pretendías crear.
- Si todo parece correcto, haz clic en Actualizar.
gcloud
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
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 --ssl-certificates=www-ssl-cert
Crea dos reglas de reenvío globales a fin de enrutar las solicitudes entrantes al proxy, una para cada una de las direcciones IP que creaste.
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
load-balancing-scheme=EXTERNAL_MANAGED
. Esta configuración ofrece capacidad avanzada de administración de tráfico. - Para un balanceador de cargas de aplicaciones 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
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
Después de crear las reglas de reenvío globales, la configuración puede tomar varios minutos en propagarse a nivel mundial.
Paso 3: crea un registro A o AAAA en el archivo de la zona DNS
El último paso del proceso es crear un registro A o AAAA en el archivo de la zona DNS para apuntar a Cloud CDN, en el que el valor de nombre de host responderá con las direcciones IP reservadas que asignaste al balanceador de cargas.
Ahora puedes entregar HTTP y HTTPS en el mismo nombre de host a través de Cloud CDN.
Redireccionamiento de HTTP a HTTPS (opcional)
Si deseas redireccionar las solicitudes HTTP al balanceador de cargas de HTTPS, debes agregar un balanceador de cargas de HTTP parcial que tenga un frontend, pero ningún backend. El frontend recibe solicitudes y, luego, las redirecciona al balanceador de cargas de HTTPS. Para ello, se usan los siguientes elementos:
- Una regla de reenvío con la misma dirección IP externa reservada que usa el balanceador de cargas de HTTPS, como se muestra en esta página
- Un proxy HTTP de destino, como se muestra en esta página
- Un mapa de URL que redirecciona el tráfico al balanceador de cargas de HTTPS
Obtén asistencia
Si tienes preguntas sobre Google Cloud y Cloud CDN, comunícate con el equipo de Ventas de Google Cloud o accede al canal de la comunidad de Slack de Google Cloud y publica una nota en el canal #cloud-cdn.
Próximos pasos
- Para obtener detalles sobre qué contenido se almacena en caché, consulta Detalles del almacenamiento en caché.
- Para resolver problemas de balanceador de cargas, consulta la página de solución de problemas del balanceador de cargas.
- Para resolver problemas de Cloud CDN, consulta la página Solución de problemas de Cloud CDN.
- Para obtener información sobre el uso de Cloud CDN en GKE, consulta Cloud CDN en la página de funciones de Ingress.
- Para verificar si Cloud CDN entrega respuestas desde la caché, consulta Visualiza registros.
- Limpia la configuración del balanceador de cargas.