Configura un bilanciatore del carico HTTP(S) esterno globale (classico) con bucket Cloud Storage

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento mostra come creare un bilanciatore del carico HTTP(S) esterno per indirizzare le richieste di contenuti statici ai bucket Cloud Storage. Dopo aver configurato un bilanciatore del carico con i bucket di backend, le richieste per i percorsi URL che iniziano con /love-to-fetch vengono inviate al bucket Cloud Storage di us-east1 e tutte le altre richieste vengono inviate al bucket Cloud Storage europe-north1, indipendentemente dall'area geografica dell'utente.

Se i tuoi backend pubblicano contenuti dinamici su HTTP(S), valuta la possibilità di utilizzare i servizi di backend anziché i bucket di backend.


Per seguire le indicazioni dettagliate per questa attività direttamente in Google Cloud Console, fai clic su Procedura guidata:

Procedura guidata


Bucket Cloud Storage come backend del bilanciatore del carico

Un bilanciatore del carico HTTP(S) esterno utilizza una mappa URL per indirizzare il traffico dai percorsi URL specificati ai backend.

Nel diagramma seguente, il bilanciatore del carico invia il traffico con un percorso di /love-to-fetch/ a un bucket Cloud Storage nell'area geografica us-east1. Tutte le altre richieste vengono inviate al bucket Cloud Storage nella regione europe-north1.

Il bilanciatore del carico invia il traffico a un backend Cloud Storage.
Distribuzione del traffico su Cloud Storage

Per impostazione predefinita, Cloud Storage utilizza la stessa cache utilizzata da Cloud CDN. Se abiliti Cloud CDN nel bucket di backend, puoi utilizzare i controlli Cloud CDN nei tuoi contenuti. I controlli di Cloud CDN includono, ad esempio, modalità cache, URL firmati e annullamento della convalida. Cloud CDN permette anche di memorizzare nella cache contenuti di grandi dimensioni (> 10 MB). Se non abiliti Cloud CDN nel tuo bucket di backend, puoi utilizzare solo le intestazioni Cache-Control di origine per controllare la memorizzazione nella cache per contenuti più piccoli, come impostato dai metadati di Cloud Storage.

Prima di iniziare

Assicurati che la tua configurazione soddisfi i seguenti prerequisiti. Se utilizzi le utilità gcloud o gsutil, puoi installarle entrambe seguendo le istruzioni riportate nel documento Guida rapida: utilizzo dello strumento gsutil.

Imposta un progetto predefinito

Console

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

gcloud/gsutil

gcloud config set project PROJECT_ID

o

gsutil config set project PROJECT_ID

Sostituisci PROJECT_ID con il progetto che utilizzi per questa guida.

Terraform

export GOOGLE_CLOUD_PROJECT=PROJECT_ID

Autorizzazioni

Per seguire questa guida, devi creare bucket Cloud Storage e un bilanciatore del carico in un progetto. Devi essere un proprietario o un editor del progetto oppure avere i seguenti ruoli IAM di Compute Engine:

Attività Ruolo obbligatorio
Crea componenti del bilanciatore del carico Amministratore rete
Creare bucket Cloud Storage Amministratore oggetti Storage

Per saperne di più, consulta le seguenti guide:

Configura una risorsa del certificato SSL

Per un bilanciatore del carico HTTPS, crea una risorsa del certificato SSL come descritto nella seguente documentazione:

Ti consigliamo di utilizzare un certificato gestito da Google.

Questo esempio presuppone che tu abbia già una risorsa del certificato SSL denominata www-ssl-cert.

Prepara i bucket e i contenuti di Cloud Storage

La procedura per preparare i bucket Cloud Storage è la seguente:

  • Creare i bucket.

  • Copiare i contenuti nei bucket.

  • Fornisci accesso pubblico ai bucket.

Creare bucket Cloud Storage

In questo esempio, crei due bucket Cloud Storage a cui il bilanciatore del carico può accedere. Per i deployment in produzione, consigliamo di scegliere un bucket a più aree geografiche, che replica automaticamente gli oggetti in più aree geografiche Google Cloud. Ciò può migliorare la disponibilità dei contenuti e la tolleranza di errore in tutta l'applicazione.

Prendi nota dei nomi dei bucket Cloud Storage che crei, poiché verranno utilizzati in seguito. In questa guida, vengono definiti BUCKET_1_NAME e BUCKET_2_NAME.

Console

  1. In Google Cloud Console, vai alla pagina Bucket Cloud Storage.

    Vai ai bucket Cloud Storage

  2. Fai clic su Crea bucket.

  3. Nella casella Assegna un nome al bucket, inserisci un nome univoco globale che segue le linee guida per la denominazione.

  4. Fai clic su Scegli dove archiviare i tuoi dati.

  5. Imposta Tipo di località su Area geografica.

  6. Imposta Località su europe-north1. Sono BUCKET_1_NAME in questa guida.

  7. Fai clic su Create (Crea).

  8. Fai clic su Bucket per tornare alla pagina Bucket Cloud Storage. Segui queste istruzioni per creare un secondo bucket, ma imposta la località su us-east1. Sono BUCKET_2_NAME in questa guida.

gcloud/gsutil

gsutil mb -p PROJECT_ID -c standard -l europe-north1 -b on gs://BUCKET_1_NAME
gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_2_NAME

Sostituisci BUCKET_1_NAME e BUCKET_2_NAME con i nomi dei bucket che vuoi creare.

Terraform

Per creare i bucket, utilizza la risorsa google_storage_bucket.

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

resource "google_storage_bucket" "bucket_1" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-1"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

resource "google_storage_bucket" "bucket_2" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-2"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

Per scoprire come applicare o rimuovere una configurazione di Terraform, vedi Lavorare con una configurazione di Terraform.

Trasferisci i contenuti nei bucket Cloud Storage

Per testare la configurazione in un secondo momento, copia le seguenti immagini da un bucket Cloud Storage pubblico ai tuoi bucket Cloud Storage.

gcloud/gsutil

  1. Fai clic su Attiva Cloud Shell.

  2. Esegui i comandi seguenti in Cloud Shell, sostituendo le variabili dei nomi dei bucket con i nomi dei bucket Cloud Storage:

gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gsutil cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/

Terraform

Per copiare elementi nel bucket, puoi utilizzare la risorsa google_storage_bucket_object.

resource "google_storage_bucket_object" "cat_image" {
  name         = "never-fetch/three-cats.jpg"
  source       = "images/three-cats.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_1.name
}

resource "google_storage_bucket_object" "dog_image" {
  name         = "love-to-fetch/two-dogs.jpg"
  source       = "images/two-dogs.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_2.name
}

In alternativa, puoi usare la risorsa null_resource.

resource "null_resource" "upload_cat_image" {
  provisioner "local-exec" {
    command = "gsutil cp -r gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/"
  }
}

resource "null_resource" "upload_dog_image" {
  provisioner "local-exec" {
    command = "gsutil cp -r gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/"
  }
}

Nella console Google Cloud, fai clic su Aggiorna nella pagina dei dettagli di ciascun bucket per verificare che il file sia stato copiato correttamente.

Rendi pubblicamente leggibili i bucket Cloud Storage

Quando rendi i bucket Cloud Storage pubblicamente leggibili, chiunque su Internet può elencare e visualizzare gli oggetti e i relativi metadati (esclusi gli ACL). Non includere informazioni sensibili nei bucket pubblici.

Per ridurre la probabilità di esposizione accidentale di informazioni sensibili, non archiviare oggetti pubblici e dati sensibili nello stesso bucket. Per ulteriori informazioni, consulta la sezione Architettura consigliata per i bucket.

Console

Per concedere a tutti gli utenti l'accesso in visualizzazione agli oggetti nei bucket, ripeti la seguente procedura per ogni bucket:

  1. In Google Cloud Console, vai alla pagina Bucket Cloud Storage.

    Vai ai bucket Cloud Storage

  2. Fai clic sul nome del bucket, quindi sulla scheda Autorizzazioni.

  3. Fai clic su Add (Aggiungi).

  4. Nella casella Nuove entità, inserisci allUsers.

  5. Nella casella Seleziona un ruolo, seleziona Cloud Storage > Visualizzatore oggetti Storage.

  6. Fai clic su Salva.

  7. Fai clic su Consenti accesso pubblico.

gcloud/gsutil

