Questa pagina mostra come utilizzare Nginx come proxy frontend per il container 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 container dell'applicazione 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 pubblicazione 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 container in entrata (di pubblicazione), che in questo caso è il server proxy. Il server proxy invia quindi le richieste all'app web tramite l'interfaccia di rete localhost, che evita 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 collaterali, se non per avviarli o arrestarli ogni volta che il servizio viene avviato o arrestato.
Il container dell'app web e tutti i container collaterali possono essere scritti in linguaggi di programmazione diversi. Per un esempio scritto in PHP, consulta l'esempio PHP nginx sample in GitHub.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento 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 Cloud Run e Secret Manager.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.- Installa e inizializza 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 richieste per il deployment
Devi disporre di UNA delle seguenti opzioni:
- I ruoli Amministratore Cloud Run e Utente account di servizio
- Qualsiasi ruolo personalizzato che includa questo elenco specifico di autorizzazioni
Panoramica configurazione
Queste istruzioni utilizzano immagini container predefinite, quindi l'unica cosa richiesta per il proxy frontend è configurare i container e il servizio stesso.
Configura il container in entrata Nginx
L'immagine container è nginx disponibile su Docker Hub.
È quasi pronta per l'uso, tranne per il fatto che deve essere configurata per essere eseguita come servizio di proxy, che invia le richieste con proxy alla porta su cui il container sidecar è in ascolto su localhost. L'esempio in questa pagina abilita anche la compressione gzip per
richieste e risposte.
La configurazione viene fornita utilizzando un file di testo montato in /etc/nginx/conf.d/nginx.conf. Poiché non puoi modificare direttamente i file nel container, devi montare un volume in /etc/nginx/conf.d/ che contenga il file di configurazione. Un modo per montare un file in una posizione specifica in un container in esecuzione su Cloud Run è archiviare il contenuto del file in un secret di Secret Manager e montare il secret nella posizione selezionata.
Copia quanto segue in un file denominato nginx.conf nella directory corrente della tua macchina locale.
Nella configurazione, procedi nel seguente modo:
- Assegna
nginxper l'ascolto sulla stessa porta predefinita di Cloud Run8080, che si trova sulocalhost. - Applica la compressione gzip per migliorare le prestazioni.
- Indica a
proxy_passdi inviare tutte le richieste a questo container Ingress al container sidecar dell'app web sulla porta localhost8888.
Crea un secret con il contenuto del file nginx.conf.
Console
Vai alla pagina Secret Manager della Google Cloud console:
Fai clic su Crea secret.
Nel campo del modulo
name, inserisci nginx_config.Carica il file
nginx.confche si trova inmulti-container/hello-nginx-sample/nginx.confcome valore del secret.Mantieni i valori predefiniti (
Google-owned and Google-managed encryption key, etc).Fai clic su Crea secret.
Concedi al account di servizio di Compute del progetto l'accesso a questo nuovo secret. Per farlo, vai alla pagina IAM nella Google Cloud console:
Individua il account di servizio principale con il nome:
Compute Engine default service accounte fai clic su Modifica entità.Fai clic su Aggiungi un altro ruolo e seleziona Secret Manager Secret Accessor.
Fai clic su Salva.
gcloud
In un terminale, utilizza il seguente comando per creare un nuovo secret
nginx_configin Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
Concedi al account di servizio di Compute 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 secret sia stato creato eseguendo
gcloud secrets list.
Informazioni sull'immagine di esempio del container collaterale dell'app web
Queste istruzioni utilizzano l'immagine container di esempio in us-docker.pkg.dev/cloudrun/container/hello. Devi specificare il numero di porta su cui il container sarà in ascolto e localhost come host, come descritto in Specificare la configurazione del container sidecar, nelle sezioni seguenti.
Configura il servizio multi-container
Puoi utilizzare la Google Cloud console 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 container in entrata (di pubblicazione), la porta su cui sarà in ascolto, se accetta richieste HTTP 1 o HTTP 2 e l'ordine di avvio del container. Il container in entrata (server proxy) dipende dal container collaterale dell'app web, quindi quest'ultimo deve essere avviato per primo.
Queste configurazioni sono mostrate nelle prossime sezioni.
Aggiungi metadati YAML
Console
Vai a Esegui 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 revisione a revisione.
Specifica l'ordine di avvio del container
Console
Vai a Esegui il deployment del servizio per le istruzioni complete della console.
YAML
In service.yaml, aggiungi quanto segue:
Prendi nota dell'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 container nginx viene avviato per primo, potrebbe provare a eseguire il proxy di una richiesta web al container dell'app web che non è pronto, il che genererebbe risposte di errore web.
Ogni container può avere facoltativamente una proprietà name definita, che può essere utilizzata per farvi riferimento in altre direttive.
Il container di pubblicazione esegue il server proxy, denominato nginx. Questo è il container a cui Cloud Run invia le richieste in entrata, quindi devi specificare la versione di HTTP e la porta del container a cui inviarle.
Specifica la configurazione del container di pubblicazione
Console
Vai a Esegui 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 inserire in questa posizione. Il volume stesso è definito in una sezione separata più avanti nel file.
Specifica la configurazione del container sidecar
Console
Vai a Esegui il deployment del servizio per le istruzioni complete della console.
YAML
In service.yaml, aggiungi quanto segue:
Anche l'applicazione hello ha bisogno di informazioni di configurazione. È in 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 secret
Console
Vai a Esegui 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 il cui contenuto è definito come valore del secret denominato nginx-conf-secret.
Esegui il deployment del servizio
Console
Vai alla pagina Cloud Run nella Google Cloud console:
Seleziona Servizi dal menu e fai clic su Esegui il deployment del container per visualizzare il modulo Crea servizio.
- Seleziona Esegui il deployment di una revisione da un'immagine container esistente e inserisci
nginxcome URL immagine container. - Nel campo Nome servizio , fornisci un nome per il servizio, ad esempio
hello-mc. - Nell'elenco Regione , seleziona una località di deployment, ad esempio
us-west1. - In Autenticazione, seleziona Consenti accesso pubblico. Se non disponi delle autorizzazioni (ruolo Amministratore Cloud Run) per selezionare questa opzione, il servizio verrà sottoposto a deployment e richiederà l'autenticazione.
- Seleziona Esegui il deployment di una revisione da un'immagine container esistente e inserisci
Fai clic su Container, networking, sicurezza per espandere il modulo di configurazione.
- Fai clic sulla scheda Volumi.
- Fai clic su Aggiungi volume.
- Nell'elenco Tipo di volume, seleziona Secret.
- 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 del secret.
Fai clic sulla scheda Container per visualizzare il modulo Modifica container.
- Fai clic su Impostazioni, quindi in Risorse, modifica la memoria in 256 MiB e la CPU in 1 CPU.
- Fai clic su Montaggi di volumi.
- Fai clic su Monta 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 container.
Fai clic su Aggiungi container per aggiungere il container sidecar e visualizzare il modulo Nuovo container.
- Seleziona l'URL dell'immagine container predefinita us-docker.pkg.dev/cloudrun/container/hello.
- Fai clic sulla scheda Impostazioni, quindi in Risorse, modifica la memoria in 256 MiB e la CPU in 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 container per il primo container (
nginx).- Fai clic sulla scheda Impostazioni.
- In Ordine di avvio del container, seleziona
nginxdall'elenco Dipende da. Ciò significa che il containernginxviene avviato solo dopo l'avvio corretto del containerhello. - Fai clic su Crea e attendi il deployment del servizio.
YAML
Per eseguire il deployment del contenitore del server proxy e del contenitore dell'app web come un singolo servizio:
gcloud run services replace service.yaml
Verifica il servizio di cui è stato eseguito il deployment
Per verificare che il deployment sia andato a buon fine, copia l'URL di 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)" SERVICE_URL
Dovresti visualizzare un proxy nginx che
è stato eseguito correttamente sul container sidecar hello con
lo stato della 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 container collaterali in un servizio Cloud Run:
- I container collaterali di Cloud Run consentono pattern multi-container avanzati
- Eseguire il deployment in Cloud Run