Configurare un bilanciatore del carico delle applicazioni interno tra regioni con i bucket Cloud Storage

Questo documento illustra come creare un bilanciatore del carico delle applicazioni interno tra regioni per inoltrare le richieste di contenuti statici ai bucket Cloud Storage.

Prima di iniziare

Assicurati che la configurazione soddisfi i seguenti prerequisiti.

Installa Google Cloud CLI

Per Anteprima, alcune delle istruzioni riportate in questa guida possono essere eseguite solo utilizzando Google Cloud CLI. Per installarlo, consulta la documentazione su come installare gcloud CLI.

Puoi trovare i comandi relativi al bilanciamento del carico nel documento API e riferimenti all'interfaccia a riga di comando gcloud.

Autorizzazioni

Per seguire questa guida, devi creare bucket Cloud Storage e risorse di rete nel tuo progetto. Devi essere un proprietario o un editor del progetto oppure devi disporre dei seguenti ruoli IAM di Compute Engine:

Attività Ruolo richiesto
Crea reti, subnet e componenti del bilanciatore del carico Ruolo Amministratore rete Compute (roles/compute.networkAdmin)
Aggiungere e rimuovere regole firewall Ruolo Amministratore della sicurezza di Compute (roles/compute.securityAdmin)
Creazione di bucket di Cloud Storage Ruolo Storage Object Admin (roles/storage.objectAdmin)

Per ulteriori informazioni, consulta le seguenti guide:

Configura una risorsa del certificato SSL

Per un bilanciatore del carico delle applicazioni interno tra regioni che utilizza HTTPS come protocollo di richiesta e risposta, crea una risorsa del certificato SSL utilizzando Gestore dei certificati come descritto in uno dei seguenti documenti:

Dopo aver creato il certificato, puoi allegarlo al proxy di destinazione HTTPS.

Ti consigliamo di utilizzare un certificato gestito da Google.

Limitazioni

Le seguenti limitazioni si applicano ai bucket Cloud Storage quando vengono utilizzati come backend per un bilanciatore del carico delle applicazioni interno tra regioni:

  • L'accesso ai bucket privati non è supportato, pertanto il bucket di backend deve essere accessibile pubblicamente su internet.

  • Gli URL firmati non sono supportati.

  • L'integrazione di Cloud CDN non è disponibile quando crei bucket di backend per un bilanciatore del carico delle applicazioni interno tra regioni.

  • Quando utilizzi un bilanciatore del carico delle applicazioni interno tra regioni per accedere ai bucket di backend, è supportato solo il metodo HTTP GET. Puoi scaricare i contenuti dal bucket, ma il caricamento dei contenuti nel bucket tramite il bilanciatore del carico delle applicazioni interno tra regioni non è disponibile.

Panoramica della configurazione

Puoi configurare un bilanciatore del carico delle applicazioni interno tra regioni in più regioni, come mostrato nel seguente diagramma:

Un bilanciatore del carico delle applicazioni interno tra regioni invia il traffico a un backend Cloud Storage.
Distribuzione del traffico in Cloud Storage (fai clic per ingrandire).

Come mostrato nel diagramma dell'architettura, questo esempio crea un bilanciatore del carico delle applicazioni interno tra regioni in una rete Virtual Private Cloud (VPC) con due bucket di backend, in cui ogni bucket di backend fa riferimento a un bucket Cloud Storage. I bucket Cloud Storage si trovano nelle regioni us-east1 e asia-east1.

Questa architettura di deployment offre alta disponibilità. Se il bilanciatore del carico delle applicazioni interno tra regioni in una regione non funziona, i criteri di routing DNS indirizzano il traffico a un bilanciatore del carico delle applicazioni interno tra regioni in un'altra regione.

Configura la rete e le subnet

All'interno della rete VPC, configura una subnet in ogni regione in cui deve essere configurata la regola di inoltro dei bilanciatori del carico. Inoltre, configura un proxy-only-subnet in ogni regione in cui vuoi configurare il bilanciatore del carico.

Questo esempio utilizza la seguente rete VPC, regione e subnet:

  • Rete. La rete è una rete VPC in modalità personalizzata denominata lb-network.

  • Subnet per il bilanciatore del carico. Una subnet denominata subnet-us nella regione us-east1 utilizza 10.1.2.0/24 per il suo intervallo IP principale. Una subnet denominata subnet-asia nella regione asia-east1 utilizza 10.1.3.0/24 per il suo intervallo IP principale.

  • Subnet per i proxy Envoy. Una subnet denominata proxy-only-subnet-us-east1 nella regione us-east1 utilizza 10.129.0.0/23 per il suo intervallo IP principale. Una subnet denominata proxy-only-subnet-asia-east1 nella regione asia-east1 utilizza 10.130.0.0/23 per il suo intervallo IP principale.

