Configurare l'archiviazione di oggetti di terze parti

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:

  1. Prepara il bucket di archiviazione di terze parti per la pubblicazione dei contenuti.
  2. Crea un NEG internet che utilizzi il FQDN del bucket.
  3. Configura il bilanciatore del carico delle applicazioni esterno con il NEG internet come backend.
  4. 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.

  1. 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.

  2. 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.

  3. 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.

Figura 1. Caso d'uso del bucket S3 per i backend esterni.
Figura 1. Caso d'uso del bucket S3 per i backend esterni.

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:

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 essere PREMIUM.
  • 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 o TargetHttpsProxy. Questo esempio utilizza TargetHttpsProxy.
  • 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.

Figura 2. Cloud CDN con un bucket Amazon S3 di backend.
Figura 2. Cloud CDN con un bucket Amazon S3 di backend.

Crea il NEG e l'endpoint internet

Console

  1. Nella console Google Cloud, vai alla pagina Gruppi di endpoint di rete.

    Vai a Gruppi di endpoint di rete

  2. Fai clic su Crea gruppo di endpoint di rete.
  3. Inserisci il nome del gruppo di endpoint di rete: example-fqdn-neg.
  4. Per Tipo di gruppo di endpoint di rete, seleziona Gruppo di endpoint di rete (internet).
  5. In Porta predefinita, inserisci 443.
  6. In Nuovo endpoint di rete, seleziona Nome di dominio e porta completi.
  7. Per il FQDN, inserisci backend.example.com.
  8. In Tipo di porta, seleziona Predefinito e verifica che Numero porta sia 443.
  9. Fai clic su Crea.

gcloud

  1. Crea un NEG internet e imposta --network-endpoint-type su internet-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
    
  2. Aggiungi il tuo endpoint al NEG. Se non viene specificata una porta, la selezione della porta è impostata su 80 (HTTP) o 443 (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
    
  3. 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
    

  4. 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

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. 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.
  3. Fai clic su Configurazione backend.
  4. Nel menu Servizi e bucket di backend, seleziona Crea un servizio di backend.
  5. Imposta il nome del servizio di backend su images.
  6. In Tipo di backend, seleziona Gruppo di endpoint di rete internet.
  7. Seleziona il protocollo che intendi utilizzare dal bilanciatore del carico al NEG internet. Per questo esempio, seleziona HTTPS.
  8. In Nuovo backend > Gruppo di endpoint di rete internet, seleziona example-fqdn-neg e poi fai clic su Fine.
  9. Seleziona Attiva Cloud CDN.
  10. (Facoltativo) Modifica le impostazioni della modalità cache e del TTL.
  11. In Configurazioni avanzate, fai clic su Aggiungi intestazione in Intestazioni delle richieste personalizzate.
    1. In Nome intestazione, inserisci Host.
    2. In Valore intestazione, inserisci backend.example.com.
  12. Fai clic su Crea.
  13. Tieni aperta la finestra per continuare.

Collega il servizio di backend a una mappa URL esistente

  1. Fai clic su Regole host e percorso.
  2. La prima o le prime righe contengono i servizi Google Cloud nella colonna di destra e una di queste è già compilata con la regola predefinitaAny unmatched (default) per Host e Percorsi.
  3. Assicurati che nella colonna corretta sia selezionata una riga con images. Se non esiste, fai clic su Aggiungi regola host e percorso e seleziona images. Compila gli altri campi come segue:
    1. In Host, inserisci *.
    2. In Percorsi, inserisci /cart/id/1223515.

Esamina e finalizza

  1. Fai clic su Esamina e finalizza.
  2. Confronta le impostazioni con ciò che intendevi creare.
  3. Se è tutto a posto, fai clic su Aggiorna.

gcloud

  1. 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 statici

    • USE_ORIGIN_HEADERS (valore predefinito): richiede all'origine di impostare intestazioni di memorizzazione nella cache valide per memorizzare nella cache i contenuti

    • FORCE_CACHE_ALL: memorizza nella cache tutti i contenuti, ignorando eventuali direttive private, no-store o no-cache negli intestazioni di rispostaCache-Control

  2. Configura il servizio di backend in modo da aggiungere l'intestazione della richiesta personalizzataHost: backend.example.com alla richiesta:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. 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
    
  4. 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 esistente
    • GCP_SERVICE_EXAMPLE: il nome di un servizio di backend predefinito esistente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: il nome di questa nuova regola del percorso
    • /CART/ID/1223515: il percorso
    • IMAGES: 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.

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul bilanciatore del carico che hai appena creato.

  3. Prendi nota dell'indirizzo IP del bilanciatore del carico.

  4. Se hai creato un bilanciatore del carico HTTP, puoi testarlo utilizzando un browser web all'indirizzo http://IP_ADDRESS. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico. Dovresti visualizzare la home page del servizio helloworld.

    Se hai creato un bilanciatore del carico HTTPS, puoi testarlo utilizzando un browser web all'indirizzo https://IP_ADDRESS. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico. Dovresti visualizzare la home page del servizio helloworld.

    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. Sostituisci IP_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
    

  5. (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'intestazione Host sul valore previsto. Se non configuri un'intestazione personalizzata della richiesta, un servizio di backend conserva l'intestazione Host 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