Questa pagina mostra come utilizzare NGINX come proxy frontend per il container dell'applicazione. Ciò è utile se vuoi elaborare richieste o risposte. Puoi aggiungere la compressione gzip o tradurre HTTP/2 in HTTP/1 se i container della tua 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 di Cloud Run come container di pubblicazione principale ed è configurato per inoltrare le richieste al container dell'applicazione, che viene eseguito come container collaterale, come mostrato in questo diagramma:
Il modo più efficace per eseguire il proxy di frontend in Cloud Run è eseguire il deployment del container del server proxy del server Nginx e del container dell'app web come singolo servizio Cloud Run:
Questo singolo servizio Cloud Run accetta le richieste e le consegna al container in entrata, che in questo caso è il server proxy. Il server proxy invia quindi le richieste all'app web tramite l'interfaccia di rete localhost
, evitando eventuali reti esterne.
Il deployment come singolo servizio Cloud Run riduce le latenze e l'overhead per la gestione dei servizi ed elimina l'esposizione alle reti esterne. Cloud Run non interagisce direttamente con i container collaterali, tranne che avviarli o arrestarli ogni volta che il servizio viene avviato o arrestato.
Il container dell'app web e gli eventuali container collaterali possono essere scritti in linguaggi di programmazione diversi. Per un esempio scritto in PHP, vedi l'esempio di nginx PHP in GitHub.
Prima di iniziare
- 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Run and Secret Manager .
- 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 UNO dei seguenti:
- Proprietario
- Editor
- Entrambi i ruoli Amministratore Cloud Run e Utente account di servizio
- Qualsiasi ruolo personalizzato che include questo elenco specifico di autorizzazioni
Panoramica configurazione
Queste istruzioni utilizzano immagini container predefinite, quindi l'unica cosa necessaria per il proxy frontend è configurare i container e il servizio stesso.
Configura il container in entrata Nginx
L'immagine container è nginx
disponibile in Docker Hub.
È prevalentemente pronto per l'uso così com'è, ad eccezione del fatto che deve essere configurato per essere eseguito come
servizio proxy, consegnando le richieste inviate tramite proxy alla porta in cui il container collaterale è 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/
contenente il file di configurazione. Un modo per montare un file in una posizione specifica in un container in esecuzione su Cloud Run consiste nell'archiviare il contenuto del file in un secret di Secret Manager e montare il secret nella posizione desiderata.
volume, che viene caricato durante il runtime.
Copia quanto segue in un file denominato nginx.conf
nella directory corrente della tua macchina locale.
Nella configurazione, segui questi passaggi:
- Assegna
nginx
per l'ascolto sulla stessa porta predefinita8080
di Cloud Run, che si trova sulocalhost
- Applica la compressione gzip per migliorare le prestazioni
- Chiedi tramite
proxy_pass
di inviare le richieste a questo container in entrata al container collaterale 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
che si trova inmulti-container/hello-nginx-sample/nginx.conf
come valore del secret.Mantieni le impostazioni predefinite (
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 dell'entità denominato
Compute Engine default service account
e fai clic su Modifica entità.Fai clic su Aggiungi un altro ruolo e seleziona Funzione di accesso ai secret di Secret Manager.
Fai clic su Salva.
Riga di comando
In un terminale, utilizza il comando seguente per creare un nuovo secret
nginx_config
in Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
Concedi all'account di servizio 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 file collaterale dell'app web
Per queste istruzioni viene utilizzata l'immagine container di esempio all'indirizzo us-docker.pkg.dev/cloudrun/container/hello
. Devi specificare il numero di porta su cui il container rimane in ascolto e localhost
come host, come descritto in Specificare la configurazione del container collaterale, 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 container in entrata (di pubblicazione), la porta su cui rimane 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 file collaterale dell'app web, quindi deve essere prima avviato.
Queste configurazioni sono mostrate nelle sezioni successive.
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:
Questa 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 prima, potrebbe provare a eseguire il proxy di una richiesta web al container dell'app web non pronta, generando così risposte di errore web.
Per ogni contenitore è possibile facoltativamente definire una proprietà name, che può essere utilizzata per farvi riferimento in altre istruzioni.
Il contenitore di pubblicazione esegue il server proxy denominato nginx
. Questo è il container a cui Cloud Run consegna le richieste in entrata, quindi devi specificare la versione di HTTP
e la porta del container in cui consegnarle.
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 posizionare lì. Il volume stesso viene definito in una propria sezione più avanti nel file.
Specifica la configurazione del container collaterale
Console
Vai a Esegui il deployment del servizio per le istruzioni complete della console.
YAML
In service.yaml
, aggiungi quanto segue:
Sono necessarie anche le informazioni di configurazione per l'applicazione hello
. Resta in ascolto delle richieste in entrata alla 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
i cui contenuti sono definiti
come il 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 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, inserisci 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 Autenticazione, seleziona
Allow unauthenticated invocations
.
- 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 Secret.
- Nel campo Nome del 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 Contenitori per visualizzare il modulo Modifica contenitore.
- Fai clic su Impostazioni, quindi in Risorse, imposta la memoria su 256MiB e la CPU su 1 CPU.
- Fai clic su Montaggi volume.
- Fai clic su Volume di montaggio.
- Seleziona nginx-conf-secret dall'elenco dei nomi.
- In Mount path (Percorso montaggio), inserisci etc/nginx/conf.d.
- Fai clic su Fine per completare la configurazione del primo container.
Fai clic su Aggiungi contenitore per aggiungere il contenitore collaterale e visualizzare il modulo Nuovo contenitore.
- 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 256MiB e la CPU in 1 CPU.
- Fai clic su Variabili e secret.
- Fai clic su Aggiungi variabile.
- Inserisci PORT come nuovo nome della 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 container, seleziona
nginx
dall'elenco Dipende da. Ciò significa che il containernginx
si avvia solo dopo l'avvio del containerhello
. - Fai clic su Crea e attendi il deployment del servizio.
Riga di comando
Per eseguire il deployment del contenitore del server proxy e del contenitore per app web come singolo servizio:
gcloud run services replace service.yaml
Verifica il servizio di cui è stato eseguito il deployment
Riga di comando
Per verificare il corretto deployment, 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 ricevere un proxy nginx che ha eseguito correttamente la portabilità al container collaterale hello con stato della risposta 200
.
Fai una prova
Per seguire questo tutorial:
Riga di comando
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 saperne di più sull'utilizzo di file collaterali in un servizio Cloud Run: