Configurazione di Cloud CDN con Cloud Run, Cloud Functions o App Engine

Questa pagina mostra come creare un bilanciatore del carico HTTP(S) esterno per instradare le richieste ai backend serverless. Il termine serverless si riferisce ai seguenti prodotti di calcolo serverless: App Engine, Cloud Functions e Cloud Run.

NEG serverless ti consente di utilizzare le app serverless di Google Cloud con il bilanciamento del carico HTTP(S) esterno. Dopo aver configurato un bilanciatore del carico con il backend NEG serverless, le richieste al bilanciatore del carico vengono instradate al backend dell'applicazione serverless.

Per ulteriori informazioni sulle NEG Serverless, leggi la panoramica dei NEG serverless.

Prima di iniziare

  1. Esegui il deployment di un servizio App Engine, Cloud Functions o Cloud Run.
  2. Se non lo hai già fatto, installa Google Cloud SDK.
  3. Configurare le autorizzazioni.
  4. Aggiungi una risorsa certificato SSL.

Esegui il deployment di un servizio App Engine, Cloud Functions o Cloud Run

Le istruzioni in questa pagina presuppongono che tu abbia già in esecuzione un servizio Cloud Run, Cloud Functions o App Engine.

Ad esempio, in questa pagina abbiamo utilizzato la guida rapida per Cloud Run Python per eseguire il deployment di un servizio Cloud Run nell'area geografica us-central1. Il resto di questa pagina mostra come configurare un bilanciatore del carico HTTP(S) esterno che utilizza un backend NEG serverless per instradare le richieste a questo servizio.

Se non hai ancora eseguito il deployment di un'applicazione serverless o se vuoi provare una NEG serverless con un'applicazione di esempio, utilizza una delle seguenti guide rapide. Puoi creare un'applicazione serverless in qualsiasi area geografica, ma devi utilizzare la stessa area geografica in un secondo momento per creare l'NEG e il bilanciatore del carico serverless.

Cloud Run

Per creare una semplice applicazione Hello World, pacchettizzala in un'immagine container e quindi esegui il deployment dell'immagine del container in Cloud Run, vedi Quickstart: Build and deploy.

Se hai già caricato un contenitore di esempio nel Container Registry, vedi Guida rapida: deployment di un container di esempio preimpostato.

Cloud Functions

Consulta Cloud Functions: guida rapida di Python.

App Engine

Consulta le seguenti guide rapide di App Engine per Python 3:

Installa Google Cloud SDK

Installa lo strumento a riga di comando gcloud. Consulta la pagina gcloud Overview per i concetti e le informazioni di installazione dello strumento.

Se non hai già eseguito lo strumento a riga di comando gcloud, esegui prima gcloud init per inizializzare la directory gcloud.

Configura autorizzazioni

Per seguire questa guida, devi creare una NEG serverless e creare un bilanciatore del carico HTTP(S) esterno in un progetto. Devi essere un proprietario o un editor di progetto oppure dovresti avere i seguenti ruoli IAM Compute Engine:

Attività Ruolo obbligatorio
Crea componenti di bilanciamento del carico e networking Amministratore di rete
Creazione e modifica NEG Amministratore di istanze Compute
Crea e modifica certificati SSL Amministratore per la sicurezza

Prenotazione di un indirizzo IP esterno

Ora che i servizi sono attivi e in esecuzione, configura un indirizzo IP esterno statico globale usato dai clienti per raggiungere il bilanciatore del carico.

Console

  1. Vai alla pagina degli indirizzi IP esterni di Google Cloud Console.
    Vai alla pagina Indirizzi IP esterni
  2. Fai clic su Prenota indirizzo statico per prenotare un indirizzo IPv4.
  3. Assegna un Nome di example-ip.
  4. Imposta il livello di rete su Premium.
  5. Imposta la versione IP su IPv4.
  6. Imposta il Tipo su Globale.
  7. Fai clic su Prenota.

gcloud

gcloud compute addresses create example-ip \
    --ip-version=IPV4 \
    --global

Prendi nota dell'indirizzo IPv4 riservato:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Creazione di una risorsa certificato SSL