È possibile accedere ai bilanciatori del carico delle applicazioni interni tra regioni da qualsiasi regione all'interno della VPC. In questo modo, i client di qualsiasi regione possono accedere a livello globale ai backend del bilanciatore del carico.

Configura le sottoreti per la regola di inoltro del bilanciatore del carico

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC.

  3. In Nome, inserisci lb-network.

  4. Nella sezione Subnet, imposta Modalità di creazione subnet su Personalizzata.

  5. Nella sezione Nuova subnet, inserisci le seguenti informazioni:

    • Nome: subnet-us
    • Seleziona una regione: us-east1
    • Intervallo di indirizzi IP: 10.1.2.0/24
  6. Fai clic su Fine.

  7. Fai clic su Aggiungi subnet.

  8. Crea un'altra subnet per la regola di inoltro del bilanciatore del carico in una regione diversa. Nella sezione Nuova subnet, inserisci le seguenti informazioni:

    • Nome: subnet-asia
    • Regione: asia-east1
    • Intervallo di indirizzi IP: 10.1.3.0/24
  9. Fai clic su Fine.

  10. Fai clic su Crea.

gcloud

  1. Crea una rete VPC personalizzata denominata lb-network con il comando gcloud compute networks create.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crea una subnet nella rete VPC lb-network nella regione us-east1 con il comando gcloud compute networks subnets create.

    gcloud compute networks subnets create subnet-us \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-east1
    
  3. Crea una subnet nella rete VPC lb-network nella regione asia-east1 con il comando gcloud compute networks subnets create.

    gcloud compute networks subnets create subnet-asia \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=asia-east1
    

Configura la subnet solo proxy

Una subnet solo proxy fornisce un insieme di indirizzi IP che Google Cloud vengono utilizzati per eseguire proxy Envoy per tuo conto. I proxy terminano le connessioni dal client e creano nuove connessioni ai backend.

Questa subnet solo proxy viene utilizzata da tutti i bilanciatori del carico regionali basati su Envoy nella stessa regione della rete VPC. Può essere attiva una sola subnet solo proxy per uno scopo specifico, per regione e per rete.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Fai clic sul nome della rete VPC che hai creato.

  3. Nella scheda Subnet, fai clic su Aggiungi subnet.

  4. Inserisci le seguenti informazioni:

    • Nome: proxy-only-subnet-us
    • Regione: us-east1
    • Intervallo di indirizzi IP: 10.129.0.0/23
  5. Fai clic su Aggiungi.

  6. Crea un'altra subnet per la regola di inoltro del bilanciatore del carico in una regione diversa. Nella scheda Subnet, fai clic su Aggiungi subnet.

  7. Inserisci le seguenti informazioni:

    • Nome: proxy-only-subnet-asia
    • Regione: asia-east1
    • Intervallo di indirizzi IP: 10.130.0.0/23
  8. Fai clic su Aggiungi.

gcloud

  1. Crea una subnet solo proxy nella regione us-east1 con il comando gcloud compute networks subnets create.

    gcloud compute networks subnets create proxy-only-subnet-us \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-east1 \
        --network=lb-network \
        --range=10.129.0.0/23
    
  2. Crea una subnet solo proxy nella regione asia-east1 con il comando gcloud compute networks subnets create.

    gcloud compute networks subnets create proxy-only-subnet-asia \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=asia-east1 \
        --network=lb-network \
        --range=10.130.0.0/23
    

Configurare una regola firewall

Questo esempio utilizza la seguente regola firewall:

  • Una regola in entrata che consente l'accesso SSH sulla porta 22 alla VM client. In questo esempio, la regola firewall è denominata fw-allow-ssh.

Console

  1. Nella console Google Cloud, vai alla pagina Policy firewall.

    Vai a Policy del firewall

  2. Fai clic su Crea regola firewall per creare la regola che consente le connessioni SSH in entrata sulla VM client:

    • Nome: fw-allow-ssh
    • Rete: lb-network
    • Direzione del traffico: in entrata
    • Azione in caso di corrispondenza: Consenti
    • Target: tag di destinazione specificati
    • Tag di destinazione: allow-ssh
    • Filtro di origine: intervalli IPv4
    • Intervalli IPv4 di origine: 0.0.0.0/0
    • Protocolli e porte:
      • Scegli Protocolli e porte specificati.
      • Seleziona la casella di controllo TCP, quindi inserisci 22 per il numero di porta.
  3. Fai clic su Crea.

gcloud

  1. Crea la regola firewall fw-allow-ssh per consentire la connettività SSH alle VM con il tag di rete allow-ssh. Se ometti --source-ranges, Google Cloud interpreta la regola come qualsiasi origine.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

Configura i bucket Cloud Storage

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

  • Crea i bucket.
  • Copia i contenuti nei bucket.

Creazione di bucket di Cloud Storage

