Puoi fornire risposte più rapide ai tuoi utenti in tutto il mondo eseguendo il deployment di servizi in più regioni e indirizzandoli 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 implementati 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 eseguire il deployment 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 multiregione da un singolo comando gcloud CLI o da un file YAML.
gcloud
Per creare ed eseguire il deployment di un servizio multi-regione, 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 multiregione che vuoi implementare.IMAGE_URL
: un riferimento all'immagine del contenitore, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest
.REGIONS
: l'elenco di più regioni in cui eseguire il deployment. Ad esempio,us-central1,asia-east1
.
YAML
Crea il file YAML per il servizio utilizzando l'attributo
run.googleapis.com/regions
per impostare le più regioni in cui 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 multiregione in cui vuoi eseguire il deployment.REGIONS
: l'elenco di più regioni che vuoi aggiornare. Ad esempio,us-central1,asia-east1
.IMAGE_URL
: un riferimento all'immagine del contenitore, 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
Aggiornare un servizio multiregionale
Questa sezione spiega come aggiungere o rimuovere regioni da un servizio multiregione da un singolo comando gcloud CLI o da un file YAML.
gcloud
Per aggiungere o rimuovere regioni da un servizio multiregione, 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 multiregione che vuoi aggiornare.REGIONS
: la regione o le regioni a cui vuoi aggiungere o rimuovere il servizio. Ad esempio,us-central1,asia-east1
.
YAML
Per aggiornare un servizio multi-regione 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 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
Sostituisci quanto segue:
SERVICE_NAME
: il nome del servizio multiregione in cui vuoi eseguire il deployment.REGIONS
: il nuovo elenco di più regioni in cui vuoi eseguire il deployment della revisione del servizio.
Aggiorna il servizio utilizzando il seguente comando:
gcloud beta run multi-region-services replace service.yaml
Eliminare un servizio multiregionale
Per eliminare un servizio multiregione, 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 multiregione 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 rimanda a un indirizzo IP anycast globale, che indirizza gli utenti al data center Google più vicino in cui è eseguito il deployment del servizio.
L'architettura descritta nelle sezioni seguenti non inoltra automaticamente le richieste a una regione diversa quando un servizio Cloud Run regionale non risponde o restituisce errori. Per aumentare la disponibilità del servizio multiregionale, puoi configurare il rilevamento degli outlier per identificare i servizi Cloud Run non funzionanti in base al loro tasso di errori HTTP e inoltrare alcune richieste a un'altra regione.
Crea un bilanciatore del carico
La creazione di un bilanciatore del carico esterno prevede la creazione di diverse risorse di rete e il loro collegamento:
Interfaccia a riga di comando gcloud
- Prenota un indirizzo IP statico per non dover aggiornare i record DNS
quando ricrei il bilanciatore del carico.
Nel comando riportato sopra, sostituisci SERVICE_IP con un nome per la risorsa indirizzo IP (ad es.gcloud compute addresses create --global SERVICE_IP
myservice-ip
).Questo indirizzo IP è un indirizzo IPv4 anycast globale che indirizza al datacenter o al punto di presenza di 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 il 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 il nome che vuoi assegnare alla mappa di URL (ad es.
myservice-urlmap
). - Crea un certificato TLS gestito per il tuo dominio per pubblicare il traffico HTTPS. Sostituisci example.com con il tuo nome di 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 regola di inoltro 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.
Aggiungi quanto segue al tuo file Terraform (ad esempio main.tf
):
-
Configura l'indirizzo IP:
Configura il nome della risorsa dell'indirizzo IP su
myservice-service-ip
. Puoi sostituirlo con il tuo valore. Questo indirizzo IP è un indirizzo IPv4 anycast globale che indirizza al data center o al punto di presenza di Google più vicino ai tuoi visitatori. -
Crea e configura il servizio di backend:
Questa risorsa configura il servizio di backend con il nome
myservice-backend
. Puoi sostituirlo con il tuo valore. -
Configura la mappa URL:
Collega la risorsa del servizio di backend (
myservice-backend
) alla nuova risorsa mappa di URL (myservice-lb-urlmap
). Puoi sostituirli 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 targetmyservice-https-proxy
e connette il certificato TLS (myservice-ssl-cert
) e le risorse di mappatura degli URL (myservice-lb-urlmap
) creati in precedenza. Puoi sostituirli 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 target del proxy HTTPS (myservice-https-proxy
) e la risorsa indirizzo IP (myservice-service-ip
) creati in precedenza. Puoi sostituirli con i tuoi valori. -
Applica questa configurazione:
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.
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 farlo 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 una propria directory (chiamata anche modulo principale).
-
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 è 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
main.tf
appena creato.Se vuoi, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o
aggiornare corrispondano alle tue aspettative:
terraform plan
Apporta le correzioni necessarie alla configurazione.
-
Applica la configurazione di Terraform eseguendo il seguente comando e inserendo
yes
al prompt:terraform apply
Attendi che Terraform mostri il messaggio "Applicazione completata".
- Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
Configurare i gruppi di endpoint di rete a livello di regione
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 [region][loc] in cui è stato eseguito il deployment del servizio.
- SERVICE_NAME con il nome del 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
-
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
):
Configura 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 il seguente comando:
gcloud compute addresses describe \ --global SERVICE_IP \ --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.
Configura 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 segmento di 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 multi-regione,
un client non può sapere in anticipo a quale servizio regionale verrà indirizzata una richiesta.
Pertanto, per un deployment multi-regione, configura il servizio in modo da utilizzare
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. Analogamente, attendi che il certificato TLS gestito venga emesso per il tuo dominio e che sia tutto 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 è tutto pronto, visita l'URL del tuo sito web con il prefisso https://
per provarlo.
Verifica stato
Per controllare lo stato della propagazione dei record DNS, utilizza l'
dig
utilità a riga di comando:dig A +short example.com
L'output mostra l'indirizzo IP configurato nei record DNS.
Controlla lo stato dell'emissione dei certificati gestiti eseguendo il seguente 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, di conseguenza, le richieste ai tuoi endpoint http://
rispondono con "404 Not Found". Se
devi reindirizzare le richieste ai tuoi URL http://
al protocollo https://
, crea un'altra mappa URL e una regola di forwarding seguendo le istruzioni riportate di seguito:
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 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
-
Crea una risorsa mappa URL con una regola di reindirizzamento:
-
Crea un proxy HTTP di destinazione con la risorsa mappa di URL appena creata (
myservice-https-urlmap
): -
Crea una regola di forwarding sulla porta
80
con la stessa risorsa indirizzo IP riservato (myservice-http-proxy
):
Utilizzare gli abbonamenti push Pub/Sub autenticati con il deployment multiregione
Per impostazione predefinita, un servizio Pub/Sub invia i messaggi agli endpoint push nella stessa regione Google Cloud 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 multiregione.