Per creare un bilanciatore del carico HTTPS, devi aggiungere una risorsa del certificato SSL al front-end del bilanciatore del carico. Crea una risorsa certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito.

  • Certificati gestiti da Google. L'utilizzo di certificati gestiti da Google è consigliato perché Google Cloud riceve, gestisce e rinnova automaticamente questi certificati. Per creare un certificato gestito da Google, devi disporre di un dominio e dei record DNS per tale dominio per eseguire il provisioning del certificato. Se non hai ancora un dominio, puoi crearne uno da Google Domains. Inoltre, dovrai aggiornare il record DNS A del dominio in modo che rimandi all'indirizzo IP del bilanciatore del carico creato nel passaggio precedente (example-ip). Per istruzioni dettagliate, consulta le sezioni Uso della Certificati gestiti da Google.

  • Certificati autofirmati. Se al momento non vuoi configurare un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

In questo esempio si presuppone che tu abbia già creato una risorsa certificato SSL.

Se vuoi testare questa procedura senza creare una risorsa del certificato SSL (o un dominio come richiesto dai certificati gestiti da Google), puoi comunque utilizzare le istruzioni in questa pagina per configurare un carico HTTP.

Creazione del bilanciatore del carico HTTP(S) esterno

Nel diagramma seguente, il bilanciatore del carico utilizza un backend NEG serverless per indirizzare le richieste a un servizio Cloud Run serverless. In questo esempio, abbiamo utilizzato la guida rapida per Cloud Run Python per il deployment di un servizio Cloud Run.

Bilanciamento del carico HTTPS per un'applicazione Cloud Run (fai clic per ingrandire)
Bilanciamento del carico HTTPS per un'applicazione Cloud Run

Poiché i controlli di integrità non sono supportati per i servizi di backend con backend NEG serverless, non è necessario creare una regola firewall che consenta i controlli di integrità se il bilanciatore del carico ha solo backend NEG serverless.

Console

Denominazione del bilanciatore del carico

  1. Vai alla pagina Bilanciamento del carico in Google Cloud Console.
    Vai alla pagina Bilanciamento del carico
  2. In Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.
  3. In Solo per Internet o interni, seleziona Da Internet alle mie VM.
  4. Fai clic su Continua.
  5. In Nome del bilanciatore del carico, inserisci serverless-lb.
  6. Tieni aperta la finestra per continuare.

Configurazione dei servizi di backend

  1. Fai clic su Configurazione backend.
  2. Nel menu a discesa Crea o seleziona un servizio di backend, posiziona il puntatore del mouse sopra Servizi di backend, quindi seleziona Crea un backend servizio.
  3. Inserisci un Nome.
  4. In Tipo di backend, seleziona Gruppo endpoint di rete serverless.
  5. Lascia invariato il protocollo. Questo parametro viene ignorato.
  6. In Backend, nella finestra Nuovo backend, seleziona Crea gruppo di endpoint di rete serverless.
  7. Inserisci un Nome.
  8. In Area geografica, seleziona us-central1. Quindi, seleziona Cloud Run.
  9. Seleziona Seleziona il nome del servizio.
  10. Dal menu a discesa Servizio, seleziona il servizio Cloud Run per cui vuoi creare un bilanciatore del carico.
  11. Fai clic su Crea.
  12. Nella finestra Nuovo backend, fai clic su Fine.
  13. Seleziona Attiva Cloud CDN. Mantieni le impostazioni predefinite della modalità cache e TTL.
  14. Fai clic su Crea.

Configurazione di matcher regole e percorsi

Le regole host e i matcher di percorso sono componenti di configurazione di una mappa URL del bilanciatore del carico HTTP(S) esterno.

  1. Fai clic su Host e regole per il percorso.
  2. Conserva gli host e i percorsi predefiniti. In questo esempio, tutte le richieste vengono inviate al servizio di backend creato nel passaggio precedente.

