Configure um balanceador de carga de aplicativo interno regional com o Cloud Run.

Neste documento, você verá como implantar um balanceador de carga de aplicativo regional interno com o Cloud Run. Para configurar isso, use um back-end NEG sem servidor para o balanceador de carga.

Antes de testar este procedimento, verifique se você está familiarizado com os seguintes tópicos:

Os NEGs sem servidor permitem usar os serviços do Cloud Run com o balanceador de carga. Depois de configurar um balanceador de carga com o back-end NEG sem servidor, as solicitações para o balanceador de carga são roteadas para o back-end do aplicativo sem servidor.

Antes de começar

  1. Instale a Google Cloud CLI.
  2. Implantar um serviço do Cloud Run
  3. Configurar permissões.

Instalar o SDK Google Cloud

Instale a ferramenta Google Cloud CLI. Consulte Visão geral do gcloud para acessar informações conceituais e de instalação sobre a ferramenta.

Caso ainda não tenha executado a CLI gcloud, primeiro execute gcloud init para inicializar o diretório gcloud.

Observação: não é possível usar o Console do Google Cloud para configurar um balanceador de carga de aplicativo interno com um back-end NEG sem servidor.

Implantar um serviço do Cloud Run

As instruções nesta página pressupõem que você já tenha um serviço do Cloud Run em execução.

Para o exemplo nesta página, é possível usar qualquer um dos guias de início rápido do Cloud Run para implantar um serviço do Cloud Run.

O NEG sem servidor, o balanceador de carga e as VMs do cliente precisam estar na mesma região do serviço do Cloud Run.

Para impedir o acesso ao serviço do Cloud Run pela Internet, restrinja a entrada a internal. O tráfego do balanceador de carga interno do aplicativo é considerado interno.

gcloud run deploy CLOUD_RUN_SERVICE_NAME \
  --platform=managed \
  --allow-unauthenticated \
  --ingress=internal \
  --region=REGION \
  --image=IMAGE_URL

Anote o nome do serviço que você criar. No restante desta página, mostramos como configurar um balanceador de carga que encaminha solicitações para esse serviço.

Configurar permissões

Para seguir este guia, você precisa criar um NEG sem servidor e um balanceador de carga em um projeto. É necessário ser proprietário ou editor de um projeto ou ter os seguintes papéis de IAM do Compute Engine:

Tarefa Papel necessário
Criar balanceador de carga e componentes de rede Administrador de rede
Criar e modificar NEGs Administrador da instância do Compute
Criar e modificar certificados SSL Administrador de segurança

Configurar a rede e as sub-redes

Para configurar a rede e as sub-redes, execute as seguintes tarefas:

  • crie uma rede e uma sub-rede VPC.
  • Crie uma sub-rede somente proxy.

Criar a rede VPC

Crie uma rede VPC no modo personalizado e, em seguida, as sub-redes que você quer em uma região.

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Em Nome, insira lb-network.

  4. Em Modo de criação da sub-rede, selecione Personalizado.

  5. Na seção Nova sub-rede, especifique os parâmetros de configuração a seguir para uma sub-rede:

    1. Em Nome, insira lb-subnet.
    2. Selecione uma Região.
    3. Em Intervalo de endereços IP, insira 10.1.2.0/24.
    4. Clique em Concluído.
  6. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada usando o comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crie uma sub-rede na rede lb-network. Este exemplo usa um intervalo de endereços IP de 10.1.2.0/24 para a sub-rede. É possível configurar qualquer intervalo de sub-rede válido.

    gcloud compute networks subnets create lb-subnet \
    --network=lb-network \
    --range=10.1.2.0/24 \
    --region=REGION
    

Criar uma sub-rede somente proxy

Crie uma sub-rede somente proxy para todos os balanceadores de carga regionais baseados em Envoy em uma região específica da rede lb-network.

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique no nome da rede VPC compartilhada à qual você quer adicionar uma sub-rede somente proxy.

  3. Clique em Adicionar sub-rede.

  4. No campo Nome, use proxy-only-subnet.

  5. Selecione uma Região.

  6. Defina Finalidade como Proxy gerenciado regional.

  7. Digite um Intervalo de endereços IP como 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

  1. Crie a sub-rede somente proxy usando o comando gcloud compute networks subnets create.

    Este exemplo usa um intervalo de endereços IP de 10.129.0.0/23 para a sub-rede somente proxy. É possível configurar qualquer intervalo de sub-rede válido.

    gcloud compute networks subnets create proxy-only-subnet \
     --purpose=REGIONAL_MANAGED_PROXY \
     --role=ACTIVE \
     --region=REGION \
     --network=lb-network \
     --range=10.129.0.0/23
    

