Configura un bucket di backend

Cloud CDN si basa sulla tua scelta tra il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni classico per fornire routing, controlli di integrità e supporto IP anycast. Poiché i bilanciatori del carico delle applicazioni esterni globali possono avere più tipi di istanze di backend, ovvero istanze VM di Compute Engine, pod Google Kubernetes Engine, bucket Cloud Storage o backend esterni al di fuori di Google Cloud, puoi scegliere per quali backend (origini) abilitare Cloud CDN.

Questa guida alla configurazione mostra come creare un bilanciatore del carico delle applicazioni esterno con Cloud CDN abilitato. L'esempio utilizza le seguenti risorse:

  • La rete Virtual Private Cloud (VPC) predefinita
  • Una mappa URL predefinita
  • Un indirizzo IP esterno prenotato
  • Un bucket Cloud Storage come backend
  • Un singolo bucket di backend del bilanciatore del carico che funge da wrapper attorno al bucket Cloud Storage

Un bucket di backend supporta quanto segue:

  • Bucket Cloud Storage di qualsiasi classe di archiviazione, inclusi i bucket multiregionali
  • Policy Cloud CDN per la memorizzazione nella cache dei contenuti sulla rete edge globale di Google.

Per scoprire come funziona Cloud CDN, consulta la Panoramica di Cloud CDN.

Per impostazione predefinita, Cloud Storage utilizza la stessa cache di Cloud CDN. Se abiliti Cloud CDN sul bucket di backend, puoi utilizzare i controlli di Cloud CDN sui tuoi contenuti. I controlli di Cloud CDN includono, ad esempio, modalità cache, URL firmati e annullamento della convalida. Cloud CDN ti consente anche di memorizzare nella cache contenuti di grandi dimensioni (> 10 MB). Se non abiliti Cloud CDN sul bucket di backend, puoi utilizzare solo le intestazioni Cache-Control dell'origine per controllare la memorizzazione nella cache dei contenuti più piccoli, impostata dai metadati di Cloud Storage.

Backend del bilanciatore del carico

Un bilanciatore del carico delle applicazioni esterno utilizza una mappa URL per indirizzare il traffico dagli URL specificati ai servizi specificati. La tabella seguente riassume i tipi di backend in cui puoi ospitare contenuti e servizi.

Configurazione del backend del bilanciatore del carico Tipo di media gestito Tipi di backend
Servizio di backend Dinamico (ad esempio, dati)
  • Gruppi di istanze non gestite
  • Gruppi di istanze gestite
  • Gruppi di endpoint di rete interni a Google Cloud
  • Gruppi di endpoint di rete esterni a Google Cloud
Bucket di backend Statico (ad esempio immagini)
  • Bucket Cloud Storage (descritti in questa pagina)

Prima di iniziare

Console

  1. Nella console Google Cloud , vai alla pagina Home.

    Vai alla Home page di Google Cloud .

  2. A destra di Google Cloud, seleziona un progetto dal menu a discesa.

gcloud

     gcloud config set project PROJECT_ID
   

Sostituisci PROJECT_ID con il tuo ID progetto Google Cloud.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

(Facoltativo) Utilizza indirizzi BYOIP

Con Bring Your Own IP (BYOIP), puoi importare i tuoi indirizzi pubblici inGoogle Cloud per utilizzarli con le risorse Google Cloud . Ad esempio, se importi i tuoi indirizzi IPv4, puoi assegnarne uno alla regola di forwarding quando configuri il bilanciatore del carico. Quando segui le istruzioni riportate in questo documento per creare il bilanciatore del carico delle applicazioni esterno, fornisci l'indirizzo BYOIP come indirizzo IP.

Per saperne di più sull'utilizzo di BYOIP, consulta Bring Your Own IP.

Crea un bucket Cloud Storage

Se hai un bucket Cloud Storage esistente che non è ancora assegnato a un bilanciatore del carico, puoi andare direttamente al passaggio successivo.