Configurazione del frontend

  1. Fai clic su Configurazione front-end.
  2. Inserisci un Nome.
  3. Per creare un bilanciatore del carico HTTPS, devi disporre di unCertificato SSL gcloud compute ssl-certificates list ). Consigliamo di utilizzare un certificato gestito da Google come descritto in precedenza sul dispositivo mobile. Per configurare un bilanciatore del carico HTTP(S) esterno, compila i campi come segue.

    Verifica che le seguenti opzioni siano configurate con questi valori:

    Proprietà Valore (digita un valore o seleziona un'opzione come specificato)
    Protocollo HTTPS
    Livello di servizio di rete Premium
    Versione IP IPv4
    Indirizzo IP esempio-ip
    Porta 443
    Certificato Seleziona un certificato SSL esistente o creane uno nuovo.

    Per creare un bilanciatore del carico HTTPS, devi avere una risorsa certificato SSL da utilizzare nel proxy HTTPS. Puoi creare una risorsa certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito.
    Per creare un certificato gestito da Google, devi avere un dominio. Il record A del dominio deve risolvere l'indirizzo IP del bilanciatore del carico (in questo esempio, example-ip). È consigliabile utilizzare i certificati gestiti da Google perché Google Cloud ottiene, gestisce e rinnova automaticamente questi certificati. Se non hai un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

  4. Fai clic su Fine.

Analisi della configurazione

  1. Fai clic su Rivedi e finalizza.
  2. Esamina le regole Backend, Host e Path e Front-end.
  3. Fai clic su Crea.
  4. Attendi che la creazione del bilanciatore del carico sia completa.
  5. Fai clic sul nome del bilanciatore del carico (serverless-lb).
  6. Prendi nota dell'indirizzo IP del bilanciatore del carico per l'attività successiva. Si chiama IP_ADDRESS.

gcloud

  1. Crea un NEG serverless per la tua applicazione serverless. Per creare un NEG serverless con un servizio Cloud Run:

    gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
        --region=us-central1 \
        --network-endpoint-type=serverless  \
        --cloud-run-service=CLOUD_RUN_SERVICE_NAME
    
    Per ulteriori opzioni, consulta la guida di riferimento di gcloud per gcloud compute network-endpoint-groups create.
  2. Crea un servizio di backend.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --global \
        --enable-cdn \
        --cache-mode=CACHE_MODE \
        --custom-response-header='Cache-Status: {cdn_cache_status}' \
        --custom-response-header='Cache-ID: {cdn_cache_id}'
    

    Sostituisci CACHE_MODE con uno dei seguenti metodi:

    • CACHE_All_STATIC (impostazione predefinita): memorizza automaticamente nella cache i contenuti statici. Le risposte contrassegnate come non memorizzabili nella cache (istruzioni di private, no-store o no-cache nelle intestazioni di risposta Cache-Control) non vengono memorizzate nella cache. Per memorizzare nella cache i contenuti dinamici, devono avere intestazioni di memorizzazione nella cache valide. Questo è il comportamento predefinito per tutti i nuovi backend per Cloud CDN abilitati.

    • USE_ORIGIN_HEADERS: richiede l'origine di impostare intestazioni di memorizzazione nella cache valide per i contenuti nella cache. Le risposte senza queste intestazioni non sono memorizzate nella cache di Google e richiedono un viaggio completo all'origine per ogni richiesta, con possibili conseguenze potenzialmente sull'esecuzione e sul carico sul server di origine. Questo è il comportamento predefinito per tutti i backend Cloud abilitati per Cloud CDN.

    • FORCE_CACHE_ALL: memorizza nella cache tutti i contenuti, ignorando eventuali istruzioni private, no-store o no-cache nelle intestazioni di risposta Cache-Control. Ciò potrebbe causare la memorizzazione nella cache di contenuti privati, per utente (identificabili dagli utenti). Devi abilitare questa opzione solo nei backend che non pubblicano contenuti privati o dinamici, ad esempio i bucket di Cloud Storage.

    Per informazioni sulle direttive della cache che Cloud CDN comprende e che cosa non è memorizzato nella cache da Cloud CDN, consulta gli articoli Contenuti memorizzabili nella cache e Contenuti non memorizzabili nella cache.

  3. Aggiungi NEG serverless come backend per il servizio di backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --global \
        --network-endpoint-group=SERVERLESS_NEG_NAME \
        --network-endpoint-group-region=us-central1
    
  4. Crea una mappa URL per instradare le richieste in entrata al servizio di backend:
    gcloud compute url-maps create URL_MAP_NAME \
        --default-service BACKEND_SERVICE_NAME
    

    Questa mappa URL di esempio ha come target un solo servizio di backend che rappresenta una singola app serverless, pertanto non è necessario impostare regole host o matcher percorso. Se hai più di un servizio di backend, puoi utilizzare le regole host per indirizzare le richieste a diversi servizi in base al nome host; inoltre, puoi configurare gli abbinamenti dei percorsi per indirizzare le richieste a diversi servizi in base il percorso della richiesta.

  5. Per creare un bilanciatore del carico HTTPS, devi disporre di una risorsa certificato SSL da utilizzare nel proxy di destinazione HTTPS. Puoi creare una risorsa certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito. L'utilizzo di certificati gestiti da Google è consigliato perché Google Cloud riceve, gestisce e rinnova automaticamente tali certificati.

    Per creare un certificato gestito da Google, devi avere un dominio. Se non hai un dominio, puoi utilizzare un certificato SSL autofirmato per i test.

    Per creare una risorsa certificato SSL gestita da Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --domains DOMAIN
    

    Per creare una risorsa certificato SSL autogestita:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
    

  6. Crea un proxy HTTP(S) di destinazione per instradare le richieste alla tua mappa URL.

    Per un bilanciatore del carico HTTPS, crea un proxy di destinazione HTTPS. Il proxy è la porzione del bilanciatore del carico che contiene il certificato SSL per il bilanciamento del carico HTTPS, perciò in questo passaggio carichi anche il certificato.

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
        --ssl-certificates=SSL_CERTIFICATE_NAME \
        --url-map=URL_MAP_NAME
    

  7. Crea una regola di inoltro globale per instradare le richieste in entrata al proxy.

    Per un bilanciatore del carico HTTPS:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
        --address=example-ip \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

Aggiornamento dei record DNS del dominio per utilizzare l'indirizzo IP del bilanciatore del carico

Se non lo hai già fatto, aggiorna il record A o AAAA del DNS del tuo dominio in modo che rimandi all'indirizzo IP del bilanciatore del carico, in modo che il traffico inviato agli URL di dominio personalizzati esistenti venga instradato attraverso il bilanciatore del carico.

Ad esempio, se hai un dominio personalizzato di example.com e tutti i tuoi servizi sono mappati a questo dominio, devi aggiornare il record DNS A o AAAA per example.com in modo che punti al Indirizzo IP.

Prima di aggiornare i record DNS, puoi verificare la configurazione a livello locale forzare la risoluzione DNS locale del dominio personalizzato all'indirizzo IP del bilanciatore del carico. Per eseguire una verifica locale, modifica il file /etc/hosts/ sul computer locale in modo che punti example.com all'indirizzo IP del bilanciatore del carico oppure usa il flag curl --resolve per forzare curl. di utilizzare l'indirizzo IP del bilanciatore del carico per la richiesta.

Quando il record DNS per example.com risolve l'indirizzo IP del bilanciatore del carico HTTPS, le richieste inviate a example.com iniziano a essere instradate tramite il bilanciatore del carico. Il bilanciatore del carico li invia al servizio di backend pertinente in base alla sua mappa URL. Inoltre, se il servizio di backend è configurato con una maschera URL, l'NEG serverless utilizza la maschera per instradare la richiesta al servizio Cloud Run, Cloud Functions o al servizio App Engine appropriati.

Se utilizzi certificati gestiti da Google, la migrazione di un servizio esistente a un bilanciatore del carico HTTP(S) esterno potrebbe comportare tempi di inattività, generalmente inferiori a un'ora. Questo perché il certificato SSL per il bilanciatore del carico HTTP(S) esterno non verrà eseguito finché non aggiorni i record DNS in modo che rimandino all'indirizzo IP del bilanciatore del carico.

Verifica del bilanciatore del carico

Ora che hai configurato il bilanciatore del carico, puoi iniziare a inviare il traffico all'indirizzo IP del bilanciatore del carico. Se hai configurato un dominio, puoi anche inviare traffico al nome di dominio. Tuttavia, il completamento della propagazione DNS può richiedere del tempo, così puoi iniziare utilizzando l'indirizzo IP per i test.

  1. Vai alla pagina Bilanciamento del carico in Google Cloud Console.
    Vai alla pagina Bilanciamento del carico
  2. Fai clic sul bilanciatore del carico appena creato.
  3. Prendi nota dell'indirizzo IP del bilanciatore del carico.
  4. Per un bilanciatore del carico HTTPS, puoi testare il bilanciatore del carico utilizzando un browser web andando su https://IP_ADDRESS. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico. Dovresti essere indirizzato alla home page del servizio helloworld.

    Se non funziona e utilizzi un certificato gestito da Google, verifica che lo stato della risorsa del certificato sia ATTIVO. Per ulteriori informazioni, consulta lo stato delle risorse dei certificati SSL gestiti da Google.

    Se hai utilizzato un certificato autofirmato per i test, il tuo browser visualizza un avviso. Devi accettare esplicitamente al browser di accettare un certificato autofirmato. Fai clic sull'avviso per visualizzare la pagina effettiva.

  5. Per verificare le risposte della cache, utilizza curl dalla riga di comando della macchina locale. Sostituisci IP_ADDRESS con l'indirizzo IPv4 del bilanciatore del carico.

    curl -v -o/dev/null https://IP_ADDRESS
    

    Se utilizzi un certificato gestito da Google, prova il dominio all'indirizzo IP del bilanciatore del carico. Ad esempio:

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    Se utilizzi un certificato autofirmato, devi anche specificare il flag -k. L'opzione curl -k consente il funzionamento di curl se disponi di un certificato autofirmato. Dovresti usare il parametro -k solo per testare il tuo sito. In circostanze normali, un certificato valido è un'importante misura di sicurezza e gli avvisi relativi ai certificati non devono essere ignorati.

    L'output deve contenere le intestazioni personalizzate Cache-ID e Cache-Status configurate per indicare se la risposta è stata pubblicata dalla cache:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    Il risultato contiene le intestazioni delle risposte che indicano un hit da cache, il che significa che l'asset statico nell'applicazione serverless è stato pubblicato per l'utente da una cache perimetrale di Cloud CDN.

    L'intestazione cache-status indica il valore disabled per le risposte non memorizzate nella cache in Cloud CDN. Per le risposte memorizzate nella cache, il valore dell'intestazione cache-status è hit, miss o revalidated.

Disabilitazione di Cloud CDN

Console

Disabilita Cloud CDN per un singolo servizio di backend

  1. In Google Cloud Console, vai alla pagina Cloud CDN.

    Vai alla pagina Cloud CDN

  2. Sul lato destro della riga dell'origine, fai clic su Menu e seleziona Modifica.
  3. Deseleziona le caselle di controllo dei servizi di backend a cui vuoi interrompere l'utilizzo di Cloud CDN.
  4. Fai clic su Aggiorna.

Rimozione di Cloud CDN per tutti i servizi di backend per un'origine

  1. In Cloud Console, vai alla pagina Cloud CDN.

    Vai alla pagina Cloud CDN

  2. Sul lato destro della riga dell'origine, fai clic su Menu e seleziona Rimuovi.
  3. Fai clic su Rimuovi per confermare.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

La disattivazione di Cloud CDN non annulla la cache, né svuota la cache. Se disattivi o riattivi nuovamente Cloud CDN, la maggior parte o tutti i contenuti nella cache potrebbero essere memorizzati nella cache. Per evitare che i contenuti vengano utilizzati dalle cache, devi invalidare tali contenuti.

Passaggi successivi

  • Consulta la documentazione di Cloud CDN per ulteriori informazioni sulle modalità di cache e per determinare la cache delle tue risposte.