Puoi utilizzare un backend esterno quando i contenuti sono ospitati on-premise o in un altro cloud. Il backend esterno ti consente di gestire 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 insieme a un Application Load Balancer esterno.
Architettura
Per creare il backend esterno, devi creare un gruppo di endpoint della rete internet (NEG) che punta al servizio di archiviazione di terze parti come backend per il bilanciatore del carico. I NEG internet vengono usati per i backend esterni.
Per configurare il bucket di archiviazione di terze parti come backend, devi:
- Prepara il bucket di archiviazione di terze parti per la gestione dei contenuti.
- Crea un NEG internet che utilizza il nome di dominio completo 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 le autorizzazioni necessarie per apportare modifiche al bucket e agli oggetti Amazon S3.
Assicurati che il bucket Amazon S3 e gli oggetti nel bucket siano pubblici o di aver 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.
Avrai bisogno dell'endpoint del bucket Amazon S3 (il nome di dominio completo) quando configuri il NEG internet. Per ottenere le informazioni sugli endpoint, segui le istruzioni fornite nella knowledge base di AWS, ad esempio Accesso a un bucket. Puoi anche ottenere l'URL dell'endpoint Amazon S3 dalla pagina di riepilogo dell'oggetto.
Crea un NEG internet che utilizza il nome host del bucket
Per semplicità, in questo esempio viene utilizzato il nome di dominio completo backend.example.com
. Assicurati di sostituirlo con il nome di dominio completo del bucket di archiviazione di terze parti, che potrebbe essere simile a http://unique-name-bucket.s3-us-west-1.amazonaws.com/
.
Questa guida utilizza un esempio per descrivere le nozioni 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 Application Load Balancer esterno, puoi migliorare le prestazioni utilizzando la memorizzazione nella cache di Cloud CDN.
La guida illustra come configurare un bilanciatore del carico delle applicazioni esterno globale con un servizio di backend abilitato per Cloud CDN che effettui il proxy a un server di backend esterno all'indirizzo backend.example.com
.
Nell'esempio, il bilanciatore del carico accetta le richieste HTTPS dai client e ne esegue il proxy come HTTPS al backend esterno. In questo esempio si presume che il backend esterno supporti HTTPS.
Altre opzioni prevedono la configurazione di un bilanciatore del carico per accettare richieste HTTP o HTTPS e l'utilizzo di HTTPS durante il proxy delle richieste al backend esterno.
Questa guida presuppone che tu abbia già configurato un bilanciatore del carico e che tu stia aggiungendo un nuovo backend esterno. Per maggiori informazioni, consulta Configurare un bilanciatore del carico delle applicazioni classico con il backend di un 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 fallimento della cache, le richieste degli utenti per /cart/id/1223515
vengono recuperate dal backend esterno tramite HTTPS. Tutto il resto del traffico in entrata viene indirizzato al servizio di backend Google Cloud con le VM di 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 della rete internet (NEG) e creare o modificare un bilanciatore del carico delle applicazioni esterno in un progetto. Devi essere un proprietario o un editor del progetto oppure dovresti avere entrambi i seguenti ruoli IAM di Compute Engine.
Attività | Ruolo richiesto |
---|---|
Creazione e modifica dei componenti del bilanciatore del carico | Amministratore rete |
Creare e modificare NEG | Amministratore istanze Compute |
Configura un bilanciatore del carico con un backend esterno
Questa sezione mostra come configurare e testare un NEG internet.
Panoramica della configurazione
La configurazione di un NEG internet prevede le seguenti operazioni:
- Definizione dell'endpoint internet in un NEG internet.
- Aggiunta di un NEG internet come backend per un servizio di backend.
- Definisci il traffico degli utenti da mappare a questo servizio di backend configurando la mappa URL del bilanciatore del carico delle applicazioni esterno.
- Inserire gli intervalli IP necessari nella lista consentita.
In questo esempio vengono create le risorse seguenti:
- Una regola di forwarding con l'indirizzo IP
120.1.1.1
indirizza le richieste in entrata a un proxy di destinazione. - Il valore
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
. In questo esempio viene utilizzatoTargetHttpsProxy
. - Cloud CDN abilitato (facoltativo) sul servizio di backend consente la memorizzazione nella cache e la gestione delle risposte dalle cache di Cloud CDN.
- Questo esempio include un'intestazione
personalizzata, necessaria quando il backend esterno prevede 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
. - In 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 Porta e nome di dominio completi.
- Per il nome di dominio completo, 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 dove è possibile raggiungere il backend esterno):gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global
Aggiungi l'endpoint al NEG. Se non viene specificata alcuna porta, per impostazione predefinita viene selezionata la porta
80
(HTTP) o443
(HTTPS; HTTP/2), a seconda del 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 in quel NEG:
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global
Output:
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
Aggiungi 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 matcher percorso che invia tutte le richieste per cart/id/1223515
al servizio di backend images
, che è associato al NEG 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, seleziona l'Application Load Balancer classico, fai clic su Menu, quindi seleziona 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 fai clic su Fine. - Seleziona Abilita Cloud CDN.
- (Facoltativo) Modifica le impostazioni di modalità cache e TTL.
- In Configurazioni avanzate, in Intestazioni delle richieste personalizzate, fai clic su Aggiungi intestazione.
- In Nome intestazione, inserisci
Host
. - In Valore intestazione, inserisci
backend.example.com
.
- In Nome intestazione, inserisci
- Fai clic su Crea.
- Tieni la finestra aperta per continuare.
Collega il servizio di backend a una mappa URL esistente
- Fai clic su Regole host e percorso.
- La prima riga o le prime righe contengono i servizi Google Cloud nella colonna di destra e una di queste contiene già la regola predefinita
Any unmatched (default)
per Host e Percorsi. - Assicurati che sia presente una riga con
images
selezionata nella colonna di destra. 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 tue impostazioni con ciò che volevi 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 uno dei seguenti valori:
CACHE_ALL_STATIC
: memorizza automaticamente nella cache i contenuti staticiUSE_ORIGIN_HEADERS
(impostazione predefinita): richiede che l'origine imposti intestazioni di memorizzazione nella cache valide per memorizzare i contenuti nella cacheFORCE_CACHE_ALL
: memorizza nella cache tutti i contenuti, ignorando eventuali istruzioniprivate
,no-store
ono-cache
nelle intestazioni della rispostaCache-Control
Configura il servizio di backend per 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
Usa 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
Associa il nuovo servizio di backend alla mappa URL del bilanciatore del carico creando una nuova regola di corrispondenza per indirizzare le richieste al 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 della nuova regola del percorso/CART/ID/1223515
: il percorsoIMAGES
: il nome del nuovo servizio di backend con il NEG internet collegato
Inserisci gli intervalli IP necessari nella lista consentita
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 comando dig
seguente:
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) del cloud.
Per maggiori informazioni, consulta Autenticazione delle richieste.
Connetti il tuo 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 puntare il tuo dominio al bilanciatore del carico, crea un record A
utilizzando il servizio di registrazione del dominio. Se hai aggiunto più domini al certificato SSL, devi aggiungere un record A
per ciascuno, tutti puntati all'indirizzo IP del bilanciatore del carico. Ad esempio, per creare i 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 all'indirizzo IP del bilanciatore del carico. Se hai configurato un dominio, puoi inviare traffico anche al nome di dominio. Tuttavia, il completamento della propagazione DNS può richiedere del tempo, 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. Il sistema ti reindirizzerà alla 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. Il sistema ti reindirizzerà alla home page del serviziohelloworld
.Se non funziona e stai utilizzando un certificato gestito da Google, verifica che lo stato della risorsa di certificato sia ATTIVO. Per ulteriori informazioni, vedi Stato delle risorse del certificato SSL gestito da Google.
In alternativa, puoi utilizzare
curl
dalla riga di comando della macchina locale. SostituisciIP_ADDRESS
con l'indirizzo IPv4 del bilanciatore del carico.Se utilizzi un certificato gestito da Google, verifica il dominio che punta 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, potresti dover attendere la propagazione delle impostazioni DNS aggiornate. Quindi, verifica il tuo dominio (ad esempio,
backend.example.com
) nel browser web.Per assistenza con la risoluzione dei problemi, consulta Risolvere i problemi relativi a backend esterno e NEG internet.
Testa Cloud CDN
Test 1: contattare direttamente l'endpoint del bucket
Questo test utilizza i comandi time
e wget
di 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 per recuperare un'immagine di 3,3 MB direttamente 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 file /cart/id/1223515/image.jpg
. Poiché questa è la prima richiesta, dovrebbe
essere un errore e Cloud CDN dovrebbe recuperare l'immagine dall'origine, che
è Amazon S3. Dall'output, puoi vedere che la richiesta ha impiegato 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 faremo un'altra richiesta utilizzando questo IP del bilanciatore del carico. Questa volta dovremmo ricevere una risposta memorizzata nella cache, in modo che sia più veloce rispetto ai primi due test.
Stiamo di nuovo utilizzando lo stesso IP di bilanciamento del carico 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 tramite 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 fallimento. Per saperne di più sui log di Cloud CDN, consulta 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 URL o cookie firmati.
Quando utilizzi un servizio di backend esterno che prevede un valore specifico per l'intestazione
Host
della richiesta HTTP, devi configurare il servizio di backend in modo che imposti l'intestazioneHost
sul valore previsto. Se non configuri un'intestazione della richiesta personalizzata, un servizio di backend conserva l'intestazioneHost
utilizzata dal client per connettersi all'Application Load Balancer esterno di Google Cloud. Per informazioni generali sulle intestazioni personalizzate, consulta Configurare le intestazioni delle richieste personalizzate. Per un esempio specifico, consulta Configurazione di un bilanciatore del carico con un backend esterno.
Passaggi successivi
- Per verificare se Cloud CDN sta fornendo risposte dalla cache, consulta Log e metriche per la memorizzazione nella cache.
- Per informazioni sui contenuti che possono essere inseriti nella cache o meno, consulta la Panoramica della memorizzazione nella cache.
- Per trovare i punti di presenza dei GFE, consulta Località della cache.