Encaminhamento por proxy de front-end com o Nginx

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:

Cloud Run mc hello nginx 1

A forma mais eficaz de fazer o proxying de front-end 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:

Cloud Run mc hello nginx 2

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 quaisquer contentores auxiliares podem ser escritos em diferentes linguagens de programação. Para um exemplo escrito em PHP, consulte o exemplo de PHP nginx no GitHub.

Antes de começar

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. Instale e inicialize a CLI gcloud.
  8. Atualize a CLI do Google Cloud: gcloud components update
  9. Configurar a CLI do Google Cloud: gcloud init
  10. Autentique-se com a CLI do Google Cloud: gcloud auth login
  11. 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 do Nginx

    A imagem do contentor está nginx disponível no Docker Hub. Está quase 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.

    
    server {
        # Listen at port 8080
        listen 8080; 
        # Server at localhost
        server_name _;
        # Enables gzip compression to make our app faster
        gzip on;
    
        location / {
            # Passes initial requests to port 8080 to `hello` container at port 8888
            proxy_pass   http://127.0.0.1:8888;
        }
    }
    

    Na configuração, faça o seguinte:

    • Atribua nginx para ouvir na mesma porta predefinida do Cloud Run 8080, localizada em localhost.
    • Aplique a compressão gzip para melhorar o desempenho.
    • Indique a proxy_pass para entregar todos os pedidos a este contentor de entrada no contentor secundário da app Web na porta do anfitrião local 8888.

    Crie um segredo com o conteúdo do ficheiro nginx.conf.

    Consola

    1. Aceda à página Secret Manager da Google Cloud consola:

      Aceda ao Secret Manager

    2. Clique em Criar segredo.

    3. No campo do formulário name, introduza nginx_config.

    4. Carregue o ficheiro nginx.conf localizado em multi-container/hello-nginx-sample/nginx.conf como o valor secreto.

    5. Manter as predefinições (Google-owned and Google-managed encryption key, etc).

    6. Clique em Criar segredo.

    7. 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:

      Aceder ao IAM

    8. Localize a conta de serviço principal com o nome: Compute Engine default service account e clique em Editar principal.

    9. Clique em Adicionar outra função e selecione Secret Manager Secret Accessor.

    10. Clique em Guardar.