Restituisci risposte più rapide agli utenti di tutto il mondo eseguendo il deployment dei servizi in più regioni e indirizzando gli utenti alla regione più vicina. Il deployment in più regioni offre bassa latenza e maggiore disponibilità in caso di interruzioni a livello di regione.
Poiché i servizi Cloud Run vengono sottoposti a deployment in singole regioni, devi eseguire il deployment del servizio in più regioni e poi configurare il bilanciamento del carico globale per il servizio.
Esegui il deployment del servizio in più regioni
Puoi eseguire il deployment dello stesso servizio in più regioni utilizzando uno dei seguenti metodi:
- Ripeti i passaggi per l'implementazione in una singola regione.
- Esegui il deployment di un servizio multiregionale.
Esegui il deployment di un servizio multiregionale
Questa sezione mostra come eseguire il deployment e configurare un servizio multiregionale da un singolo comando gcloud CLI o un file YAML.
gcloud
Per creare e distribuire un servizio multiregionale, esegui il comando
gcloud beta run deploy
utilizzando il flag--regions
:gcloud beta run deploy
SERVICE_NAME
\ --image=IMAGE_URL
\ --regions=REGIONS
Sostituisci quanto segue:
SERVICE_NAME
: il nome del servizio multiregionale che vuoi eseguire il deployment.IMAGE_URL
: un riferimento all'immagine del container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest
.REGIONS
: L'elenco delle più regioni in cui vuoi eseguire il deployment. Ad esempio,europe-west1,asia-east1
.
YAML
Crea il file YAML per il tuo servizio utilizzando l'attributo
run.googleapis.com/regions
per impostare le più regioni in cui vuoi eseguire il deployment del servizio:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
spec: template: spec: containers: - image:IMAGE_URL
Sostituisci quanto segue:
SERVICE_NAME
: il nome del servizio multiregionale a cui vuoi eseguire il deployment.REGIONS
: l'elenco delle più regioni che vuoi aggiornare. Ad esempio,europe-west1,asia-east1
.IMAGE_URL
: un riferimento all'immagine del container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest
.
Crea il servizio utilizzando il seguente comando:
gcloud beta run multi-region-services replace service.yaml
Aggiorna un servizio multiregionale
Questa sezione mostra come aggiungere o rimuovere regioni da un servizio multiregionale da un singolo comando gcloud CLI o da un file YAML.
gcloud
Per aggiungere o rimuovere regioni da un servizio multiregionale, esegui il comando
gcloud beta run multi-region-services update
.
Per aggiungere il servizio multiregionale a una o più regioni aggiuntive, utilizza il flag
--add-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --add-regions=REGIONS
Per rimuovere il servizio multiregionale da una o più regioni, utilizza il flag
--remove-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --remove-regions=REGIONS
Sostituisci quanto segue:
SERVICE_NAME
: il nome del servizio multiregionale che vuoi aggiornare.REGIONS
: la regione o le regioni a cui vuoi aggiungere o da cui vuoi rimuovere il servizio. Ad esempio,europe-west1,asia-east1
.
YAML
Per aggiornare un servizio multiregionale esistente, scarica la relativa configurazione YAML:
gcloud beta run multi-region-services describe SERVICE_NAME --format export > service.yaml
Aggiorna l'attributo
run.googleapis.com/regions
per aggiungere o rimuovere l'elenco delle regioni in cui vuoi che venga eseguito il deployment del servizio:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
Sostituisci quanto segue:
SERVICE_NAME
: il nome del servizio multiregionale a cui vuoi eseguire il deployment.REGIONS
: Il nuovo elenco di più regioni in cui vuoi che venga eseguito il deployment della revisione del servizio.
Aggiorna il servizio utilizzando il seguente comando:
gcloud beta run multi-region-services replace service.yaml
Elimina un servizio multiregionale
Per eliminare un servizio multiregionale, esegui il comando
gcloud beta run multi-region-services delete
:gcloud beta run multi-region-services delete
SERVICE_NAME
Sostituisci
SERVICE_NAME
con il nome del servizio multiregionale che vuoi eliminare.
Configura il bilanciamento del carico globale
Questa sezione mostra come configurare un bilanciatore del carico delle applicazioni esterno con un dominio protetto da un certificato TLS gestito che punta a un indirizzo IP anycast globale, che indirizza gli utenti al data center Google più vicino che esegue il deployment del tuo servizio.
L'architettura descritta nelle sezioni seguenti non instrada automaticamente le richieste a un'altra regione quando un servizio Cloud Run regionale non risponde o restituisce errori. Per aumentare la disponibilità del tuo servizio multiregionale, puoi configurare il rilevamento di outlier per identificare i servizi Cloud Run non integri in base al tasso di errori HTTP e deviare alcune richieste verso un'altra regione.
Crea un bilanciatore del carico
La creazione di un bilanciatore del carico delle applicazioni esterno comporta la creazione di varie risorse di rete e il loro collegamento:
Interfaccia a riga di comando gcloud
- Prenota un indirizzo IP statico in modo da non dover aggiornare i record DNS
quando ricrei il bilanciatore del carico.
Nel comando precedente, sostituisci SERVICE_IP con un nome per la risorsa dell'indirizzo IP (ad es.gcloud compute addresses create --global SERVICE_IP
myservice-ip
).Questo indirizzo IP è un indirizzo IPv4 anycast globale che indirizza al data center o al punto di presenza Google più vicino ai tuoi visitatori.
-
Crea un servizio di backend.
gcloud compute backend-services create --global BACKEND_NAME
Nel comando precedente, sostituisci BACKEND_NAME con un nome che vuoi assegnare al servizio di backend (ad es.
myservice-backend
). - Crea una mappa URL.
gcloud compute url-maps create URLMAP_NAME --default-service=BACKEND_NAME
Sostituisci URLMAP_NAME con un nome che vuoi assegnare alla mappa URL (ad es.
myservice-urlmap
). - Crea un certificato TLS gestito per il tuo dominio per pubblicare il traffico HTTPS. Sostituisci example.com con il nome del tuo dominio.
gcloud compute ssl-certificates create CERT_NAME \ --domains=example.com
Sostituisci CERT_NAME con il nome che vuoi assegnare al certificato SSL gestito (ad es.
myservice-cert
). - Crea un proxy HTTPS di destinazione.
gcloud compute target-https-proxies create HTTPS_PROXY_NAME \ --ssl-certificates=CERT_NAME \ --url-map=URLMAP_NAME
Sostituisci HTTPS_PROXY_NAME con il nome che vuoi assegnare al proxy HTTPS di destinazione (ad es.
myservice-https
). - Crea una regola di forwarding che colleghi le risorse di rete che hai creato
all'indirizzo IP.
gcloud compute forwarding-rules create --global FORWARDING_RULE_NAME \ --target-https-proxy=HTTPS_PROXY_NAME \ --address=SERVICE_IP \ --ports=443
Sostituisci FORWARDING_RULE_NAME con il nome della risorsa della regola di forwarding che vuoi creare (ad es.
myservice-lb
).
Terraform
In alternativa ai passaggi descritti in questa sezione, puoi utilizzare il modulo Terraform del bilanciatore del carico HTTP globale.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
-
Configura l'indirizzo IP:
Configura il nome della risorsa dell'indirizzo IP in modo che sia
myservice-service-ip
. Puoi modificare questo valore con il tuo. Questo indirizzo IP è un indirizzo IPv4 anycast globale che indirizza al data center o al punto di presenza Google più vicino ai tuoi visitatori. -
Crea e configura il servizio di backend:
Questa risorsa configura il servizio di backend in modo che venga denominato
myservice-backend
. Puoi modificare questo valore con il tuo. -
Configura la mappa URL:
Collega la risorsa del servizio di backend (
myservice-backend
) alla nuova risorsa della mappa URL (myservice-lb-urlmap
). Puoi modificarli con i tuoi valori. -
Crea un certificato TLS gestito per il tuo dominio per pubblicare il traffico HTTPS. Sostituisci
example.com
con il tuo nome di dominio nella risorsagoogle_compute_managed_ssl_certificate
: -
Configura il proxy HTTPS:
Crea la risorsa
google_compute_target_https_proxy
con il nome di destinazionemyservice-https-proxy
e collega le risorse di mapping degli URL (myservice-lb-urlmap
) e del certificato TLS (myservice-ssl-cert
) create in precedenza. Puoi modificarle con i tuoi valori. -
Configura la regola di forwarding:
Crea la risorsa
google_compute_global_forwarding_rule
con il nome di destinazionemyservice-https-proxy
e collega il proxy HTTPS di destinazione creato in precedenza (myservice-https-proxy
) e la risorsa indirizzo IP (myservice-service-ip
). Puoi modificarli con i tuoi valori. -
Applica questa configurazione:
Per applicare la configurazione di Terraform in un progetto Google Cloud , completa i passaggi nelle sezioni seguenti.
Prepara Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform.
Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione di Terraform deve avere la propria directory (chiamata anche modulo radice).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file viene denominatomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.
Copia il codice campione nel file
main.tf
appena creato.(Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
- Rivedi e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi effettuare questa operazione una sola volta per directory.
terraform init
(Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
Rivedi la configurazione e verifica che le risorse che Terraform creerà o
aggiornerà corrispondano alle tue aspettative:
terraform plan
Apporta le correzioni necessarie alla configurazione.
-
Applica la configurazione di Terraform eseguendo il comando seguente e inserendo
yes
al prompt:terraform apply
Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).
- Apri il tuo Google Cloud progetto per visualizzare i risultati. Nella console Google Cloud , vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
Configura i gruppi di endpoint di rete regionali
Per ogni regione in cui hai eseguito il deployment nel passaggio precedente, devi creare gruppi di endpoint di rete (NEG) serverless e aggiungerli al servizio di backend utilizzando le seguenti istruzioni:
Interfaccia a riga di comando gcloud
-
Crea un gruppo di endpoint di rete per il servizio Cloud Run in
REGION
:gcloud compute network-endpoint-groups create NEG_NAME \ --region=REGION \ --network-endpoint-type=SERVERLESS \ --cloud-run-service=SERVICE_NAME
Sostituisci quanto segue:
- NEG_NAME con il nome della risorsa del gruppo di endpoint di rete. (ad es. `myservice-neg-uscentral1`)
- REGION con la regione in cui è stato eseguito il deployment del servizio.
- SERVICE_NAME con il nome del tuo servizio.
-
Aggiungi il gruppo di endpoint di rete al servizio di backend:
gcloud compute backend-services add-backend --global BACKEND_NAME \ --network-endpoint-group-region=REGION \ --network-endpoint-group=NEG_NAME
Specifica il NEG_NAME creato nel passaggio precedente per la regione.
-
Ripeti i passaggi precedenti per ogni regione.
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
-
Configura un gruppo di endpoint di rete con il nome
myservice-neg
per il servizio Cloud Run per ogni regione specificata nella variabilerun_regions
: -
Configura un servizio di backend per collegare il gruppo di endpoint di rete (
myservice-neg
):
Configurare i record DNS sul tuo dominio
Per indirizzare il tuo nome di dominio alla regola di forwarding che hai creato, aggiorna i relativi record DNS con l'indirizzo IP che hai creato.
Trova l'indirizzo IP riservato del bilanciatore del carico eseguendo questo comando:
gcloud compute addresses describe SERVICE_IP \ --global \ --format='value(address)'
Sostituisci SERVICE_IP con il nome dell'indirizzo IP che hai creato in precedenza. Questo comando stampa l'indirizzo IP nell'output.
Aggiorna i record DNS del tuo dominio aggiungendo un record
A
con questo indirizzo IP.
Configurare il segmento di pubblico personalizzato se utilizzi servizi autenticati
I servizi autenticati sono protetti da IAM. Questi servizi Cloud Run richiedono l'autenticazione del client che dichiara il destinatario previsto di una richiesta al momento della generazione delle credenziali (il pubblico).
Il pubblico è in genere l'URL completo del servizio di destinazione, che per impostazione predefinita per i servizi Cloud Run è un URL generato che termina con run.app
. Tuttavia, in un deployment multiregionale,
un client non può sapere in anticipo a quale servizio regionale verrà indirizzata una richiesta.
Pertanto, per un deployment multiregionale, configura il servizio in modo che utilizzi
segmenti di pubblico personalizzati.
Attendi il provisioning del bilanciatore del carico
Dopo aver configurato il dominio con l'indirizzo IP del bilanciatore del carico, attendi la propagazione dei record DNS. Allo stesso modo, attendi che il certificato TLS gestito venga emesso per il tuo dominio e sia pronto per iniziare a gestire il traffico HTTPS a livello globale.
Potrebbero essere necessari fino a 30 minuti prima che il bilanciatore del carico inizi a gestire il traffico.
Quando è pronto, visita l'URL del tuo sito web con il prefisso https://
per provarlo.
Verifica stato
Per controllare lo stato della propagazione del record DNS, utilizza l'utilità da riga di comando
dig
:dig A +short example.com
L'output mostra l'indirizzo IP che hai configurato nei record DNS.
Controlla lo stato dell'emissione del certificato gestito eseguendo questo comando:
gcloud compute ssl-certificates describe CERT_NAME
Sostituisci CERT_NAME con il nome scelto in precedenza per la risorsa del certificato SSL.
L'output mostra una riga contenente
status: ACTIVE
.
Configurazione del reindirizzamento da HTTP a HTTPS
Per impostazione predefinita, una regola di forwarding gestisce un solo protocollo e pertanto
le richieste ai tuoi endpoint http://
rispondono con "404 Not Found". Se
devi reindirizzare le richieste ai tuoi URL http://
al protocollo https://
, crea una mappa URL e una regola di forwarding aggiuntive seguendo queste istruzioni:
Interfaccia a riga di comando gcloud
-
Crea una mappa URL con una regola di reindirizzamento.
gcloud compute url-maps import HTTP_URLMAP_NAME \ --global \ --source /dev/stdin <<EOF name: HTTP_URLMAP_NAME defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True EOF
Sostituisci HTTP_URLMAP_NAME con il nome della risorsa della mappa URL che creerai (ad esempio,
myservice-httpredirect
). -
Crea un proxy HTTP di destinazione con la mappa URL.
gcloud compute target-http-proxies create HTTP_PROXY_NAME \ --url-map=HTTP_URLMAP_NAME
Sostituisci HTTP_PROXY_NAME con il nome del proxy HTTP di destinazione che creerai (ad esempio,
myservice-http
). -
Crea una regola di forwarding sulla porta
80
con lo stesso indirizzo IP riservato.gcloud compute forwarding-rules create --global HTTP_FORWARDING_RULE_NAME \ --target-http-proxy=HTTP_PROXY_NAME \ --address=SERVICE_IP \ --ports=80
Sostituisci HTTP_FORWARDING_RULE_NAME con il nome della nuova regola di forwarding che creerai (ad esempio,
myservice-httplb
).
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
-
Crea una risorsa mappa URL con una regola di reindirizzamento:
-
Crea un proxy HTTP di destinazione con la risorsa mappa URL appena creata (
myservice-https-urlmap
): -
Crea una regola di forwarding sulla porta
80
con la stessa risorsa di indirizzo IP riservato (myservice-http-proxy
):
Utilizzare le sottoscrizioni push Pub/Sub autenticate con il deployment multiregionale
Per impostazione predefinita, un servizio Pub/Sub invia i messaggi agli endpoint push nella stessa Google Cloud regione in cui il servizio Pub/Sub archivia i messaggi. Per una soluzione alternativa a questo comportamento, consulta Utilizzo di una sottoscrizione push Pub/Sub autenticata con un deployment Cloud Run multiregionale.
Configura un failover manuale
Per configurare manualmente il failover del traffico in una regione integra, modifica la mappa URL del bilanciatore del carico delle applicazioni esterno globale.
Per aggiornare la mappa URL del bilanciatore del carico delle applicazioni esterno globale, rimuovi il NEG dal servizio di backend utilizzando il flag
--global
:gcloud compute backend-services remove-backend
BACKEND_NAME
\ --network-endpoint-group=NEG_NAME
\ --network-endpoint-group-region=REGION
\ --globalSostituisci quanto segue:
BACKEND_NAME
: il nome del servizio di backend.NEG_NAME
: il nome della risorsa del gruppo di endpoint di rete, ad esempiomyservice-neg-uscentral1
.REGION
: la regione in cui è stato creato il NEG e da cui vuoi rimuovere il servizio. Ad esempio,europe-west1,asia-east1
.
Per verificare che una regione integra stia ora gestendo il traffico, vai su https://
<domain-name>
.