Questa pagina mostra come utilizzare NGINX come proxy frontend per il contenitore dell'applicazione. Questa opzione è utile se vuoi elaborare richieste o risposte. Puoi aggiungere la compressione gzip o tradurre HTTP/2 in HTTP/1 se i contenitori delle applicazioni supportano solo HTTP/1 e devi utilizzare HTTP/2 end-to-end per motivi di prestazioni.
Nell'esempio fornito in questa pagina, un container Nginx viene eseguito su ogni istanza Cloud Run come container di servizio principale ed è configurato per inoltrare le richieste al container dell'applicazione, che viene eseguito come container sidecar, come mostrato in questo diagramma:
Il modo più efficace per eseguire il proxy frontend in Cloud Run è eseguire il deployment del container del server proxy Nginx e del container dell'app web come un singolo servizio Cloud Run:
Questo singolo servizio Cloud Run accetta le richieste e le invia al contenitore di importazione (pubblicazione), che in questo caso è il server proxy. Il server proxy invia quindi le richieste all'app web tramite l'interfaccia di rete localhost
, evitando qualsiasi rete esterna.
Il deployment come singolo servizio Cloud Run riduce le latenze, il sovraccarico di gestione dei servizi ed elimina l'esposizione alle reti esterne. Cloud Run non interagisce direttamente con i container sidecar, tranne che per avviarli o fermarli ogni volta che viene avviato o arrestato il servizio.
Il contenitore dell'app web e gli eventuali contenitori sidecar possono essere scritti in linguaggi di programmazione diversi. Per un esempio scritto in PHP, consulta l'esempio di nginx PHP su GitHub.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run and Secret Manager APIs.
- Installa e inizializza la gcloud CLI.
- Aggiorna Google Cloud CLI:
gcloud components update
- Configura Google Cloud CLI:
gcloud init
- Esegui l'autenticazione con Google Cloud CLI:
gcloud auth login
Autorizzazioni necessarie per il deployment
Devi disporre di UNO dei seguenti requisiti:
- Entrambi i ruoli Amministratore di Cloud Run e Utente account di servizio
- Qualsiasi ruolo personalizzato che includa questo elenco specifico di autorizzazioni
Panoramica configurazione
Queste istruzioni utilizzano immagini container precompilate, quindi l'unica cosa richiesta per il proxy frontend è configurare i container e il servizio stesso.
Configura il contenitore di ingresso Nginx
L'immagine container è nginx
disponibile su Docker Hub.
È quasi pronto per l'uso così com'è, tranne per il fatto che deve essere configurato per funzionare come servizio proxy, inviando le richieste proxy alla porta su cui il contenitore sidecar è in ascolto su localhost
. L'esempio in questa pagina attiva anche la compressione gzip per richieste e risposte.
La configurazione viene fornita utilizzando un file di testo montato su /etc/nginx/conf.d/nginx.conf
. Poiché non puoi modificare direttamente i file nel
container, devi montare un volume in /etc/nginx/conf.d/
contenente
il file di configurazione. Un modo per montare un file in una posizione specifica in un
contenuto in esecuzione su Cloud Run è archiviare i contenuti del file in un
segreto di Secret Manager e montare il segreto nella posizione selezionata.
Copia il seguente in un file denominato nginx.conf
nella directory corrente del computer locale.
Nella configurazione:
- Assegna
nginx
in ascolto sulla stessa porta predefinita di Cloud Run8080
, situata sulocalhost
. - Applica la compressione gzip per migliorare le prestazioni.
- Chiedi a
proxy_pass
di inoltrare eventuali richieste a questo container di ingresso al container sidecar dell'app web sulla porta localhost8888
.
Crea un secret con i contenuti del file nginx.conf
.
Console
Vai alla pagina Secret Manager della console Google Cloud:
Fai clic su Crea secret.
Nel campo del modulo
name
, inserisci nginx_config.Carica il file
nginx.conf
inmulti-container/hello-nginx-sample/nginx.conf
come valore del secret.Mantieni i valori predefiniti (
Google-managed encryption key, etc
).Fai clic su Crea secret.
Concedi all'account di servizio Compute del progetto l'accesso a questo nuovo secret. Per farlo, vai alla pagina IAM nella console Google Cloud:
Individua l'account di servizio principale con il nome
Compute Engine default service account
e fai clic su Modifica entità.Fai clic su Aggiungi un altro ruolo e seleziona Accesso ai segreti di Secret Manager.
Fai clic su Salva.
gcloud
In un terminale, utilizza il seguente comando per creare un nuovo segreto
nginx_config
in Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
Concedi all'account di servizio di calcolo del progetto l'accesso a questo nuovo secret utilizzando il comando
export PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)') gcloud secrets add-iam-policy-binding nginx_config --member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com --role='roles/secretmanager.secretAccessor'
Verifica che il segreto sia stato creato eseguendo
gcloud secrets list
.
Informazioni sull'immagine di esempio del sidecar dell'app web
Queste istruzioni utilizzano l'immagine container di esempio disponibile all'indirizzo
us-docker.pkg.dev/cloudrun/container/hello
. Devi
specificare il numero di porta su cui il container rimarrà in ascolto e localhost
come host, come descritto in Specificare la configurazione del contenitore sidecar, come descritto nelle sezioni seguenti.
Configura il servizio multicontainer
Puoi utilizzare la console Google Cloud o il file YAML di Cloud Run per configurare un servizio Cloud Run con più di un container.
Nella configurazione del servizio, specifica il server proxy Nginx come contenitore in entrata (di servizio), la porta su cui ascolterà, se accetta richieste HTTP 1 o HTTP 2 e l'ordine di avvio del contenitore. Il contenitore di ingresso (server proxy) dipende dal sidecar dell'app web, quindi il sidecar dell'app web deve essere avviato per primo.
Queste configurazioni sono mostrate nelle sezioni successive.
Aggiungere metadati YAML
Console
Vai a Eseguire il deployment del servizio per le istruzioni complete della console.
YAML
Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
In
service.yaml
, aggiungi quanto segue:
La sezione descrive la revisione del servizio, che include proprietà che potrebbero variare da una revisione all'altra.
Specifica l'ordine di avvio del container
Console
Vai a Eseguire il deployment del servizio per le istruzioni complete della console.
YAML
In service.yaml
, aggiungi quanto segue:
Nota l'annotazione container-dependencies
che indica a Cloud Run di attendere l'avvio del container hello prima di avviare il container nginx. In caso contrario, se il contenitore nginx si avvia per primo, potrebbe tentare di eseguire il proxy di una richiesta web al contenitore dell'app web non pronto, generando risposte di errore web.
Per ogni contenitore può essere facoltativamente definita una proprietà name che può essere utilizzata per fare riferimento al contenitore in altre direttive.
Il contenitore di pubblicazione esegue il server proxy denominato nginx
. Questo è il contenitore a cui Cloud Run invia le richieste in entrata, pertanto devi specificare la versione di HTTP
e la porta del contenitore a cui inviarle.
Specifica la configurazione del contenitore di pubblicazione
Console
Vai a Eseguire il deployment del servizio per le istruzioni complete della console.
YAML
Nel file service.yaml
, aggiungi quanto segue:
Il server nginx
richiede un file di configurazione nella directory /etc/nginx/conf.d/
. Per farlo, monta un volume contenente il file in quella posizione. La sezione volumeMount
specifica un volume denominato configuration
da posizionare lì. Il volume stesso è definito in una sezione a parte più avanti nel file.
Specifica la configurazione del container sidecar
Console
Vai a Eseguire il deployment del servizio per le istruzioni complete della console.
YAML
In service.yaml
, aggiungi quanto segue:
Anche l'applicazione hello
richiede informazioni di configurazione. Esegue le operazioni di ascolto delle richieste in entrata sulla porta specificata nella variabile di ambiente PORT
. Il nome e il valore sono specificati nella sezione env
.
Specifica il volume del segreto
Console
Vai a Eseguire il deployment del servizio per le istruzioni complete della console.
YAML
Nel file service.yaml
, aggiungi quanto segue:
Specifica la configurazione volume
montata nella sezione volumeMount
. Contiene un singolo file denominato nginx.conf
i cui contenuti sono definiti come valore del secret denominato nginx-conf-secret
.
Esegui il deployment del servizio
Console
Vai alla pagina Cloud Run nella console Google Cloud:
Fai clic su Esegui il deployment del container e seleziona Servizio per visualizzare il modulo Crea servizio.
- Seleziona Esegui il deployment di una revisione da un'immagine container esistente e inserisci
nginx
come URL immagine container. - Nel campo Nome servizio, fornisci un nome per il servizio, ad esempio
hello-mc
. - Nell'elenco Regione, seleziona una località in cui eseguire il deployment, ad esempio
us-west1
. - In Authentication (Autenticazione), seleziona
Allow unauthenticated invocations
. Se non disponi delle autorizzazioni (ruolo Amministratore di Cloud Run) per selezionarlo, il servizio verrà dispiegato e richiederà l'autenticazione.
- Seleziona Esegui il deployment di una revisione da un'immagine container esistente e inserisci
Fai clic su Container, volumi, networking, sicurezza per espandere il modulo di configurazione.
- Fai clic sulla scheda Volumi.
- Fai clic su Aggiungi volume.
- Nell'elenco Tipo di volume, seleziona Segreta.
- Nel campo Nome volume, inserisci
nginx-conf-secret
. - Nel campo Secret, inserisci nginx_config.
- In Percorsi specificati per le versioni dei secret, specifica default.conf come percorso e latest come versione.
- Fai clic su Crea per creare il volume segreto.
Fai clic sulla scheda Container per visualizzare il modulo Modifica contenitore.
- Fai clic su Impostazioni e poi in Risorse imposta la memoria su 256 MiB e la CPU su 1 CPU.
- Fai clic su Montaggi dei volumi.
- Fai clic su Monta il volume.
- Seleziona nginx-conf-secret dall'elenco dei nomi.
- In Percorso di montaggio, inserisci etc/nginx/conf.d.
- Fai clic su Fine per completare la configurazione del primo contenitore.
Fai clic su Aggiungi contenitore per aggiungere il contenitore sidecar e visualizzare il modulo Nuovo contenitore.
- Seleziona l'URL dell'immagine container predefinito us-docker.pkg.dev/cloudrun/container/hello
- Fai clic sulla scheda Impostazioni, quindi in Risorse imposta la memoria su 256 MiB e la CPU su 1 CPU.
- Fai clic su Variabili e secret.
- Fai clic su Aggiungi variabile.
- Inserisci PORT come nome della nuova variabile di ambiente e 8888 come valore.
- Fai clic su Fine.
Vai al modulo Modifica contenitore per il primo contenitore (
nginx
).- Fai clic sulla scheda Impostazioni.
- In Ordine di avvio del contenitore, seleziona
nginx
dall'elenco Dipende da. Ciò significa che il contenitorenginx
si avvia solo dopo l'avvio del contenitorehello
. - Fai clic su Crea e attendi il deployment del servizio.
gcloud
Per eseguire il deployment del contenitore del server proxy e del contenitore dell'app web come un unico servizio:
gcloud run services replace service.yaml
Verificare il servizio di cui è stato eseguito il deployment
gcloud
Per verificare che il deployment sia stato eseguito correttamente, copia l'URL Cloud Run generato e aprilo in un browser oppure utilizza questo comando per inviare una richiesta autenticata:
curl --header "Authorization: Bearer $(gcloud auth print-identity-token)"
Dovresti visualizzare un proxy nginx che è stato portato correttamente nel contenitore sidecar hello con stato di risposta 200
.
Fai una prova
Per seguire questo tutorial:
gcloud
In un terminale, clona il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Passa alla directory che contiene il codice campione di Cloud Run:
cd cloud-run-samples/multi-container/hello-nginx-sample/
Passaggi successivi
Per scoprire di più sull'utilizzo dei sidecar in un servizio Cloud Run:
- I sidecar di Cloud Run abilitano pattern multi-container avanzati
- Eseguire il deployment in Cloud Run