È prassi comune distribuire contenuti HTTP e HTTPS sullo stesso nome host quando si utilizza Cloud CDN. Sebbene molti browser impongano l'utilizzo di Transport Layer Security (TLS) e non consentano la distribuzione di contenuti non sicuri, esistono ancora casi d'uso in cui la distribuzione non sicura e quella sicura devono essere consentite sullo stesso nome host. Questo articolo spiega come ottenere questa funzionalità utilizzando Cloud CDN.
La sfida
Quando un client stabilisce una connessione con un server edge CDN, viene negoziato il protocollo di distribuzione per l'utente finale. La maggior parte delle piattaforme CDN convenzionali indirizza il traffico al proprio footprint di distribuzione:
- Puntare a un nome di dominio appartenente alla CDN utilizzando un record CNAME DNS.
- Instradamento del traffico a un sottoinsieme di server che supportano la negoziazione TLS per quel nome di dominio.
Poiché Cloud CDN si integra con Cloud Load Balancing, l'approccio di Cloud CDN è diverso da quello delle CDN convenzionali. Cloud CDN sfrutta l'indirizzo IP anycast del bilanciatore del carico delle applicazioni esterno. Quando configuri Cloud CDN, hai un indirizzo IP specifico a cui indirizzare il traffico. Ciò richiede una struttura di record A (per IPv4) e/o AAAA (per IPv6) nel record DNS, anziché un record CNAME con un valore del nome host.
Per impostazione predefinita, quando configuri il frontend del bilanciatore del carico, Google Cloud assegna dinamicamente un indirizzo IP effimero. Poiché devi configurare separatamente le configurazioni HTTP e HTTPS, potresti avere due indirizzi IP per l'istanza Cloud CDN. Poiché lo stesso indirizzo IP del record A o AAAA è sia per HTTP che per HTTPS, non è possibile gestire correttamente questo caso nel DNS.
Soluzione
Quando vengono distribuiti contenuti sicuri e non sicuri sullo stesso nome host, il client viene indirizzato a un edge server in grado di negoziare HTTP o HTTPS. Per far funzionare questa configurazione con Cloud CDN, puoi prenotare un indirizzo IP e associarlo sia alla configurazione del frontend HTTP che a quella HTTPS nel bilanciatore del carico delle applicazioni esterno.
Nel diagramma:
- le richieste in entrata per www.example.com provengono da client che utilizzano HTTP/2, HTTPS e HTTP.
Sono riservati due indirizzi IP, uno per IPv4 e uno per IPv6:
- 34.95.111.204
- [2600:1901:0:b13e::]
Questi due indirizzi IP sono associati a www.example.com in Cloud DNS.
Quando configuri il bilanciatore del carico delle applicazioni esterno, la configurazione frontend include quattro regole di forwarding che utilizzano gli indirizzi IP riservati:
Nome Protocollo IP:Porta 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 Per gli errori della cache di Cloud CDN, il bilanciatore del carico distribuisce le richieste alle origini di backend in base alle impostazioni definite nella mappa URL del bilanciatore del carico.
Passaggio 1: prenota un indirizzo IP esterno globale
Crea un indirizzo IPv4 o IPv6 (o entrambi). Per supportare l'indirizzamento IPv4 e IPv6, devi creare un indirizzo IPv4 e un indirizzo IPv6.
Nel record DNS,crea un record A (o AAAA) per indirizzare il traffico a questo indirizzo IP riservato.
Console
- Nella console Google Cloud , vai alla pagina Indirizzi IP esterni.
- Fai clic su Prenota indirizzo statico per prenotare un indirizzo IPv4.
- Assegna un nome di
ipv4-address
. - Imposta il livello di rete su Premium.
- Imposta la versione IP su IPv4.
- Imposta il Tipo su Globale.
- Fai clic su Prenota.
Il bilanciatore del carico utilizza il livello di rete Premium, come richiesto quando Cloud CDN è abilitata.
gcloud
gcloud compute addresses create ipv4-address \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Prendi nota dell'indirizzo IPv4 riservato:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Ripeti questo passaggio per IPv6.
Per saperne di più, consulta Prenotazione di un nuovo indirizzo IP esterno statico.
Passaggio 2: associa l'indirizzo IP riservato al bilanciatore del carico
Questa sezione mostra come assegnare gli indirizzi IP al bilanciatore del carico. Le istruzioni end-to-end per la configurazione del bilanciatore del carico non rientrano nell'ambito di questo articolo. Per un esempio di configurazione, consulta Creazione di un bilanciatore del carico HTTPS.
La sezione di configurazione del frontend consente di selezionare il protocollo utilizzato tra il client e il bilanciatore del carico.
In questo esempio, utilizzi sia HTTP che HTTPS tra il client e il bilanciatore del carico, quindi hai bisogno di una o più risorse del certificato SSL per configurare il proxy.
Console
Configurazione della regola di forwarding HTTP
- Nella console Google Cloud , vai alla pagina Bilanciamento del carico.
- Seleziona il bilanciatore del carico e fai clic su Modifica.
- Nel riquadro a sinistra, fai clic su Configurazione frontend.
- Nel campo Nome, inserisci
ipv4-http
. - Nel campo Protocollo, seleziona
HTTP
. - Imposta Versione IP su
IPv4
. - In Indirizzo IP, seleziona
ipv4-address
, che hai creato in precedenza. - Assicurati che la Porta sia impostata su
80
per consentire il traffico HTTP. - Fai clic su Fine.
Configurazione della regola di forwarding HTTPS
- Nella console Google Cloud , vai alla pagina Bilanciamento del carico.
- Seleziona il bilanciatore del carico e fai clic su Modifica.
- Nel riquadro a sinistra, fai clic su Configurazione frontend.
- Nel campo Nome, inserisci
ipv4-https
. - Nel campo Protocollo, seleziona
HTTPS
. - Imposta Versione IP su
IPv4
. - In Indirizzo IP, seleziona
ipv4-address
, che hai creato in precedenza. - Assicurati che la Porta sia impostata su
443
per consentire il traffico HTTP. - Fai clic sul menu a discesa Certificato.
- Se hai già una risorsa certificato SSL autogestita che vuoi utilizzare come certificato SSL principale, selezionala dal menu a discesa.
- In alternativa, seleziona Crea un nuovo certificato.
- Seleziona Carica il mio certificato o Crea certificato gestito da Google.
- Se hai selezionato Carica il mio certificato, completa
questi passaggi.
- Inserisci un Nome di
www-ssl-cert
. - Nei campi appropriati, carica il certificato di chiave pubblica (file .crt), la catena di certificati (file .csr) e la chiave privata (file .key).
- Fai clic su Crea.
- Inserisci un Nome di
- Se scegli Crea certificato gestito da Google, inserisci un dominio.
- Per aggiungere risorse del certificato oltre alla risorsa del certificato SSL principale:
- Fai clic su Aggiungi certificato.
- Seleziona un certificato dall'elenco Certificati o fai clic su Crea un nuovo certificato e segui le istruzioni riportate sopra.
- Fai clic su Fine.
Ripeti questi passaggi per IPv6.
Esamina e finalizza
- Nel riquadro a sinistra, fai clic su Esamina e finalizza.
- Confronta le impostazioni con ciò che intendevi creare.
- Se è tutto corretto, fai clic su Aggiorna.
gcloud
Crea un proxy HTTP di destinazione per instradare le richieste alla mappa URL.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map
Crea un proxy HTTPS di destinazione per instradare le richieste alla mappa URL. Il proxy è la parte del bilanciatore del carico che contiene il certificato SSL per il bilanciamento del carico HTTPS, quindi devi caricare anche il tuo certificato in questo passaggio.
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map --ssl-certificates=www-ssl-cert
Crea due regole di forwarding globale per instradare le richieste in entrata al proxy, una per ogni indirizzo IP creato.
-
Per un bilanciatore del carico delle applicazioni esterno globale, utilizza il
comando gcloud CLI con
load-balancing-scheme=EXTERNAL_MANAGED
. Questa impostazione offre funzionalità di gestione del traffico avanzate. - Per un bilanciatore del carico delle applicazioni classico, utilizza
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
-
Per un bilanciatore del carico delle applicazioni esterno globale, utilizza il
comando gcloud CLI con
Dopo aver creato le regole di forwarding globali, possono trascorrere alcuni minuti prima che la configurazione venga propagata in tutto il mondo.
Passaggio 3: crea un record A o AAAA nel file della zona DNS
L'ultimo passaggio della procedura consiste nel creare un record A e/o AAAA nel file della zona DNS per indirizzare a Cloud CDN, dove il valore del nome host risponderà con gli indirizzi IP riservati che hai assegnato al bilanciamento del carico.
Ora puoi pubblicare sia HTTP che HTTPS sullo stesso nome host tramite Cloud CDN.
(Facoltativo) Reindirizzamento da HTTP a HTTPS
Se vuoi reindirizzare le richieste HTTP al bilanciatore del carico HTTPS, devi aggiungere un bilanciatore del carico HTTP parziale con un frontend, ma senza backend. Il frontend riceve le richieste e le reindirizza al bilanciatore del carico HTTPS. Per farlo, utilizza quanto segue:
- Una regola di forwarding con lo stesso indirizzo IP esterno riservato utilizzato dal bilanciatore del carico HTTPS, come mostrato in questa pagina.
- Un proxy HTTP di destinazione, come mostrato in questa pagina.
- Una mappa URL che reindirizza il traffico al bilanciatore del carico HTTPS.
Richiedere assistenza
Se hai domande su Google Cloud e Cloud CDN, contatta il tuo Google Cloud team di vendita o invia un messaggio tramite il canale Slack della communityGoogle Cloude pubblica una nota nel canale #cloud-cdn.
Passaggi successivi
- Per informazioni dettagliate sui contenuti memorizzati nella cache, consulta Dettagli sulla memorizzazione nella cache.
- Per risolvere i problemi del bilanciatore del carico, consulta la pagina di risoluzione dei problemi del bilanciatore del carico.
- Per risolvere i problemi di Cloud CDN, consulta la pagina di risoluzione dei problemi di Cloud CDN.
- Per informazioni sull'utilizzo di Cloud CDN in GKE, consulta la pagina Funzionalità Ingress di Cloud CDN.
- Per verificare se Cloud CDN gestisce le risposte dalla cache, visualizza i log.
- Pulisci la configurazione del bilanciatore del carico.