Criar o balanceador de carga

No diagrama a seguir, o balanceador de carga usa um back-end NEG sem servidor para direcionar solicitações para um serviço do Cloud Run sem servidor.

Arquitetura de balanceamento de carga HTTP(S) interno para um aplicativo do Cloud Run.
Arquitetura de balanceamento de carga HTTP(S) interno para um aplicativo do Cloud Run.

O tráfego que vai do balanceador de carga para os back-ends de NEG sem servidor usa rotas especiais definidas fora da VPC que não estão sujeitas a regras de firewall. Portanto, se o balanceador de carga só tiver back-ends de NEG sem servidor, não será necessário criar regras de firewall para permitir o tráfego da sub-rede somente proxy para o back-end sem servidor.

Console

Inicie a configuração

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. No card Balanceador de carga de aplicativo (HTTP/S), clique em Iniciar configuração.
  4. Em Internet ou somente interno, selecione Somente entre minhas VMs ou serviços sem servidor.
  5. Mantenha a janela aberta para continuar.

Configure o front-end

  1. Antes de continuar, verifique se você tem um certificado SSL.
  2. Clique em Configuração de front-end.
  3. Digite um Nome.
  4. Para configurar um balanceador de carga de aplicativo interno, preencha os campos da seguinte maneira.
    1. Em Protocolo, selecione HTTPS.
    2. Em Sub-rede, selecione a sub-rede.
    3. Em Versão IP, selecione IPv4.
    4. Em Endereço IP, selecione Temporário.
    5. Em Porta, selecione 443.
    6. Em Certificado, selecione um certificado SSL atual ou crie um novo.

      É possível criar certificados do Compute Engine ou do Gerenciador de certificados. Use um dos métodos a seguir para criar certificados usando o Gerenciador de certificados:

      • Certificados regionais autogerenciados. Para informações sobre como criar e usar certificados autogerenciados regionais, consulte Implantar um certificado autogerenciado regional. Mapas de certificados não são compatíveis.

      • Certificados regionais gerenciados pelo Google. Mapas de certificados não são compatíveis.

        Os seguintes tipos de certificados regionais gerenciados pelo Google são aceitos pelo Gerenciador de certificados:

      • Depois de criar certificados, anexe o certificado diretamente ao proxy de destino.

        O exemplo a seguir mostra como criar certificados SSL do Compute Engine:

      • Clique em Criar um novo certificado.
        1. Digite um nome no campo Nome.
        2. Nos campos apropriados, faça o upload dos arquivos formatados em PEM:
          • Certificado
          • Chave privada
        3. Clique em Criar.

    Se quiser testar o processo sem configurar um recurso de certificado SSL, configure um balanceador de carga HTTP.

  5. Opcional: para criar um balanceador de carga HTTP, faça o seguinte:
    1. Em Protocolo, selecione HTTP.
    2. Em Sub-rede, selecione a sub-rede.
    3. Em Versão IP, selecione IPv4.
    4. Em Endereço IP, selecione Temporário.
    5. Em Porta, selecione 80.
  6. Clique em Concluído.

Configurar os serviços de back-end

  1. Clique em Configuração de back-end.
  2. No menu suspenso Criar ou selecionar serviços de back-end, mantenha o ponteiro sobre Serviços de back-end e selecione Criar um serviço de back-end.
  3. Na janela Criar um serviço de back-end, insira um Nome.
  4. Em Tipo de back-end, selecione Grupo de endpoints de rede sem servidor.
  5. Deixe o Protocolo inalterado. Este parâmetro é ignorado.
  6. Em Backends > Novo back-end, selecione Criar grupo de endpoints de rede sem servidor.
    1. Na janela Criar grupo de endpoints de rede sem servidor, insira um Nome.
    2. Em Região, a região do balanceador de carga é exibida.
    3. No campo Tipo de grupo de endpoints de rede sem servidor, selecione Cloud Run. O Cloud Run é o único tipo compatível.
    4. Selecione Selecionar nome do serviço.
    5. Na lista suspensa Serviço, selecione o serviço do Cloud Run em que você quer criar um balanceador de carga.
    6. Clique em Concluído.
    7. Clique em Criar.
  7. Na janela Criar serviço de back-end, clique em Criar.

Configurar regras de roteamento

As regras de roteamento determinam como o tráfego é direcionado. É possível direcioná-lo para um serviço de back-end ou do Kubernetes. Qualquer tráfego que não corresponda explicitamente a um host e caminho será enviado para o serviço padrão.

  1. Clique em Host simples e uma regra de caminho.
  2. Selecione um serviço de back-end na lista suspensa Back-end.

Analise a configuração

  1. Clique em Analisar e finalizar.
  2. Revise os valores de Back-end, Regras de host e caminho e Front-end.
  3. Opcional: clique em Código equivalente para conferir a solicitação de API REST que será usada para criar o balanceador de carga.
  4. Clique em Criar. Aguarde o balanceador de carga ser criado.
  5. Clique no nome do balanceador de carga (serverless-lb).
  6. Anote o endereço IP do balanceador de carga para a próxima tarefa.

gcloud

  1. Crie um NEG sem servidor para seu serviço do Cloud Run:
        gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
            --region=REGION \
            --network-endpoint-type=serverless  \
            --cloud-run-service=CLOUD_RUN_SERVICE_NAME
        
  2. Criar um serviço de back-end regional Defina --protocol como HTTP. Esse parâmetro é ignorado, mas é necessário porque --protocol assume como padrão o TCP.
        gcloud compute backend-services create BACKEND_SERVICE_NAME \
            --load-balancing-scheme=INTERNAL_MANAGED \
            --protocol=HTTP \
            --region=REGION
        
  3. Adicione o NEG sem servidor como um back-end ao serviço de back-end:
        gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
            --region=REGION \
            --network-endpoint-group=SERVERLESS_NEG_NAME \
            --network-endpoint-group-region=REGION
        
  4. Crie um mapa de URL regional para encaminhar as solicitações recebidas para o serviço de back-end:
        gcloud compute url-maps create URL_MAP_NAME \
            --default-service=BACKEND_SERVICE_NAME \
            --region=REGION
        
    Este exemplo de mapa de URL segmenta apenas um back-end serviço que representa um único app sem servidor. Assim, você não precisa configurar regras de host ou correspondentes de caminho.
  5. Opcional: execute esta etapa se você estiver usando HTTPS entre o cliente e o balanceador de carga. Ela não é necessário para balanceadores de carga HTTP.

    É possível criar certificados do Compute Engine ou do Gerenciador de certificados. Use um dos métodos a seguir para criar certificados usando o Gerenciador de certificados:

    • Certificados regionais autogerenciados. Para informações sobre como criar e usar certificados autogerenciados regionais, consulte Implantar um certificado autogerenciado regional. Mapas de certificados não são compatíveis.

    • Certificados regionais gerenciados pelo Google. Mapas de certificados não são compatíveis.

      Os seguintes tipos de certificados regionais gerenciados pelo Google são aceitos pelo Gerenciador de certificados:

    • Depois de criar certificados, anexe o certificado diretamente ao proxy de destino.

      Para criar um recurso de certificado SSL autogerenciado::
          gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
              --certificate CRT_FILE_PATH \
              --private-key KEY_FILE_PATH \
              --region=REGION
          
    • Crie um proxy de destino regional para encaminhar solicitações ao mapa de URLs.

      Para um balanceador de carga HTTP, crie um proxy de destino HTTP:
          gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
      Para um balanceador de carga HTTPS, crie um proxy de destino HTTPS. O proxy é a parte do balanceador de carga onde é armazenado o certificado SSL para balanceamento de carga HTTPS, portanto, nesta etapa carregue também o certificado.
          gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
              --ssl-certificates=SSL_CERTIFICATE_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
    • Crie uma regra de encaminhamento para encaminhar as solicitações recebidas para o proxy. Não use a sub-rede somente proxy para o endereço IP da regra de encaminhamento. É possível configurar qualquer endereço IP válido a partir da sub-rede (lb-subnet).

      Para um balanceador de carga HTTP:
          gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
              --load-balancing-scheme=INTERNAL_MANAGED \
              --network=lb-network \
              --subnet=lb-subnet \
              --address=IP_ADDRESS \
              --target-http-proxy=TARGET_HTTP_PROXY_NAME \
              --target-http-proxy-region=REGION \
              --region=REGION \
              --ports=80
          
      Para um balanceador de carga HTTPS:
          gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
              --load-balancing-scheme=INTERNAL_MANAGED \
              --network=lb-network \
              --subnet=lb-subnet \
              --address=IP_ADDRESS \
              --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
              --target-https-proxy-region=REGION \
              --region=REGION \
              --ports=443
          

Testar o balanceador de carga

Agora que você configurou o balanceador de carga, é possível começar a enviar tráfego para o endereço IP dele.

Criar uma VM cliente

No exemplo, é criada uma VM de cliente (vm-client) na mesma região do balanceador de carga. O cliente é usado para validar a configuração do balanceador de carga e demonstrar o comportamento esperado.

gcloud

A VM cliente pode estar em qualquer zona na mesma REGION que o balanceador de carga e usar qualquer sub-rede na mesma rede VPC.

gcloud compute instances create vm-client \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --network=lb-network \
    --subnet=lb-subnet \
    --zone=ZONE

Configure a regra de firewall

Este exemplo requer a seguinte regra de firewall para a VM do cliente de teste:

fw-allow-ssh. Uma regra de entrada, aplicável à VM do cliente de teste, que permite a conectividade SSH de entrada na porta TCP 22 de qualquer endereço. Escolha um intervalo de endereço IP de origem mais restritivo para esta regra. Por exemplo, é possível especificar apenas os intervalos de IP do sistema a partir do qual você inicia sessões SSH. Neste exemplo, usamos a tag de destino allow-ssh.

Console

  1. No Console do Google Cloud, acesse a página políticas de Firewall.
    Acesse as políticas de firewall
  2. Clique em Criar regra de firewall novamente para criar uma regra que autorize conexões SSH de entrada:
    • Nome: allow-ssh
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-ssh
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 0.0.0.0/0
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção tcp e insira 22 como o número da porta.
  3. Clique em Criar.

gcloud

  1. Crie a regra de firewall fw-allow-ssh que permita a conectividade SSH para VMs com a tag de rede allow-ssh. Se você omitir source-ranges, o Google Cloud interpretará que a regra autoriza a conexão proveniente de qualquer origem.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

Enviar tráfego ao balanceador de carga

Pode levar alguns minutos para que a configuração do balanceador de carga seja propagada após sua primeira implantação.

  • Conecte-se via SSH à instância do cliente.

    gcloud compute ssh vm-client \
      --zone=ZONE
    
  • Verifique se o balanceador de carga está veiculando a página inicial do serviço do Cloud Run conforme o esperado.

    Para fazer testes em HTTP, execute:

    curl IP_ADDRESS
    

    Para fazer testes em HTTPS, execute:

    curl -k -s 'https://TEST_DOMAIN_URL:443' --connect-to TEST_DOMAIN_URL:443:IP_ADDRESS:443
    

    A sinalização -k faz com que o curl ignore a validação do certificado.

Outras opções de configuração

Nesta seção, o exemplo é detalhado para fornecer outras opções de configuração. Todas as tarefas são opcionais. É possível realizá-las em qualquer ordem.

Como usar uma máscara de URL

Ao criar um NEG sem servidor, em vez de selecionar um serviço específico do Cloud Run (totalmente gerenciado), é possível usar uma máscara de URL para apontar para vários serviços exibidos no mesmo domínio. Uma máscara de URL é um modelo do esquema de URL. O NEG sem servidor usa esse modelo para extrair o nome do serviço do URL da solicitação recebida e mapear a solicitação para o serviço apropriado.

As máscaras de URL são particularmente úteis se o serviço estiver mapeado para um domínio personalizado em vez do endereço padrão fornecido pelo Google Cloud para o serviço implantado. Uma máscara de URL permite segmentar vários serviços e versões com uma única regra, mesmo quando seu aplicativo usa um padrão do URL personalizado.

Se você ainda não tiver feito isso, leia Visão geral do NEGS sem servidor: máscaras de URL.

Criar uma máscara de URL

Para criar uma máscara de URL para o balanceador de carga, comece com o URL do serviço. Este exemplo usa um aplicativo de amostra sem servidor em execução em https://example.com/login. Esse é o URL em que o serviço login do app é exibido.

  1. Remova o http ou o https do URL. Você ainda tem example.com/login.
  2. Substitua o nome do serviço por um marcador para a máscara de URL.
    • Cloud Run: substitua o nome do serviço do Cloud Run pelo marcador <service>. Se o serviço do Cloud Run (totalmente gerenciado) tiver uma tag associada a ele, substitua o nome da tag pelo marcador <tag>. Neste exemplo, a máscara de URL restante é example.com/<service>.
  3. Opcional: se o nome do serviço puder ser extraído da parte do caminho do URL, o domínio poderá ser omitido. A parte do caminho da máscara de URL é diferenciada pelo primeiro caractere de barra (/). Se uma barra (/) não estiver presente na máscara de URL, a máscara será entendida para representar apenas o host. Portanto, para este exemplo, a máscara de URL pode ser reduzida para /<service>.

    Da mesma forma, se <service> puder ser extraído da parte do host do URL, será possível omitir o caminho completamente da máscara de URL.

    Também é possível omitir todos os componentes de host ou subdomínio que vêm antes do primeiro marcador, bem como qualquer componente de caminho que vem depois do último marcador. Nesses casos, o marcador captura as informações necessárias para o componente.