Per concedere a tutti gli utenti l'accesso in visualizzazione agli oggetti nei bucket, esegui questi comandi:

gsutil iam ch allUsers:objectViewer gs://BUCKET_1_NAME
gsutil iam ch allUsers:objectViewer gs://BUCKET_2_NAME

Terraform

Per concedere a tutti gli utenti l'accesso per visualizzare gli oggetti nei bucket, utilizza la risorsa google_storage_bucket_iam_member e specifica il membro allUsers.

# Make buckets public
resource "google_storage_bucket_iam_member" "bucket_1" {
  bucket = google_storage_bucket.bucket_1.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

resource "google_storage_bucket_iam_member" "bucket_2" {
  bucket = google_storage_bucket.bucket_2.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Prenotare un indirizzo IP esterno

Dopo aver configurato i bucket Cloud Storage, puoi prenotare un indirizzo IP esterno statico globale che il tuo pubblico utilizza per raggiungere il bilanciatore del carico.

Questo passaggio è facoltativo, ma consigliato, poiché un indirizzo IP esterno statico fornisce un singolo indirizzo a cui indirizzare il dominio.

Console

  1. Vai alla pagina Indirizzi IP esterni in Google Cloud Console.

    Vai a Indirizzi IP esterni

  2. Fai clic su Prenota indirizzo statico.

  3. Nella casella Nome, inserisci example-ip.

  4. Imposta Network Service Tier su Premium.

  5. Imposta la versione IP su IPv4.

  6. Imposta il Tipo su Globale.

  7. Fai clic su Prenota.

gcloud/gsutil

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

Prendi nota dell'indirizzo IPv4 riservato:

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

Terraform

Per prenotare un indirizzo IP esterno, utilizza la risorsa google_compute_global_address.

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

Crea un bilanciatore del carico HTTP(S) esterno con bucket di backend

Queste istruzioni riguardano la creazione di un bilanciatore del carico HTTP o HTTPS. Per creare un bilanciatore del carico HTTPS devi aggiungere una risorsa del certificato SSL al frontend del bilanciatore del carico. Per ulteriori informazioni, consulta la Panoramica dei certificati SSL.

Console

Avvia la configurazione

  1. Vai alla pagina Bilanciamento del carico in Google Cloud Console.

    Vai a Bilanciamento del carico

  2. Fai clic su Crea bilanciatore del carico.
  3. Nella scheda Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.
  4. In Per Internet o solo interno, seleziona Da Internet alle mie VM o ai miei servizi serverless.
  5. In Globale o a livello di area geografica, seleziona Bilanciatore del carico HTTP(S) globale (classico).
  6. Fai clic su Continua.

Configura il backend

  1. Nella casella Nome, inserisci http-lb.

  2. Fai clic su Configurazione backend.

  3. Fai clic sulla casella Servizi di backend e bucket di backend, quindi su Crea un bucket di backend.

  4. Nella casella Nome bucket di backend, inserisci cats.

  5. Nella casella Bucket Cloud Storage, fai clic su Sfoglia.

  6. Seleziona BUCKET_1_NAME, quindi fai clic su Seleziona. Quando si crea il bucket di backend cats, viene impostato come predefinito e vi vengono indirizzate tutte le richieste di traffico senza corrispondenza. Non puoi modificare le regole di reindirizzamento di un bucket di backend predefinito nel bilanciatore del carico.

  7. Fai clic su Create (Crea).

  8. Utilizza la stessa procedura per creare un bucket di backend denominato dogs e seleziona BUCKET_2_NAME.

  9. Fai clic su OK.

Configura regole host e percorso

Le regole host e i matcher percorso sono componenti di configurazione di una mappa URL di un bilanciatore del carico HTTP(S) esterno. Per impostare le regole per questo esempio:

  1. Fai clic su Regole host e percorso.

  2. Per dogs, inserisci * nel campo Host e /love-to-fetch/* nel campo Percorsi.

Configura il frontend

  1. Fai clic su Configurazione frontend.

  2. Verifica che le seguenti 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 avere un certificato SSL (gcloud compute ssl-certificates list) e compilare i campi come segue:

    Proprietà Valore (digita un valore o seleziona un'opzione come specificato)
    Protocollo HTTP(S)
    Livello di servizio di rete Premium
    Versione IP IPv4
    Indirizzo IP example-ip
    Porta 443
    Seleziona un certificato o creane uno nuovo
    (Facoltativo) Abilita il reindirizzamento da HTTP a HTTPS Utilizza questa casella di controllo per attivare i reindirizzamenti dalla porta 80 alla porta 443.

    L'attivazione di questa casella di controllo crea un bilanciatore del carico HTTP parziale aggiuntivo che utilizza lo stesso indirizzo IP del bilanciatore del carico HTTPS e reindirizza le richieste HTTP al frontend HTTPS del bilanciatore del carico.

    Questa casella di controllo può essere selezionata soltanto quando è selezionato il protocollo HTTPS e viene utilizzato un indirizzo IP riservato.

  3. Fai clic su Fine.

Rivedi la configurazione

  1. Fai clic su Esamina e finalizza.

  2. Esamina le regole di frontend, host e percorso e i bucket di backend.

  3. Fai clic su Crea e attendi la creazione del bilanciatore del carico.

  4. Fai clic sul nome del bilanciatore del carico (http-lb).

  5. Prendi nota dell'indirizzo IP del bilanciatore del carico, che utilizzerai nella prossima attività. In questa guida, sono definiti IP_ADDRESS.

gcloud/gsutil

Configura il backend

gcloud compute backend-buckets create dogs \
    --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create cats \
    --gcs-bucket-name=BUCKET_2_NAME

Configura la mappa URL

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \
    --path-matcher-name=path-matcher-2 \
    --new-hosts=* \
    --backend-bucket-path-rules="/love-to-fetch/*=dogs" \
    --default-backend-bucket=cats

Configura il proxy di destinazione

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

Configura la regola di forwarding

gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --load-balancing-scheme=EXTERNAL \
    --network-tier=PREMIUM \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

Terraform

Per creare il bilanciatore del carico, utilizza le risorse Terraform seguenti.

Configura il backend

Per creare il backend, utilizza la risorsa google_compute_backend_bucket.

# Create LB backend buckets
resource "google_compute_backend_bucket" "bucket_1" {
  name        = "cats"
  description = "Contains cat image"
  bucket_name = google_storage_bucket.bucket_1.name
}

resource "google_compute_backend_bucket" "bucket_2" {
  name        = "dogs"
  description = "Contains dog image"
  bucket_name = google_storage_bucket.bucket_2.name
}

Configura la mappa URL

Per creare la mappa URL, utilizza la risorsa google_compute_url_map.

# Create url map
resource "google_compute_url_map" "default" {
  name = "http-lb"

  default_service = google_compute_backend_bucket.bucket_1.id

  host_rule {
    hosts        = ["*"]
    path_matcher = "path-matcher-2"
  }
  path_matcher {
    name            = "path-matcher-2"
    default_service = google_compute_backend_bucket.bucket_1.id

    path_rule {
      paths   = ["/love-to-fetch/*"]
      service = google_compute_backend_bucket.bucket_2.id
    }
  }
}

Configura il proxy di destinazione

Per creare il proxy HTTP di destinazione, utilizza la risorsa google_compute_target_http_proxy.

# Create HTTP target 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 creare la regola di forwarding, utilizza la risorsa google_compute_global_forwarding_rule.

# Create forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}

NOTA: per cambiare la modalità in un bilanciatore del carico HTTP(S) esterno globale (classico), imposta l'attributo load_balancing_scheme su "EXTERNAL" anziché su "EXTERNAL_MANAGED".

Per scoprire come applicare o rimuovere una configurazione di Terraform, vedi Lavorare con una configurazione di Terraform.

Invia traffico al bilanciatore del carico

Molti minuti dopo aver configurato il bilanciatore del carico, puoi iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.

Console

In un browser web, vai ai seguenti indirizzi per testare il bilanciatore del carico, sostituendo IP_ADDRESS con l'indirizzo IP del bilanciatore del carico:

  • http://IP_ADDRESS/amore-a-recuperare/due-cani.jpg

  • http://IP_ADDRESS/never-fetch/tre-gatti.jpg

Se hai configurato un bilanciatore del carico HTTP, assicurati che il browser non reindirizzi automaticamente a HTTPS.

gcloud/gsutil

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

curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Limitazioni