In questo esempio, crei due bucket Cloud Storage, uno nella regione us-east1 e un altro nella regione asia-east1. Per i deployment in produzione, ti consigliamo di scegliere un bucket multiregionale, che replica automaticamente gli oggetti in più regioni Google Cloud . In questo modo, puoi migliorare la disponibilità dei tuoi contenuti e la tolleranza agli errori nell'applicazione.

Console

  1. Nella console Google Cloud, vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Fai clic su Crea.

  3. Nella casella Assegna un nome al bucket, inserisci un nome univoco globale che rispetti le linee guida per l'assegnazione dei nomi.

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

  5. Imposta Tipo di località su Area geografica.

  6. Dall'elenco delle regioni, seleziona us-east1.

  7. Fai clic su Crea.

  8. Fai clic su Bucket per tornare alla pagina Bucket Cloud Storage. Segui queste istruzioni per creare un secondo bucket, ma imposta Località su asia-east1.

gcloud

  1. Crea il primo bucket nella regione us-east1 con il comando gcloud storage buckets create.

    gcloud storage buckets create gs://BUCKET1_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    
  2. Crea il secondo bucket nella regione asia-east1 con il comando gcloud storage buckets create.

    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=asia-east1 \
        --uniform-bucket-level-access
    

Sostituisci le variabili BUCKET1_NAME e BUCKET2_NAME con i nomi dei tuoi bucket Cloud Storage.

Copiare i file grafici nei bucket Cloud Storage

Per testare la configurazione, copia un file grafico da un bucket Cloud Storage pubblico ai tuoi bucket Cloud Storage.

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

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/

Rendi pubblicamente leggibili i bucket Cloud Storage

Per rendere leggibili tutti gli oggetti in un bucket da parte di chiunque su internet, concedi al principale allUsers il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer).

Console

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

  1. Nella console Google Cloud, vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket da rendere pubblico.

  3. Seleziona la scheda Autorizzazioni nella parte superiore della pagina.

  4. Nella sezione Autorizzazioni, fai clic sul pulsante Concedi accesso. Viene visualizzata la finestra di dialogo Concedi l'accesso.

  5. Nel campo Nuove entità, inserisci allUsers.

  6. Nel campo Seleziona un ruolo, inserisci Storage Object Viewer nella casella di filtro e seleziona Visualizzatore oggetti Storage dai risultati filtrati.

  7. Fai clic su Salva.

  8. Fai clic su Consenti accesso pubblico.

gcloud

Per concedere a tutti gli utenti l'accesso in visualizzazione agli oggetti nei bucket, esegui il comando buckets add-iam-policy-binding.

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

Sostituisci le variabili dei nomi dei bucket con i nomi univoci dei bucket Cloud Storage.

Configura il bilanciatore del carico con i bucket di backend

Questa sezione mostra come creare le seguenti risorse per un bilanciatore del carico delle applicazioni interno tra regioni:

In questo esempio, puoi utilizzare HTTP o HTTPS come protocollo di richiesta-risposta tra il client e il bilanciatore del carico. Per creare un bilanciatore del carico HTTPS, devi aggiungere una risorsa del certificato SSL al frontend del bilanciatore del carico.