Veja mais alguns exemplos que demonstram essas regras:

Nesta tabela, pressupomos que você tenha um domínio personalizado chamado example.com e que todos os serviços do Cloud Run estejam sendo mapeados para esse domínio.

Serviço, nome da tag URL de domínio personalizado do Cloud Run Máscara de URL
serviço: login https://login-home.example.com/web <service>-home.example.com
serviço: login https://example.com/login/web example.com/<service> ou /<service>
service: login, tag: test https://test.login.example.com/web <tag>.<service>.example.com
service: login, tag: test https://example.com/home/login/test example.com/home/<service>/<tag> ou /home/<service>/<tag>
service: login, tag: test https://test.example.com/home/login/web <tag>.example.com/home/<service>

Como criar um NEG sem servidor com uma máscara de URL

Console

Para um novo balanceador de carga, é possível usar o mesmo processo completo conforme descrito anteriormente neste documento. Ao configurar o serviço de back-end, em vez de selecionar um serviço específico, insira uma máscara de URL.

Se você tiver um balanceador de carga, poderá editar a configuração do back-end e fazer com que o ponto de NEG sem servidor acesse uma máscara de URL, em vez de um serviço específico.

Para adicionar um NEG sem servidor baseado em máscara de URL a um serviço de back-end, faça o seguinte:

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.
    Acesse "Balanceamento de carga"
  2. Clique no nome do balanceador de carga que tem o serviço de back-end que você quer editar.
  3. Na página Detalhes do balanceador de carga, clique em Editar.
  4. Na página Editar balanceador de carga externo do aplicativo global, clique em Configuração de back-end.
  5. Na página Configuração de back-end, clique em Editar no serviço de back-end que você quer modificar.
  6. Clique em Adicionar back-end.
  7. Selecione Criar grupo de endpoints da rede sem servidor.
    1. Em Nome, insira helloworld-serverless-neg.
    2. Em Região, a região do balanceador de carga é exibida.
    3. Em Tipo de grupo de endpoints de rede sem servidor, o Cloud Run é o único tipo de grupo de endpoints de rede compatível.
      1. Selecione Usar máscara de URL.
      2. Insira uma máscara de URL. Para informações sobre como criar uma máscara de URL, consulte Como criar uma máscara de URL.
      3. Clique em Criar.

  8. Em Novo back-end, clique em Concluído.
  9. Clique em Atualizar.

gcloud

Para criar um NEG sem servidor com uma máscara de URL de amostra de example.com/<service>:

gcloud compute network-endpoint-groups create SERVERLESS_NEG_MASK_NAME \
    --region=REGION \
    --network-endpoint-type=serverless \
    --cloud-run-url-mask="example.com/<service>"

Como excluir um NEG sem servidor

Um grupo de endpoints de rede não pode ser excluído se estiver conectado a um serviço de back-end. Antes de excluir um NEG, verifique se ele está separado do serviço de back-end.

Console

  1. Para garantir que o NEG sem servidor que você quer excluir não esteja sendo usado por nenhum serviço de back-end, acesse a guia Serviços de back-end na página Componentes de balanceamento de carga.
    Acesse "Serviços de back-end"
  2. Se o NEG sem servidor estiver em uso no momento, faça o seguinte:
    1. Clique no nome do serviço de back-end que está usando o NEG sem servidor.
    2. Clique em Editar.
    3. Na lista de Back-ends, clique em para remover o back-end NEG sem servidor do serviço de back-end.
    4. Clique em Save.

  3. Acesse a página Grupo de endpoints da rede no Console do Google Cloud.
    Acesse "Grupo de endpoints de rede"
  4. Marque a caixa de seleção do NEG sem servidor que você quer excluir.
  5. Clique em Excluir.
  6. Clique em Excluir novamente para confirmar.

gcloud

Para remover um NEG sem servidor de um serviço de back-end, especifique a região em que o NEG foi criado.

gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=SERVERLESS_NEG_NAME \
    --network-endpoint-group-region=REGION \
    --region=REGION

Para excluir o NEG sem servidor:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME \
    --region=REGION

A seguir