Puoi utilizzare un backend esterno quando i contenuti sono ospitati on-premise o in un altro cloud. Il backend esterno ti consente di pubblicare i contenuti da Cloud CDN di Google.
Questo documento illustra la procedura di configurazione dell'archiviazione di oggetti di terze parti, come Amazon Simple Storage Service (Amazon S3) o Azure Blob Storage, come backend esterno per Cloud CDN. I backend esterni e Cloud CDN funzionano in combinazione con un bilanciatore del carico delle applicazioni esterno.
Architettura
Per creare il backend esterno, crea un gruppo di endpoint di rete internet (NEG) che punti al servizio di archiviazione di terze parti come backend per il bilanciatore del carico. I NEG internet vengono utilizzati per i backend esterni.
Per configurare il bucket di archiviazione di terze parti come backend, devi procedere nel seguente modo:
- Prepara il bucket di archiviazione di terze parti per la pubblicazione dei contenuti.
- Crea un NEG internet che utilizzi il FQDN del bucket.
- Configura il bilanciatore del carico delle applicazioni esterno con il NEG internet come backend.
- Testa la configurazione.
Prepara il bucket per la pubblicazione dei contenuti
Prima di iniziare la configurazione in Google Cloud, assicurati che il bucket sia configurato correttamente. Queste istruzioni presuppongono che tu stia utilizzando un bucket Amazon S3 e che tu disponga delle autorizzazioni necessarie per apportare modifiche al bucket e agli oggetti Amazon S3.
Assicurati che il bucket Amazon S3 e gli oggetti al suo interno siano pubblici o che tu abbia configurato l'autenticazione dell'origine privata per il bucket Amazon S3.
Assicurati che i contenuti soddisfino i requisiti di memorizzazione nella cache elencati in Contenuti memorizzabili nella cache. Se devi aggiungere metadati degli oggetti, consulta la knowledge base di AWS, ad esempio Modifica dei metadati degli oggetti.
Quando configuri il NEG internet, avrai bisogno dell'endpoint del bucket Amazon S3 (l'FQDN). Per ottenere le informazioni sull'endpoint, segui le istruzioni riportate nella knowledge base di AWS, ad esempio Accedere a un bucket. Puoi anche ottenere l'URL dell'endpoint Amazon S3 dalla pagina Panoramica dell'oggetto.
Crea un NEG internet che utilizzi il nome host del bucket
Per semplicità, questo esempio utilizza il FQDN backend.example.com
. Assicurati di sostituirlo con il FQDN del bucket di archiviazione di terze parti, che potrebbe avere un aspetto simile a http://unique-name-bucket.s3-us-west-1.amazonaws.com/
.
Questa guida utilizza un esempio per descrivere i principi di base dell'utilizzo di un backend esterno (a volte chiamato origine personalizzata) in un bilanciatore del carico delle applicazioni esterno. Un backend esterno è un endpoint esterno a Google Cloud. Quando utilizzi un backend esterno con un bilanciatore del carico delle applicazioni esterno, puoi migliorare il rendimento utilizzando la memorizzazione nella cache di Cloud CDN.
La guida illustra la procedura per configurare un bilanciatore del carico delle applicazioni esterno globale con un servizio di backend abilitato per Cloud CDN che esegue il proxy per un server di backend esterno all'indirizzo backend.example.com
.
Nell'esempio, il bilanciatore del carico accetta le richieste HTTPS dai client e le proxy come HTTPS al backend esterno. Questo esempio presuppone che il backend esterno supporti HTTPS.
Altre opzioni sono configurare un bilanciatore del carico in modo che accetti richieste HTTP o HTTPS e utilizzare HTTPS per il proxy delle richieste al backend esterno.
Questa guida presuppone che tu abbia già configurato un bilanciatore del carico e che aggiunga un nuovo backend esterno. Per saperne di più, consulta Configurare un bilanciatore del carico delle applicazioni classico con un backend di gruppo di istanze gestite.
La Figura 1 mostra un'architettura di esempio.
Nel diagramma, www.example.com
ha un frontend del bilanciatore del carico con l'indirizzo IP 120.1.1.1
. In caso di mancata fallimento della cache, le richieste degli utenti per/cart/id/1223515
vengono recuperate dal backend esterno tramite HTTPS. Tutto
l'altro traffico in entrata viene indirizzato al servizio di backend Google Cloud con VM Compute Engine o al bucket di backend, in base alla mappa URL.
Prima di iniziare
Prima di seguire questa guida, acquisisci familiarità con quanto segue:
Panoramica dei gruppi di endpoint di rete internet, che include le limitazioni.
Autorizzazioni
Per seguire questa guida, devi creare un gruppo di endpoint di rete (NEG) internet e creare o modificare un bilanciatore del carico delle applicazioni esterno in un progetto. Devi essere un proprietario o un editor del progetto oppure devi disporre di entrambi i seguenti ruoli IAM di Compute Engine.
Attività | Ruolo richiesto |
---|---|
Creare e modificare i componenti del bilanciatore del carico | Amministratore di rete |
Creare e modificare i NEG | Amministratore istanze Compute |
Configurare un bilanciatore del carico con un backend esterno
Questa sezione mostra come configurare e testare un NEG su internet.
Panoramica della configurazione
La configurazione di un NEG internet prevede i seguenti passaggi:
- Definizione dell'endpoint internet in un NEG internet.
- Aggiunta di un NEG internet come backend a un servizio di backend.
- Definire il traffico utente da mappare a questo servizio di backend configurando la mappa URL del bilanciatore del carico delle applicazioni esterno.
- Inserire nella lista consentita gli intervalli IP necessari.
Questo esempio crea le seguenti risorse:
- Una regola di forwarding con l'indirizzo IP
120.1.1.1
indirizza le richieste in arrivo a un proxy di destinazione. - Il
networkTier
della regola di forwarding deve esserePREMIUM
. - Il proxy di destinazione controlla ogni richiesta in base alla mappa URL per determinare il servizio di backend appropriato per la richiesta.
- Per i backend esterni, il proxy di destinazione deve essere
TargetHttpProxy
oTargetHttpsProxy
. Questo esempio utilizzaTargetHttpsProxy
. - Cloud CDN abilitato (facoltativo) sul servizio di backend consente di memorizzare nella cache e pubblicare le risposte dalle cache di Cloud CDN.
- Questo esempio include un'intestazione personalizzata, che è obbligatoria quando il backend esterno si aspetta un valore specifico per l'intestazione
Host
della richiesta HTTP.
La configurazione è la seguente.
Crea il NEG e l'endpoint internet
Console
- Nella console Google Cloud, vai alla pagina Gruppi di endpoint di rete.
- Fai clic su Crea gruppo di endpoint di rete.
- Inserisci il nome del gruppo di endpoint di rete:
example-fqdn-neg
. - Per Tipo di gruppo di endpoint di rete, seleziona Gruppo di endpoint di rete (internet).
- In Porta predefinita, inserisci
443
. - In Nuovo endpoint di rete, seleziona Nome di dominio e porta completi.
- Per il FQDN, inserisci
backend.example.com
. - In Tipo di porta, seleziona Predefinito e verifica che Numero porta sia
443
. - Fai clic su Crea.
gcloud
Crea un NEG internet e imposta
--network-endpoint-type
suinternet-fqdn-port
(il nome host e la porta su cui è possibile raggiungere il backend esterno):gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global
Aggiungi il tuo endpoint al NEG. Se non viene specificata una porta, la selezione della porta è impostata su
80
(HTTP) o443
(HTTPS; HTTP/2) in base al protocollo configurato nel servizio di backend. Assicurati di includere il flag--global
:gcloud compute network-endpoint-groups update example-fqdn-neg \ --add-endpoint="fqdn=backend.example.com,port=443" \ --global
Elenca il NEG internet creato:
gcloud compute network-endpoint-groups list --global
Output:
NAME LOCATION ENDPOINT_TYPE SIZE example-fqdn-neg global INTERNET_FQDN_PORT 1
Elenca l'endpoint all'interno del NEG:
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global
Output:
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
Aggiungere un backend esterno a un bilanciatore del carico
L'esempio seguente aggiorna un bilanciatore del carico esistente.
Nel bilanciatore del carico esistente, il servizio predefinito è un servizio Google Cloud. L'esempio modifica la mappa URL esistente aggiungendo un'espressione di corrispondenza del percorso che invia tutte le richieste di cart/id/1223515
al servizio di backend images
, associato al NEG di internet.
Console
Crea il servizio di backend e aggiungi il NEG internet
- Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
- Per aggiungere il servizio di backend a un bilanciatore del carico esistente, selezionate il bilanciatore del carico delle applicazioni classico, fai clic su Menu e poi su Modifica.
- Fai clic su Configurazione backend.
- Nel menu Servizi e bucket di backend, seleziona Crea un servizio di backend.
- Imposta il nome del servizio di backend su
images
. - In Tipo di backend, seleziona Gruppo di endpoint di rete internet.
- Seleziona il protocollo che intendi utilizzare dal bilanciatore del carico al NEG internet. Per questo esempio, seleziona HTTPS.
- In Nuovo backend > Gruppo di endpoint di rete internet, seleziona
example-fqdn-neg
e poi fai clic su Fine. - Seleziona Attiva Cloud CDN.
- (Facoltativo) Modifica le impostazioni della modalità cache e del TTL.
- In Configurazioni avanzate, fai clic su Aggiungi intestazione in Intestazioni delle richieste personalizzate.
- In Nome intestazione, inserisci
Host
. - In Valore intestazione, inserisci
backend.example.com
.
- In Nome intestazione, inserisci
- Fai clic su Crea.
- Tieni aperta la finestra per continuare.
Collega il servizio di backend a una mappa URL esistente
- Fai clic su Regole host e percorso.
- La prima o le prime righe contengono i servizi Google Cloud nella colonna di destra e una di queste è già compilata con la regola predefinita
Any unmatched (default)
per Host e Percorsi. - Assicurati che nella colonna corretta sia selezionata una riga con
images
. Se non esiste, fai clic su Aggiungi regola host e percorso e selezionaimages
. Compila gli altri campi come segue:- In Host, inserisci
*
. - In Percorsi, inserisci
/cart/id/1223515
.
- In Host, inserisci
Esamina e finalizza
- Fai clic su Esamina e finalizza.
- Confronta le impostazioni con ciò che intendevi creare.
- Se è tutto a posto, fai clic su Aggiorna.
gcloud
Crea un nuovo servizio di backend per il NEG:
gcloud compute backend-services create images \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE \ --protocol=HTTP2
Imposta la modalità cache sostituendo CACHE_MODE con una delle seguenti opzioni:
CACHE_ALL_STATIC
: memorizza automaticamente nella cache i contenuti staticiUSE_ORIGIN_HEADERS
(valore predefinito): richiede all'origine di impostare intestazioni di memorizzazione nella cache valide per memorizzare nella cache i contenutiFORCE_CACHE_ALL
: memorizza nella cache tutti i contenuti, ignorando eventuali direttiveprivate
,no-store
ono-cache
negli intestazioni di rispostaCache-Control
Configura il servizio di backend in modo da aggiungere l'intestazione della richiesta personalizzata
Host: backend.example.com
alla richiesta:gcloud compute backend-services update images \ --custom-request-header "Host: backend.example.com" --global
Utilizza il comando
backend-services add-backend
per aggiungere il NEG internet al servizio di backend:gcloud compute backend-services add-backend images \ --network-endpoint-group "example-fqdn-neg" \ --global-network-endpoint-group \ --global
Collega il nuovo servizio di backend alla mappa URL del bilanciatore del carico creando una nuova regola di corrispondenza per indirizzare le richieste a quel backend:
gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \ --default-service=GCP_SERVICE_EXAMPLE \ --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \ --backend-service-path-rules=/CART/ID/1223515=IMAGES
Sostituisci quanto segue:
EXAMPLE_URL_MAP
: il nome della mappa URL esistenteGCP_SERVICE_EXAMPLE
: il nome di un servizio di backend predefinito esistenteCUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE
: il nome di questa nuova regola del percorso/CART/ID/1223515
: il percorsoIMAGES
: il nome del nuovo servizio di backend con il NEG internet collegato
Aggiungi alla lista consentita gli intervalli IP necessari
Per consentire a un bilanciatore del carico delle applicazioni esterno di inviare richieste al tuo NEG internet, devi eseguire una query sul record TXT DNS _cloud-eoips.googleusercontent.com
utilizzando uno strumento come dig
o nslookup
.
Ad esempio, esegui il seguente comando dig
:
dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
L'output contiene due intervalli IP, come segue:
34.96.0.0/20
34.127.192.0/18
Prendi nota degli intervalli IP e assicurati che siano consentiti dal firewall o dall'elenco di controllo dell'accesso (ACL) cloud.
Per ulteriori informazioni, consulta la sezione Autenticazione delle richieste.
Collegare il dominio al bilanciatore del carico
Dopo aver creato il bilanciatore del carico, prendi nota dell'indirizzo IP associato al bilanciatore del carico, ad esempio 30.90.80.100
. Per indirizzare il tuo dominio al bilanciatore del carico, crea un record A
utilizzando il servizio di registrazione del dominio. Se
hai aggiunto più domini al tuo certificato SSL, devi aggiungere un record A
per ciascuno, che rimandi all'indirizzo IP del bilanciatore del carico. Ad esempio, per creare record A
per www.example.com
e example.com
, utilizza quanto segue:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Se utilizzi Cloud DNS come provider DNS, consulta Aggiungere, modificare ed eliminare record.
Testa il bilanciatore del carico delle applicazioni esterno
Ora che hai configurato il bilanciatore del carico, puoi iniziare a inviare traffico al suo indirizzo IP. Se hai configurato un dominio, puoi anche inviare traffico al nome di dominio. Tuttavia, la propagazione DNS può richiedere del tempo per essere completata, quindi puoi iniziare utilizzando l'indirizzo IP per i test.
Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
Fai clic sul bilanciatore del carico che hai appena creato.
Prendi nota dell'indirizzo IP del bilanciatore del carico.
Se hai creato un bilanciatore del carico HTTP, puoi testarlo utilizzando un browser web all'indirizzo
http://IP_ADDRESS
. SostituisciIP_ADDRESS
con l'indirizzo IP del bilanciatore del carico. Dovresti visualizzare la home page del serviziohelloworld
.Se hai creato un bilanciatore del carico HTTPS, puoi testarlo utilizzando un browser web all'indirizzo
https://IP_ADDRESS
. SostituisciIP_ADDRESS
con l'indirizzo IP del bilanciatore del carico. Dovresti visualizzare la home page del serviziohelloworld
.Se il problema persiste e utilizzi un certificato gestito da Google, verifica che lo stato della risorsa del certificato sia ACTIVE. Per ulteriori informazioni, consulta lo stato della risorsa del certificato SSL gestito da Google.
In alternativa, puoi utilizzare
curl
dalla riga di comando della tua macchina locale. SostituisciIP_ADDRESS
con l'indirizzo IPv4 del bilanciatore del carico.Se utilizzi un certificato gestito da Google, testa il dominio che rimanda all'indirizzo IP del bilanciatore del carico. Ad esempio:
curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
(Facoltativo) Se utilizzi un dominio personalizzato, potrebbe essere necessario attendere la propagazione delle impostazioni DNS aggiornate. Quindi, testa il tuo dominio (ad esempio,
backend.example.com
) nel browser web.Per assistenza nella risoluzione dei problemi, consulta la sezione Risoluzione dei problemi relativi a NEG di backend ed internet esterni.
Testa Cloud CDN
Test 1: accesso diretto all'endpoint del bucket
Questo test utilizza i comandi time
e wget
da una VM. L'esempio scarica
/cart/id/1223515/image.jpg
dal bucket backend.example.com
.
Dall'output, puoi vedere che la richiesta complessiva richiede 780 ms. Questo è il tempo necessario per recuperare direttamente un'immagine di 3,3 MB da Amazon S3.
time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46-- backend.example.com/cart/id/1223515/image.jpg Resolving backend.example.com (backend.example.com)... 52.219.120.233 Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.47' /cart/id/1223515/image.jpg.47 100%[==============================================================================================================================================>] 3.29M 6.25MB/s in 0.5s 2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106] real 0m0.780s user 0m0.003s sys 0m0.012s
Test 2: prima richiesta tramite Cloud CDN
Questo test utilizza l'indirizzo IP del bilanciatore del carico per recuperare il
/cart/id/1223515/image.jpg
file. Poiché si tratta della prima richiesta, dovrebbe essere una mancata corrispondenza e Cloud CDN dovrebbe recuperare l'immagine dall'origine, ovvero Amazon S3. Dall'output, puoi vedere che la richiesta ha richiesto 844 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.44' /cart/id/1223515/image.jpg.44 100%[==============================================================================================================================================>] 3.29M 8.23MB/s in 0.4s 2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106] real 0m0.844s user 0m0.003s sys 0m0.012s
Test 3: seconda richiesta tramite CDN
Ora invieremo un'altra richiesta utilizzando l'IP del bilanciatore del carico. Questa volta, dobbiamo ricevere una risposta memorizzata nella cache, quindi dovrebbe essere più veloce dei primi due test.
Utilizziamo di nuovo lo stesso IP della lista consentita LOAD_BALANCER_IP_ADDRESS. Dall'output possiamo vedere che la richiesta ha richiesto solo 18 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.45' /cart/id/1223515/image.jpg.45 100%[==============================================================================================================================================>] 3.29M --.-KB/s in 0.008s 2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106] real 0m0.018s user 0m0.001s sys 0m0.010s
Verifica utilizzando i log
I log di Cloud CDN sono associati al bilanciatore del carico delle applicazioni esterno a cui sono collegati i backend abilitati per Cloud CDN. Utilizzando i log, puoi verificare se una richiesta è un hit o un miss. Scopri di più sui log di Cloud CDN in Visualizzazione dei log.
Limitazioni
Il bucket di terze parti e gli oggetti devono essere pubblici. In alternativa, puoi mantenere privati il bucket e gli oggetti se configuri l'autenticazione dell'origine privata. I backend esterni non supportano altri metodi per l'autenticazione dei contenuti, come gli URL o i cookie firmati.
Quando utilizzi un servizio di backend esterno che prevede un determinato valore per l'intestazione
Host
della richiesta HTTP, devi configurare il servizio di backend in modo da impostare l'intestazioneHost
sul valore previsto. Se non configuri un'intestazione personalizzata della richiesta, un servizio di backend conserva l'intestazioneHost
utilizzata dal client per connettersi al bilanciatore del carico delle applicazioni esterno Google Cloud. Per informazioni generali sulle intestazioni personalizzate, consulta Configurare le intestazioni delle richieste personalizzate. Per un esempio specifico, consulta Configurare un bilanciatore del carico con un backend esterno.
Passaggi successivi
- Per verificare se Cloud CDN serve risposte dalla cache, consulta Log e metriche per la memorizzazione nella cache.
- Per scoprire quali contenuti sono memorizzabili nella cache o meno, consulta la Panoramica della memorizzazione nella cache.
- Per trovare i punti di presenza GFE, consulta Località delle cache.