Per creare i componenti di bilanciamento del carico sopra menzionati utilizzando gcloud CLI:

  1. Crea due bucket di backend, uno nella regione us-east1 e un altro nella regione asia-east1, con il comando gcloud beta compute backend-buckets create. I bucket di backend hanno uno schema di bilanciamento del carico INTERNAL_MANAGED.

    gcloud beta compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED
    
    gcloud beta compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED
    
  2. Crea una mappa URL per instradare le richieste in entrata al bucket di backend con il comando gcloud compute url-maps create.

    gcloud compute url-maps create lb-map \
        --default-backend-bucket=backend-bucket-cats \
        --global
    
  3. Configura le regole host e percorso della mappa URL con il comando gcloud compute url-maps add-path-matcher.

    In questo esempio, il bucket di backend predefinito è backend-bucket-cats, che gestisce tutti i percorsi al suo interno. Tuttavia, qualsiasi richiesta che ha come target http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg utilizza il backend backend-bucket-dogs. Ad esempio, se la cartella /love-to-fetch/ esiste anche nel backend predefinito (backend-bucket-cats), il bilanciatore del carico dà la priorità al backend backend-bucket-dogs perché esiste una regola del percorso specifica per /love-to-fetch/*.

    gcloud compute url-maps add-path-matcher lb-map \
        --path-matcher-name=path-matcher-pets \
        --new-hosts=* \
        --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \
        --default-backend-bucket=backend-bucket-cats
    
  4. Crea un proxy di destinazione con il comando gcloud compute target-http-proxies create.

    Per il traffico HTTP, crea un proxy HTTP di destinazione per instradare le richieste alla mappa URL:

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

    Per il traffico HTTPS, crea un proxy HTTPS di destinazione per instradare le richieste alla mappa URL. Il proxy è la parte del bilanciatore del carico che contiene il certificato SSL per un bilanciatore del carico HTTPS. Dopo aver creato il certificato, puoi collegarlo al proxy di destinazione HTTPS.

    gcloud compute target-https-proxies create https-proxy \
        --url-map=lb-map \
        --certificate-manager-certificates=CERTIFICATE_NAME \
        --global
    

    Sostituisci CERTIFICATE_NAME con il nome del certificato SSL creato utilizzando Certificate Manager.

  5. Crea due regole di inoltro globale, una con un indirizzo IP nella regione us-east1 e un'altra con un indirizzo IP nella regione asia-east1 con il comando gcloud compute forwarding-rules create.

    Se vuoi prenotare un indirizzo IP interno statico per la regola di inoltro del bilanciatore del carico, consulta Prenotare un nuovo indirizzo IPv4 o IPv6 interno statico. La prenotazione di un indirizzo IP è facoltativa per una regola di inoltro HTTP, ma devi obbligatoriamente prenotare un indirizzo IP per una regola di inoltro HTTPS.

    In questo esempio, un indirizzo IP temporaneo è associato alla regola di inoltro HTTP del bilanciatore del carico. Un indirizzo IP temporaneo rimane costante finché esiste la regola di inoltro. Se devi eliminare la regola di forwarding e ricrearla, la regola di forwarding potrebbe ricevere un nuovo indirizzo IP.

    Per il traffico HTTP, crea le regole di forwarding globale per instradare le richieste in arrivo al proxy di destinazione HTTP:

    gcloud compute forwarding-rules create http-fw-rule-1 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-us \
        --subnet-region=us-east1 \
        --ports=80 \
        --target-http-proxy=http-proxy \
        --global-target-http-proxy \
        --global
    
    gcloud compute forwarding-rules create http-fw-rule-2 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-asia \
        --subnet-region=asia-east1 \
        --ports=80 \
        --target-http-proxy=http-proxy \
        --global-target-http-proxy \
        --global
    

    Per il traffico HTTPS, crea le regole di forwarding globale per instradare le richieste in arrivo al proxy di destinazione HTTPS:

    gcloud compute forwarding-rules create https-fw-rule-1 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-us \
        --subnet-region=us-east1 \
        --address=RESERVED_IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=https-proxy \
        --global-target-https-proxy \
        --global
    
    gcloud compute forwarding-rules create https-fw-rule-2 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-asia \
        --subnet-region=asia-east1 \
        --address=RESERVED_IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=https-proxy \
        --global-target-https-proxy \
        --global
    

Invia una richiesta HTTP al bilanciatore del carico

Invia una richiesta da una VM client interna alla regola di inoltro del bilanciatore del carico.

Ottieni l'indirizzo IP della regola di inoltro del bilanciatore del carico

  1. Ottieni l'indirizzo IP della regola di inoltro del bilanciatore del carico (http-fw-rule-1), che si trova nella regione us-east1.

    gcloud compute forwarding-rules describe http-fw-rule-1 \
        --global
    
  2. Ottieni l'indirizzo IP della regola di inoltro del bilanciatore del carico (http-fw-rule-2), che si trova nella regione asia-east1.

    gcloud compute forwarding-rules describe http-fw-rule-2 \
        --global
    

Crea una VM client per testare la connettività

  1. Crea una VM client nella regione us-east1.

    gcloud compute instances create client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=lb-network \
        --subnet=subnet-us \
        --zone=us-east1-c \
        --tags=allow-ssh
    
  2. Stabilisci una connessione SSH alla VM client.

    gcloud compute ssh client-a --zone=us-east1-c
    
  3. In questo esempio, il bilanciatore del carico delle applicazioni interno tra regioni ha indirizzi IP virtuali (VIP) frontend sia nelle regioni us-east1 che asia-east1 della rete VPC. Invia una richiesta HTTP al VIP in una delle due regioni utilizzando curl.

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

Testare l'alta disponibilità

  1. Elimina la regola di inoltro (http-fw-rule-1) nella regione us-east1 per simulare un'interruzione del servizio a livello di regione e controlla se il client nella regione us-east può ancora accedere ai dati dal bucket di backend.

    gcloud compute forwarding-rules delete http-fw-rule-1 \
        --global
    
  2. Invia una richiesta HTTP all'IP virtuale della regola di inoltro in entrambe le regioni utilizzando curl.

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

    Se hai inviato una richiesta HTTP al VIP nella regione us-east1, i criteri di instradamento DNS rilevano che questo VIP non risponde e restituiscono al client il VIP più ottimale successivo (in questo esempio, asia-east1), garantendo che l'applicazione rimanga attiva anche durante le interruzione regionali.

Passaggi successivi