Quando crei un bucket Cloud Storage da utilizzare come backend per un bilanciatore del carico delle applicazioni esterno con Cloud CDN, ti consigliamo di scegliere un bucket multiregionale, che replica automaticamente gli oggetti in più regioni Google Cloud . Questo può migliorare la disponibilità dei tuoi contenuti e la tolleranza agli errori della tua applicazione.

Console

  1. Nella console Google Cloud , apri la pagina Bucket Cloud Storage.

    Apri la pagina Bucket

  2. Fai clic su Crea bucket.
  3. Specifica i valori per i campi nella tabella seguente, lasciando i valori predefiniti per tutti gli altri.

    Proprietà Valore (digita il valore o seleziona un'opzione come specificato)
    Nome Per ogni bucket, inserisci un nome univoco globale. Se il nome che inserisci non è univoco, viene visualizzato un messaggio che ti invita a provare un altro nome.
    Tipo di località Multi-regione
    Località Seleziona una regione, ad esempio us (più regioni negli Stati Uniti).
    Classe di archiviazione predefinita Standard
    Controllo dell'accesso Uniforme
  4. Fai clic su Crea.

  5. Prendi nota del nome del bucket Cloud Storage appena creato per il passaggio successivo.

gcloud

gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access

Terraform

Per creare un bucket, utilizza la risorsa google_storage_bucket.

# Cloud Storage bucket
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "default" {
  name                        = "${random_id.bucket_prefix.hex}-my-bucket"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
  // Assign specialty files
  website {
    main_page_suffix = "index.html"
    not_found_page   = "404.html"
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Copia un file grafico nel bucket Cloud Storage

Per consentirti di testare la configurazione, copia un file grafico da un bucket Cloud Storage pubblico al tuo bucket Cloud Storage.

gcloud

Esegui questo comando in Cloud Shell. Sostituisci BUCKET_NAME con il nome univoco del tuo bucket Cloud Storage:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/

Terraform

Per copiare l'oggetto, utilizza local-exec Provisioner con il comando gcloud storage cp.

resource "null_resource" "upload_image" {
  provisioner "local-exec" {
    command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive"
  }
}

In alternativa, per caricare un oggetto, utilizza la risorsa google_storage_bucket_object.

# image object for testing, try to access http://<your_lb_ip_address>/test.jpg
resource "google_storage_bucket_object" "test_image" {
  name = "test-object"
  # Uncomment and add valid path to an object.
  #  source       = "/path/to/an/object"
  #  content_type = "image/jpeg"

  # Delete after uncommenting above source and content_type attributes
  content      = "Data as string to be uploaded"
  content_type = "text/plain"

  bucket = google_storage_bucket.default.name
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Nella console Google Cloud , fai clic su Aggiorna per verificare che il file grafico sia stato copiato.

Rendi pubblico il bucket Cloud Storage

Questo esempio rende pubblicamente leggibile il bucket Cloud Storage. Questo è l'approccio consigliato per i contenuti pubblici. Con questa impostazione, chiunque su internet può visualizzare ed elencare i tuoi oggetti e i relativi metadati, esclusi gli ACL. Per ridurre il rischio di esposizione involontaria dei dati, in genere devi dedicare bucket Cloud Storage specifici per gli oggetti pubblici.

Di seguito sono riportate alternative alla pubblicazione di un intero bucket Cloud Storage:

La procedura seguente concede a tutti gli utenti l'accesso per visualizzare gli oggetti nel bucket Cloud Storage, rendendo il bucket leggibile pubblicamente.

Console

  1. Nella console Google Cloud , apri la pagina Bucket Cloud Storage.

    Apri la pagina Bucket

  2. Vai al bucket e fai clic sulla scheda Autorizzazioni.
  3. Fai clic su Aggiungi entità.
  4. In Nuove entità, inserisci allUsers.
  5. Per il ruolo, seleziona Cloud Storage > Storage Object Viewer.
  6. Fai clic su Salva.

gcloud

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer

Terraform

Per rendere pubblico il bucket Cloud Storage, utilizza la risorsa google_storage_bucket_iam_member.

# make bucket public
resource "google_storage_bucket_iam_member" "default" {
  bucket = google_storage_bucket.default.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Prenota un indirizzo IP esterno

Ora che il bucket Cloud Storage è operativo, configura un indirizzo IP esterno statico globale utilizzato dai tuoi clienti per raggiungere il bilanciatore del carico.

Questo passaggio è facoltativo, ma consigliato, perché un indirizzo IP esterno statico fornisce un unico indirizzo a cui puntare il dominio.

Console

  1. Nella console Google Cloud , vai alla pagina Indirizzi IP esterni.

    Vai alla pagina Indirizzi IP esterni

  2. Per prenotare un indirizzo IPv4, fai clic su Prenota indirizzo statico.
  3. Assegna il Nome example-ip.
  4. Imposta il Livello di servizio 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 \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Prendi nota dell'indirizzo IPv4 prenotato:

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

Terraform

Per prenotare un indirizzo IP, utilizza la risorsa google_compute_global_address.

# reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Crea il bilanciatore del carico delle applicazioni esterno

In questa procedura, crei il bucket di backend del bilanciatore del carico, che funge da wrapper per il bucket Cloud Storage. Puoi abilitare Cloud CDN durante la creazione o la modifica di un bucket di backend.

Console

Avvia il processo di configurazione del bilanciatore del carico delle applicazioni esterno

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

    Vai alla pagina Bilanciamento del carico

  2. In Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.
  3. Seleziona Da internet alle mie VM e fai clic su Continua.
  4. Nella sezione Gestione avanzata del traffico, seleziona una delle seguenti opzioni:
    • Per i bilanciatori del carico delle applicazioni classici, seleziona Bilanciatore del carico HTTP(S) classico.
    • Per i bilanciatori del carico delle applicazioni esterni globali, seleziona Bilanciatore del carico HTTP(S) con gestione avanzata del traffico.
  5. Imposta Nome su http-lb, poi vai al passaggio successivo.

Configura il backend e abilita Cloud CDN

Crea il bucket di backend del bilanciatore del carico, che funge da wrapper per il bucket Cloud Storage. Puoi abilitare Cloud CDN durante la creazione o la modifica di un bucket di backend.

  1. Fai clic su Configurazione backend.
  2. In Servizi e bucket di backend, fai clic su Crea o seleziona servizi di backend e bucket di backend, quindi fai clic su Bucket di backend > Crea un bucket di backend.
  3. Imposta Nome su cat-backend-bucket. Questo nome non deve essere univoco a livello globale e può essere diverso dal nome del bucket Cloud Storage effettivo.
  4. In Bucket Cloud Storage, fai clic su Sfoglia.
  5. Seleziona il bucket Cloud Storage univoco a livello globale BUCKET_NAME che hai creato, quindi fai clic su Seleziona.
  6. Fai clic su Abilita Cloud CDN.

  7. (Facoltativo) Modifica le impostazioni della modalità cache e del TTL.

  8. Fai clic su Crea.

Configura le regole host e i matcher percorso

Le regole host e i matcher percorso sono componenti di configurazione della mappa URL di un bilanciatore del carico delle applicazioni esterno.

In Regole host e percorso, puoi mantenere le impostazioni predefinite.

Per un esempio di configurazione personalizzata, consulta Aggiunta di bucket di backend ai bilanciatori del carico.

Per saperne di più sulle regole host e sui matcher percorso, consulta la panoramica delle mappe URL.

Configura il frontend

  1. Fai clic su Configurazione frontend.
  2. Verifica che le opzioni siano configurate con questi valori:

    Proprietà Valore (digita un valore o seleziona un'opzione come specificato)
    Protocollo HTTP
    Livello di servizio di rete Premium
    Versione IP IPv4
    Indirizzo IP example-ip
    Porta 80

    Se vuoi creare un bilanciatore del carico HTTPS anziché un bilanciatore del carico HTTP, devi disporre di un certificato SSL (gcloud compute ssl-certificates list) e devi compilare i campi come segue.

    Proprietà Valore (digita un valore o seleziona un'opzione come specificato)
    Protocollo HTTPS
    Livello di servizio di rete Premium
    Versione IP IPv4
    Indirizzo IP example-ip
    Porta 443
    Certificato Seleziona un certificato o Crea un nuovo certificato
  3. Fai clic su Fine.

Esamina la configurazione

  1. Fai clic su Esamina e finalizza.
  2. Esamina le sezioni Bucket di backend, Regole host e percorso e Frontend.
  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 (http-lb).
  6. Prendi nota dell'indirizzo IP del bilanciatore del carico, che utilizzerai nella prossima attività. Verrà indicato come IP_ADDRESS.

gcloud

Configura il backend

gcloud compute backend-buckets create cat-backend-bucket \
    --gcs-bucket-name=BUCKET_NAME \
    --enable-cdn \
    --cache-mode=CACHE_MODE

Imposta la modalità cache sostituendo CACHE_MODE con uno dei seguenti valori:

  • CACHE_ALL_STATIC o USE_ORIGIN_HEADERS: utilizza le intestazioni impostate in base ai metadati di controllo cache in Cloud Storage. Cloud Storage fornisce sempre un'intestazione Cache-Control a Cloud CDN. Se non viene scelto esplicitamente alcun valore, invia un valore predefinito.

  • FORCE_CACHE_ALL: memorizza nella cache tutti i contenuti, ignorando le istruzioni private, no-store o no-cache nelle intestazioni della risposta Cache-Control inviate da Cloud Storage.

Configura la mappa URL

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cat-backend-bucket

Configura il proxy di destinazione

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

Configura la regola di forwarding

  • 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 http-lb-forwarding-rule \
    --load-balancing-scheme=LOAD_BALANCING_SCHEME \
    --network-tier=PREMIUM \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

Terraform

Configura il backend

Per configurare il backend, utilizza la risorsa google_compute_backend_bucket.

# backend bucket with CDN policy with default ttl settings
resource "google_compute_backend_bucket" "default" {
  name        = "cat-backend-bucket"
  description = "Contains beautiful images"
  bucket_name = google_storage_bucket.default.name
  enable_cdn  = true
  cdn_policy {
    cache_mode        = "CACHE_ALL_STATIC"
    client_ttl        = 3600
    default_ttl       = 3600
    max_ttl           = 86400
    negative_caching  = true
    serve_while_stale = 86400
  }
}

Configura la mappa URL

Per configurare il backend, utilizza la risorsa google_compute_url_map.

# url map
resource "google_compute_url_map" "default" {
  name            = "http-lb"
  default_service = google_compute_backend_bucket.default.id
}

Configura il proxy di destinazione

Per configurare il proxy di destinazione, utilizza la risorsa google_compute_target_http_proxy o la risorsa google_compute_target_https_proxy.

# http proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Configura la regola di forwarding

Per configurare la regola di forwarding, utilizza la risorsa google_compute_global_forwarding_rule.

# forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}
  • Per un bilanciatore del carico delle applicazioni esterno globale, utilizza 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".

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Invia traffico al bucket di backend

Dopo la creazione della regola di forwarding globale, possono trascorrere alcuni minuti prima che la configurazione venga propagata a livello globale. Dopo diversi minuti, puoi iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.

Console

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

    Vai alla pagina Bilanciamento del carico

  2. Fai clic su http-lb per espandere il bilanciatore del carico che hai appena creato.

    Nella sezione Backend, verifica che il bucket di backend sia in stato integro. Dovrebbe essere presente un segno di spunta verde accanto al bucket di backend. In caso contrario, prova innanzitutto a ricaricare la pagina. Potrebbero essere necessari alcuni istanti prima che la console Google Cloud indichi che i backend sono integri.

  3. Dopo che la console Google Cloud mostra che il bucket di backend è integro, puoi testare il bilanciatore del carico utilizzando un browser web e andando all'indirizzo http://IP_ADDRESS/never-fetch/three-cats.jpg. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico. Il browser dovrebbe visualizzare una pagina con contenuti che mostrano il file grafico.

gcloud

Utilizza il comando curl per testare la risposta dall'URL. Sostituisci IP_ADDRESS con l'indirizzo IPv4 del bilanciatore del carico.

Prendi nota dell'indirizzo IPv4 prenotato:

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

Invia una richiesta curl:

curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Verifica il funzionamento di Cloud CDN

Se ricarichi la pagina http://IP_ADDRESS/never-fetch/three-cats.jpg diverse volte in rapida successione, dovrebbero essere registrati diversi successi della cache.

La seguente voce di log mostra un successo della cache. Puoi visualizzare i successi della cache nella consoleGoogle Cloud aprendo Esplora log e filtrando in base al nome della regola di forwarding.

Apri Esplora log

Esplora log

{
    insertId: "1oek5rg3l3fxj7"
    jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        cacheId: "SFO-fbae48ad"
        statusDetails: "response_from_cache"
    }
    httpRequest: {
        requestMethod: "GET"
        requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg"
        requestSize: "577"
        status: 254
        responseSize: "157"
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
        remoteIp: "CLIENT_IP_ADDRESS"
        cacheHit: true
        cacheLookup: true
    }
    resource: {
        type: "http_load_balancer"
        labels: {
            zone: "global"
            url_map_name: "URL_MAP_NAME"
            forwarding_rule_name: "FORWARDING_RULE_NAME"
            target_proxy_name: "TARGET_PROXY_NAME"
            backend_service_name: ""
            project_id: "PROJECT_ID"
        }
    }
    timestamp: "2020-06-08T23:41:25.078651Z"
    severity: "INFO"
    logName: "projects/PROJECT_ID/logs/requests"
    trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992"
    receiveTimestamp: "2020-06-08T23:41:25.588272510Z"
    spanId: "7b6537d3672e08e1"
}

Console

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

    Vai alla pagina Bilanciamento del carico

  2. Fai clic su http-lb per espandere il bilanciatore del carico che hai appena creato.

    Nella sezione Backend, verifica che il bucket di backend sia in stato integro. Dovrebbe essere presente un segno di spunta verde accanto al bucket di backend. In caso contrario, prova innanzitutto a ricaricare la pagina. Potrebbero essere necessari alcuni istanti prima che la console Google Cloud indichi che i backend sono integri.

  3. Dopo che la console Google Cloud mostra che il bucket di backend è integro, puoi testare il bilanciatore del carico utilizzando un browser web e andando all'indirizzo http://IP_ADDRESS/never-fetch/three-cats.jpg. Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico. Il browser dovrebbe visualizzare una pagina con contenuti che mostrano il file grafico.

gcloud

Utilizza il comando curl per testare la risposta dall'URL. Sostituisci IP_ADDRESS con l'indirizzo IPv4 del bilanciatore del carico.

Prendi nota dell'indirizzo IPv4 prenotato:

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

Invia una richiesta curl:

curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg

I contenuti vengono recuperati da Cloud Storage, memorizzati nella cache da Cloud CDN, quindi convalidati e recuperati nuovamente quando scadono o vengono altrimenti eliminati dalla cache.

I contenuti provenienti dalla cache hanno un'intestazione Age maggiore di zero.

Per i contenuti che devono essere aggiornati prima del TTL, è possibile annullare la convalida e recuperarli da Cloud Storage.

Disabilita Cloud CDN

Console

Disabilita Cloud CDN per un singolo bucket di backend

  1. Nella console Google Cloud , vai alla pagina Cloud CDN.

    Vai alla pagina Cloud CDN

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

Rimuovi Cloud CDN per tutti i bucket di backend per un'origine

  1. Nella console Google Cloud , vai alla pagina Cloud CDN.

    Vai alla pagina Cloud CDN

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

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --no-enable-cdn

La disattivazione di Cloud CDN non annulla la convalida né elimina definitivamente i contenuti delle cache. Se disattivi e riattivi Cloud CDN, quasi tutti o tutti i contenuti memorizzati nella cache potrebbero rimanere nella cache. Per impedire che i contenuti vengano utilizzati dalle cache, devi annullarne la convalida.

Passaggi successivi