Esta página mostra como usar o NGINX como um proxy de front-end para o contentor da sua aplicação. Isto é útil se quiser processar pedidos ou respostas. Pode adicionar a compressão gzip ou traduzir HTTP/2 para HTTP/1 se os contentores da sua aplicação suportarem apenas HTTP/1 e precisar de usar HTTP/2 ponto a ponto por motivos de desempenho.
No exemplo fornecido nesta página, um contentor Nginx é executado em todas as instâncias do Cloud Run como o contentor de publicação principal e está configurado para encaminhar pedidos para o contentor da aplicação, que é executado como um contentor sidecar, conforme mostrado neste diagrama:
A forma mais eficaz de fazer o proxying de frontend no Cloud Run é implementar o contentor do servidor proxy do servidor Nginx e o contentor da app Web como um único serviço do Cloud Run:
Este único serviço do Cloud Run aceita pedidos e entrega-os ao contentor de entrada (publicação), que, neste caso, é o servidor proxy. Em seguida, o servidor proxy envia pedidos à app Web através da interface de rede localhost, o que evita qualquer rede externa.
A implementação como um único serviço do Cloud Run reduz as latências, a sobrecarga de gestão de serviços e elimina a exposição a redes externas. O Cloud Run não interage diretamente com os contentores auxiliares, exceto para os iniciar ou parar sempre que o serviço é iniciado ou parado.
O contentor da app Web e todos os contentores auxiliares podem ser escritos em diferentes linguagens de programação. Para ver um exemplo escrito em PHP, consulte o exemplo do PHP nginx no GitHub.
Antes de começar
- 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.
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
      (
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
      (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. 
 - 
  
    
Verify that billing is enabled for your Google Cloud project.
 - 
  
  
    
      
Enable the Cloud Run and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Instale e inicialize a CLI gcloud.
 - Atualize a CLI do Google Cloud: 
gcloud components update - Configurar a CLI do Google Cloud: 
gcloud init - Autentique-se com a CLI do Google Cloud: 
gcloud auth login - As funções Administrador do Cloud Run e Utilizador da conta de serviço
 - Qualquer função personalizada que inclua esta lista específica de autorizações
 - Atribua 
nginxpara ouvir na mesma porta predefinida do Cloud Run8080, localizada emlocalhost. - Aplique a compressão gzip para melhorar o desempenho.
 - Instrua o 
proxy_passa entregar todos os pedidos a este contentor de entrada no contentor secundário da app Web na porta do anfitrião local8888. Aceda à página Secret Manager da Google Cloud consola:
Clique em Criar segredo.
No campo do formulário
name, introduza nginx_config.Carregue o ficheiro
nginx.conflocalizado emmulti-container/hello-nginx-sample/nginx.confcomo o valor secreto.Manter as predefinições (
Google-owned and Google-managed encryption key, etc).Clique em Criar segredo.
Conceda à conta de serviço de computação do projeto acesso a este novo segredo. Para o fazer, aceda à página IAM na Google Cloud consola:
Localize a conta de serviço principal com o nome:
Compute Engine default service accounte clique em Editar principal.Clique em Adicionar outra função e selecione Acesso ao segredo do Secret Manager.
Clique em Guardar.
Num terminal, use o seguinte comando para criar um novo segredo do
nginx_configno Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
Conceda à conta de serviço de computação do projeto acesso a este novo segredo através do 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'
Verifique se o segredo foi criado executando
gcloud secrets list.Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:
gcloud run services describe SERVICE --format export > service.yaml
Em
service.yaml, adicione o seguinte:Aceda à página Cloud Run na Google Cloud consola:
Selecione Serviços no menu e clique em Implementar contentor para apresentar o formulário Criar serviço.
- Selecione Implementar uma revisão a partir de uma imagem de contentor existente e introduza 
nginxcomo URL da imagem de contentor. - No campo Nome do serviço, indique um nome para o seu serviço, por exemplo, 
hello-mc. - Na lista Região, selecione uma localização para implementar, por exemplo, 
us-west1. - Em Autenticação, selecione Permitir acesso público. Se não tiver autorizações (função de administrador do Cloud Run) para selecionar esta opção, o serviço é implementado e requer autenticação.
 
- Selecione Implementar uma revisão a partir de uma imagem de contentor existente e introduza 
 Clique em Recipientes, volumes, trabalhar em rede, segurança para expandir o formulário de configuração.
- Clique no separador Volumes.
 - Clique em Adicionar volume.
 - Na lista Tipo de volume, selecione Secreto.
 - No campo Nome do volume, introduza 
nginx-conf-secret. - No campo Segredo, introduza nginx_config.
 - Em Caminhos especificados para versões secretas, especifique default.conf como o caminho e latest como a versão.
 - Clique em Criar para criar o volume secreto.
 
Clique no separador Contentores para apresentar o formulário Editar contentor.
- Clique em Definições e, em Recursos, altere a memória para 256 MiB e a CPU para 1 CPU.
 - Clique em Volumes montados.
 - Clique em Montar volume.
 - Selecione nginx-conf-secret na lista de nomes.
 - Em Caminho de montagem, introduza etc/nginx/conf.d.
 - Clique em Concluído para concluir a configuração do primeiro contentor.
 
Clique em Adicionar contentor para adicionar o contentor sidecar e apresentar o formulário Novo contentor.
- Selecione o URL da imagem do contentor predefinido us-docker.pkg.dev/cloudrun/container/hello
 - Clique no separador Definições e, de seguida, em Recursos, altere a memória para 256 MiB e a CPU para 1 CPU.
 - Clique em Variáveis e segredos.
 - Clique em Adicionar variável.
 - Introduza PORT como o novo nome da variável de ambiente e 8888 como o valor.
 - Clique em Concluído.
 
Navegue para o formulário Editar contentor do primeiro contentor (
nginx).- Clique no separador Definições.
 - Em Ordem de arranque do contentor, selecione 
nginxna lista Depende de. Isto significa que o contentornginxsó é iniciado depois de o contentorhelloser iniciado com êxito. - Clique em Criar e aguarde pela implementação do serviço.
 
Num terminal, clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Altere para o diretório que contém o código de exemplo do Cloud Run:
cd cloud-run-samples/multi-container/hello-nginx-sample/
Autorizações necessárias para a implementação
Tem de ter UMA das seguintes opções:
Vista geral da configuração
Estas instruções usam imagens de contentores pré-criadas, pelo que a única coisa necessária para o proxying de front-end é configurar os contentores e o próprio serviço.
Configure o contentor de entrada Nginx
A imagem do contentor está nginx disponível no Docker Hub.
Está praticamente pronto a usar, exceto que tem de ser configurado para ser executado como um serviço de proxy, fornecendo os pedidos de proxy à porta onde o contentor sidecar está a escutar localhost. O exemplo nesta página também ativa a compressão gzip para pedidos e respostas.
A configuração é fornecida através de um ficheiro de texto montado em /etc/nginx/conf.d/nginx.conf. Uma vez que não pode editar diretamente ficheiros no contentor, tem de montar um volume em /etc/nginx/conf.d/ que contenha o ficheiro de configuração. Uma forma de montar um ficheiro numa localização específica num contentor em execução no Cloud Run é armazenar o conteúdo do ficheiro num segredo do Secret Manager e montar esse segredo na localização selecionada.
Copie o seguinte num ficheiro com o nome nginx.conf no diretório atual da sua máquina local.
Na configuração, faça o seguinte:
Crie um segredo com o conteúdo do ficheiro nginx.conf.
Consola
gcloud
Acerca da imagem de exemplo da barra lateral da app Web
Estas instruções usam a imagem do contentor de exemplo em
us-docker.pkg.dev/cloudrun/container/hello. Tem de especificar o número da porta em que o contentor vai escutar e localhost como anfitrião, conforme descrito em Especifique a configuração do contentor auxiliar, conforme descrito nas secções seguintes.
Configure o serviço com vários contentores
Pode usar a Google Cloud consola ou o ficheiro YAML do Cloud Run para configurar um serviço do Cloud Run com mais do que um contentor.
Na configuração do serviço, especifique o servidor proxy Nginx como contentor de entrada (publicação), a porta na qual vai escutar, se aceita pedidos HTTP 1 ou HTTP 2 e a ordem de início do contentor. O contentor de entrada (servidor proxy) depende do sidecar da app Web, pelo que o sidecar da app Web tem de ser iniciado primeiro.
Estas configurações são apresentadas nas secções seguintes.
Adicione metadados YAML
Consola
Navegue até Implementar o serviço para ver as instruções completas da consola.
YAML
A secção descreve a revisão do serviço, que inclui propriedades que podem variar de revisão para revisão.
Especifique a ordem de arranque do contentor
Consola
Navegue até Implementar o serviço para ver as instruções completas da consola.
YAML
Em service.yaml, anexe o seguinte:
Repare na anotação container-dependencies que indica ao Cloud Run para aguardar que o contentor hello seja iniciado
antes de iniciar o contentor nginx. Caso contrário, se o contentor nginx for iniciado primeiro, pode tentar encaminhar um pedido Web para o contentor da app Web que não está pronto, o que gera respostas de erro Web.
Cada contentor pode ter opcionalmente uma propriedade de nome definida para si, que pode ser usada para se referir a ele noutras diretivas.
O contentor de publicação executa o servidor proxy, denominado nginx. Este é o contentor para o qual o Cloud Run envia pedidos recebidos. Por isso, tem de especificar a versão do HTTP e a porta do contentor para os enviar.
Especifique a configuração do contentor de publicação
Consola
Navegue até Implementar o serviço para ver as instruções completas da consola.
YAML
No ficheiro service.yaml, anexe o seguinte:
O servidor nginx requer um ficheiro de configuração no diretório /etc/nginx/conf.d/. Para o fazer, monte um volume que contenha o ficheiro nessa localização. A secção volumeMount especifica um volume denominado configuration a ser colocado aí. O volume em si é definido na sua própria secção mais tarde no ficheiro.
Especifique a configuração do contentor sidecar
Consola
Navegue até Implementar o serviço para ver as instruções completas da consola.
YAML
Em service.yaml, anexe o seguinte:
A aplicação hello também precisa de informações de configuração. O servidor fica à escuta de pedidos recebidos na porta especificada na variável de ambiente PORT. Esse nome e valor são especificados na secção env.
Especifique o volume secreto
Consola
Navegue até Implementar o serviço para ver as instruções completas da consola.
YAML
No ficheiro service.yaml, anexe o seguinte:
Especifique a configuração volume montada na secção volumeMount. Contém um único ficheiro denominado nginx.conf cujo conteúdo é definido como o valor do segredo denominado nginx-conf-secret.
Implemente o serviço
Consola
YAML
Para implementar o contentor do servidor proxy e o contentor da app Web como um único serviço:
gcloud run services replace service.yaml
Valide o serviço implementado
Para validar a implementação bem-sucedida, copie o URL do Cloud Run gerado e abra-o num navegador ou use este comando para enviar um pedido autenticado:
curl --header "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Deve receber uma mensagem de proxy nginx que foi
transferida com êxito para o contentor sidecar hello com o
  estado de resposta 200.
Experimente
Para continuar este tutorial:
gcloud
O que se segue?
Para explorar mais sobre a utilização de sidecars num serviço do Cloud Run: