Questo documento descrive come configurare ed eseguire il deployment di un servizio Cloud Run multiregionale ad alta affidabilità con funzionalità di failover e failback automatici.
Service Health di Cloud Run espone l'integrità aggregata del servizio in ogni regione utilizzando i gruppi di endpoint di rete (NEG) serverless.
Per instradare il traffico pubblico (esterno), configura Service Health con un bilanciatore del carico delle applicazioni esterno globale.
Per instradare il traffico privato (interno), configura Service Health con un bilanciatore del carico delle applicazioni interno tra regioni.
Come funziona
Il failover automatico instrada le richieste in entrata da un bilanciatore del carico delle applicazioni esterno globale o da un bilanciatore del carico delle applicazioni interno tra regioni tramite NEG serverless regionali ai tuoi servizi Cloud Run. Le singole istanze di container eseguono probe di idoneità, che Cloud Run aggrega per determinare lo stato di integrità complessivo di ogni servizio regionale.
Un servizio Cloud Run in una regione è integro e riceve traffico se il 60% o più delle sue istanze supera i probe di idoneità. Se una regione non è più integra, il bilanciatore del carico cambia percorso automaticamente per il traffico verso una regione integra. Una volta ripristinata la regione non integra, il bilanciatore del carico ripristina gradualmente il traffico verso questa regione.
Limitazioni
A Cloud Run Service Health si applicano le seguenti limitazioni:
- Devi configurare almeno un'istanza minima a livello di servizio o di revisione per regione per calcolare l'integrità. Puoi anche utilizzare la metrica Conteggio istanze container in Cloud Monitoring per stimare il numero minimo di istanze richieste per le tue regioni.
- I failover richiedono almeno due servizi di regioni diverse. In caso contrario, se un servizio non va a buon fine, viene visualizzato il messaggio di errore
no healthy upstream. - Non puoi configurare una maschera URL o dei tag nei NEG serverless.
- Se un servizio Cloud Run viene eliminato, Cloud Run non segnala uno stato non integro al bilanciatore del carico.
- L'avvio di una nuova istanza non conteggia il primo probe di idoneità, quindi una richiesta potrebbe essere indirizzata brevemente a un servizio appena avviato prima di diventare non integro.
- L'integrità del servizio Cloud Run viene calcolata in tutte le istanze.
Le revisioni senza probe e le istanze appena avviate che non hanno completato il primo probe di idoneità vengono trattate come sconosciute. Durante una transizione di tutto il traffico tra le revisioni, Service Health può segnalare brevemente
UNKNOWNmentre le nuove istanze vengono avviate e completano il primo probe di idoneità. Il bilanciatore del carico tratta le istanze sconosciute come integre. - Il calcolo di Service Health potrebbe produrre risultati imprecisi se le istanze si arrestano in modo anomalo rapidamente.
Best practice
Puoi utilizzare una combinazione di probe di idoneità, suddivisione del traffico e istanze minime per eseguire implementazioni sicure e graduali. In questo modo puoi verificare l'integrità di una nuova revisione in un'unica regione "canary" prima di promuoverla, assicurandoti che il bilanciatore del carico invii il traffico solo ai backend regionali integri.
Quando configuri i probe sulla tua applicazione, aggiungi un endpoint HTTP/1 (l'impostazione predefinita di Cloud Run, non HTTP/2) nel codice del servizio per rispondere al probe. Il nome dell'endpoint (ad esempio /startup, /health o /are_you_ready) deve corrispondere a path nella configurazione del probe. Gli endpoint dei controlli di integrità HTTP sono accessibili esternamente e seguono gli stessi principi di qualsiasi altro endpoint di servizio HTTP esposto esternamente.
Procedura di implementazione consigliata
Puoi implementare una revisione del servizio su un servizio Cloud Run esistente che non utilizza un probe di idoneità o Service Health di Cloud Run. Segui questa procedura una regione alla volta per eseguire il deployment sicuro di una nuova revisione:
Esegui il deployment della nuova revisione in un'unica regione "canary" con un probe di idoneità configurato.
Invia una piccola quantità di traffico (ad esempio l'1%) alla nuova revisione.
Utilizza un numero minimo di istanze diverso da zero a livello di servizio, anziché a livello di revisione.
Controlla la metrica del probe di idoneità (
run.googleapis.com/container/instance_count_with_readiness) per assicurarti che le nuove istanze siano integre.Aumenta gradualmente la percentuale di traffico verso la nuova revisione. Man mano che aumenti il traffico, monitora la metrica di integrità del servizio Cloud Run regionale (
run.googleapis.com/service_health_count), utilizzata dal bilanciatore del carico. Il report sull'integrità del servizio Cloud Run mostraUNKNOWNfinché non viene instradato traffico sufficiente alla nuova revisione.Una volta che la revisione riceve il 100% del traffico e l'integrità del servizio Cloud Run regionale è stabile e integra, ripeti questa procedura per tutte le altre regioni.
Per i servizi che utilizzano già Service Health di Cloud Run, puoi eseguire un'implementazione in due passaggi in parallelo tra le regioni per evitare di segnalare UNKNOWN:
Instrada una parte del traffico alla nuova revisione. Attendi l'avvio delle nuove istanze e il superamento dei probe di idoneità.
Instrada il 100% del traffico alla nuova revisione.
Tutorial: configura il failover automatico
Questo tutorial ti guida nel deployment di un'applicazione Go di esempio in due regioni, nella configurazione di un bilanciatore del carico delle applicazioni esterno globale con NEG serverless e nel test del failover automatico.
In questo tutorial, imparerai a:
- Prepara l'applicazione di esempio
- Distribuisci i servizi Cloud Run in due regioni con sonde di prontezza
- Configura un bilanciatore del carico delle applicazioni esterno globale
- Aggiungi i tuoi servizi tramite il NEG serverless
- Testa il failover
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.
- 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Abilita le API Artifact Registry, Cloud Build, Cloud Run Admin, Network Services e Compute Engine, se non sono già abilitate.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.- Installa e inizializza gcloud CLI.
- Aggiorna i componenti:
gcloud components update
- Imposta le variabili di configurazione utilizzate in questo tutorial:
Sostituisci PROJECT_ID con l'ID progetto Google Cloud .PROJECT_ID= gcloud config set core/project PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") SERVICE=health-example REGION_A=us-west1 REGION_B=europe-west1
Imposta i ruoli richiesti
Per eseguire il deployment dall'origine con la build, tu o il tuo amministratore dovete concedere al account di servizio Cloud Build i seguenti ruoli IAM.
Fai clic per visualizzare i ruoli richiesti per il account di servizio Cloud Build
Cloud Build utilizza automaticamente l'account di servizio predefinito di Compute Engine come account di servizio Cloud Build predefinito per creare il codice sorgente e la risorsa Cloud Run, a meno che non esegui l'override di questo comportamento. Per consentire a Cloud Build di creare le tue origini, chiedi all'amministratore di concedere il ruolo Cloud Run Builder (roles/run.builder) al account di servizio Compute Engine predefinito nel tuo progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Sostituisci PROJECT_NUMBER con il tuo numero di progetto Google Cloude PROJECT_ID con il tuo ID progetto Google Cloud. Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, consulta Creazione e gestione dei progetti.
La concessione del ruolo Cloud Run Builder al account di servizio predefinito di Compute Engine richiede un paio di minuti per la propagazione.
Per ottenere le autorizzazioni necessarie alla tua identità di servizio per accedere al file e al bucket Cloud Storage, chiedi all'amministratore di concedere all'identità di servizio il ruolo Storage Admin (roles/storage.admin).
Per maggiori dettagli su ruoli e autorizzazioni di Cloud Storage, consulta IAM per Cloud Storage.
Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.
Prepara l'applicazione di esempio
Per recuperare l'esempio di codice da utilizzare:
Clona il repository di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/golang-samplesPassa alla directory che contiene il codice campione di Cloud Run:
cd golang-samples/run/service-health
Esegui il deployment del servizio Cloud Run in due regioni con i probe di idoneità
I failover richiedono almeno due servizi di regioni diverse. Per eseguire il deployment dei servizi dal codice sorgente in due regioni diverse con probe di idoneità, esegui i comandi seguenti. Se preferisci utilizzare Terraform, consulta Esegui il deployment di un servizio multiregionale e assicurati di aggiungere la configurazione del probe di idoneità.
Esegui il deployment del servizio
health-exampleinus-west1eeurope-west1dalla directory di origine. Devi avere almeno un'istanza minima per configurare Service Health con i probe di idoneità:gcloud run deploy $SERVICE \ --source=. \ --regions=$REGION_A,$REGION_B \ --min=10 \ --readiness-probe httpGet.path="/are_you_ready"Rispondi a eventuali prompt per installare le API richieste digitando
yquando richiesto. Devi eseguire questa operazione una sola volta per un progetto. Rispondi agli altri prompt fornendo la piattaforma e la regione, se non hai impostato i valori predefiniti per queste, come descritto nella sezione Prima di iniziare.
Configura un bilanciatore del carico delle applicazioni esterno globale
Per configurare un bilanciatore del carico delle applicazioni esterno globale per instradare il traffico tra us-west1 e europe-west1, segui questi passaggi. Se preferisci eseguire il provisioning del bilanciatore del carico utilizzando Terraform, consulta Crea un bilanciatore del carico delle applicazioni esterno globale.
Crea un servizio di backend:
gcloud compute backend-services create $SERVICE-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --globalConfigura un indirizzo IP esterno statico globale per raggiungere il bilanciatore del carico:
gcloud compute addresses create $SERVICE-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --globalCrea una mappa URL per instradare le richieste in entrata al servizio di backend:
gcloud compute url-maps create $SERVICE-lb \ --default-service $SERVICE-bsCrea un proxy HTTP di destinazione per instradare le richieste alla mappa URL:
gcloud compute target-http-proxies create $SERVICE-hp \ --url-map=$SERVICE-lbCrea una regola di forwarding per indirizzare le richieste in entrata al proxy:
gcloud compute forwarding-rules create $SERVICE-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=$SERVICE-ip \ --target-http-proxy=$SERVICE-hp \ --global \ --ports=80
Aggiungi i tuoi servizi tramite un NEG serverless
Per aggiungere i servizi di cui hai eseguito il deployment in us-west1 e europe-west1 utilizzando il NEG serverless, segui questi passaggi. Se preferisci eseguire il provisioning dei NEG serverless utilizzando Terraform, consulta Configura i gruppi di endpoint di rete a livello di regione.
Crea un gruppo di endpoint di rete (NEG) serverless per il tuo servizio Cloud Run in
us-west1eeurope-west1:gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_A \ --region $REGION_A \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEgcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_B \ --region $REGION_B \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEAggiungi il NEG serverless come backend ai servizi di backend in
us-west1eeurope-west1:gcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_A \ --network-endpoint-group-region=$REGION_Agcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_B \ --network-endpoint-group-region=$REGION_B
Per ulteriori opzioni di configurazione, consulta Configura un bilanciatore del carico delle applicazioni esterno globale con Cloud Run.
Segnala lo stato di integrità regionale
Per aggregare lo stato di integrità del servizio Cloud Run regionale e segnalare uno stato integro o non integro al bilanciatore del carico, segui questi passaggi:
Esegui il deployment di una revisione del servizio Cloud Run in più regioni con una o più istanze minime. Esegui questo comando per utilizzare il probe di idoneità configurato nel passaggio precedente:
gcloud run deploy
SERVICE_NAME\ --regions=REGION_A,REGION_B\ --min=MIN_INSTANCESSostituisci quanto segue:
- SERVICE_NAME: il nome del servizio.
- REGION_A, REGION_B: regioni diverse per la revisione del servizio. Ad esempio, imposta REGION_A su
us-central1e REGION_B sueurope-west1. - MIN_INSTANCES: il numero di istanze container da mantenere attive, pronte a ricevere richieste. Devi impostare il valore minimo su 1 o più.
Configura un probe di idoneità gRPC o HTTP configurato su ogni istanza di container.
Configura un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni interno tra regioni per spostare il traffico dalle regioni non integre.
Configura i NEG serverless per ogni servizio Cloud Run in ogni regione.
Configura un servizio di backend per la connessione ai NEG serverless.
Scopri come eseguire il deployment di un'applicazione Cloud Run di esempio in due regioni con probe di idoneità.
Testa e verifica il failover
Per testare il failover e garantire l'affidabilità e la resilienza dei tuoi servizi Cloud Run, segui questi passaggi:
Esegui questo comando per ottenere l'indirizzo IP del bilanciatore del carico:
LBIP=$(gcloud compute addresses describe $SERVICE-ip --global --format='value(address)')(Facoltativo) Invia una richiesta al bilanciatore del carico se i tuoi servizi richiedono l'autenticazione:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LBIPOttieni il valore della variabile LBIP eseguendo il comando
echo $LBIP. Viene visualizzato l'indirizzo IP del bilanciatore del carico. Ad esempio,11.22.33.44Per testare un failover, vai all'URL
http://LOAD_BALANCER_IP, dove LOAD_BALANCER_IP è il valore ottenuto nel passaggio precedente. Fai clic sul pulsante di attivazione/disattivazione della tua regione nella sezione Regioni di pubblicazione. In questo modo vengono designate la regione integra e l'istanza che gestisce il traffico:
Monitora i controlli di integrità
Dopo aver configurato l'integrità del servizio Cloud Run, i NEG serverless raccolgono la metrica di integrità del servizio Cloud Monitoring. Puoi visualizzare lo stato di integrità dei servizi regionali esistenti.
Se un servizio in una regione non è integro, il bilanciatore del carico devia il traffico dalla regione non integra a una regione integra. Il traffico si riprende dopo che la regione torna a essere integra.
Utilizza 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 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 multiregionale.
Alternativa: configura il failover manuale
Se devi configurare manualmente il traffico per eseguire il failover in una regione integra senza fare affidamento sui probe, 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,us-central1,asia-east1.
Per verificare che una regione integra stia gestendo il traffico, vai su https://
<domain-name>.
Per evitare che al tuo account Google Cloud vengano addebitati costi aggiuntivi, elimina tutte le risorse di cui hai eseguito il deployment con questo tutorial.
Elimina il progetto
Se hai creato un nuovo progetto per questo tutorial, eliminalo. Se hai utilizzato un progetto esistente e vuoi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del tutorial
Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial. I servizi Cloud Run non comportano costi finché non ricevono richieste.
Per eliminare il servizio Cloud Run, esegui questo comando:
gcloud run services delete SERVICE-NAME
Sostituisci SERVICE-NAME con il nome del servizio.
Puoi eliminare i servizi Cloud Run anche dalla consoleGoogle Cloud .
Rimuovi la configurazione della regione predefinita
gcloudche hai aggiunto durante la configurazione del tutorial:gcloud config unset run/regionRimuovi la configurazione del progetto:
gcloud config unset project
Passaggi successivi
- Scopri di più sulla configurazione dei controlli di integrità per i servizi Cloud Run.
- Approfondimento sulla configurazione del bilanciatore del carico delle applicazioni esterno globale con Cloud Run.
- Esplora le configurazioni multiregionali in altri prodotti come Spanner multiregionale e Località di Cloud Storage.