Como configurar um balanceador de carga HTTP(S) externo regional com o Cloud Run

Nesta página, mostramos como implantar um balanceador de carga HTTP(S) externo regional com um back-end do 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 de linha de comando gcloud. Consulte Visão geral do gcloud para ver informações conceituais e de instalação sobre a ferramenta.

Caso ainda não tenha usado a ferramenta de linha de comando gcloud anteriormente, primeiro execute gcloud init para iniciar seu diretório gcloud.

Observação: não é possível usar o Console do Cloud para configurar um balanceador de carga HTTP(S) regional 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 e o balanceador de carga precisam estar na mesma região do serviço do Cloud Run. É possível bloquear solicitações externas que são enviadas diretamente para os URLs padrão do serviço do Cloud Run restringindo a entrada para internal and cloud load balancing. Exemplo:

gcloud run deploy CLOUD_RUN_SERVICE_NAME \
  --platform=managed \
  --allow-unauthenticated \
  --ingress=internal-and-cloud-load-balancing \
  --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, primeiro crie uma rede VPC, crie uma instância de VM em uma sub-rede específica e depois 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. Por fim, defina as regras de firewall para sua rede.

Console

  1. Acesse a página Redes VPC no console do Google Cloud.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. No campo Nome, use lb-network.

  4. No campo Modo de criação de 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. Forneça um Nome para a sub-rede.
    2. Selecione uma Região.
    3. Insira um intervalo de endereços IP, como 10.1.2.0/24. Para saber mais, consulte o intervalo principal de IPv4.

      Se você selecionar um intervalo que não seja um endereço RFC 1918, confirme se não há incompatibilidade entre o intervalo e uma configuração existente. Para mais informações, consulte Intervalos de sub-rede IPv4.

    4. Clique em Concluído.

  6. Na seção Regras de firewall, selecione regras de firewall predefinidas na guia Regras de firewall IPv4. Essas regras predefinidas abordam casos de uso comuns de conectividade com instâncias.

    Cada nome de regra predefinido começa com o nome da rede VPC que você está criando.

    1. Opcional: você pode editar a regra lb-network-allow-custom. No lado direito da linha que contém a regra, clique em Editar para selecionar sub-redes, adicionar mais intervalos IPv4 e especificar protocolos e portas.

    Se você adicionar mais sub-redes, a regra de firewall lb-network-allow-custom não será atualizada automaticamente. Se você precisar de regras de firewall para as novas sub-redes, será necessário atualizar a configuração do firewall para adicionar as regras.

    Se você não selecionar regras predefinidas, será possível criar suas próprias regras de firewall depois de criar a rede.

  7. Selecione Modo de roteamento dinâmico para a rede VPC. É possível alterar o modo de roteamento dinâmico mais tarde.

    Para saber mais informações, consulte modo de roteamento dinâmico.

  8. No campo Unidade de transmissão máxima (MTU, na sigla em inglês), selecione 1460 (padrão) ou 1500.

    Analise a visão geral da unidade de transmissão máxima antes de definir a MTU como 1500.

  9. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada com 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 instância de VM em uma sub-rede específica

É necessário que haja pelo menos uma VM na rede VPC em que você pretende configurar um balanceador de carga regional com um back-end sem servidor. Se você já tiver uma VM na rede, não precisará realizar esta etapa.

Console

  1. No Console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Selecione o projeto e clique em Continuar.

  3. Clique em Criar instância.

  4. Especifique um Nome para sua VM, como test-vm. Saiba mais em Convenção de nomenclatura de recursos.

  5. Opcional: altere a zona desta VM. O Compute Engine seleciona, aleatoriamente, a lista de zonas dentro de cada região para incentivar o uso em várias zonas.

  6. Na seção Firewall, selecione Permitir tráfego HTTP ou Permitir tráfego HTTPS para permitir tráfego HTTP ou HTTPS na VM.

    O console do Cloud adiciona uma tag de rede à VM e cria a regra de firewall de entrada correspondente que permite todo o tráfego de entrada em tcp:80 (HTTP) ou tcp:443 (HTTPS).

    A tag de rede associa a regra de firewall à VM. Para saber mais, consulte Visão geral sobre regras de firewall na documentação da nuvem privada virtual.

  7. Expanda a seção Rede, discos, segurança, gerenciamento, locação individual.

    1. Expanda a seção Rede.
    2. Em Interfaces de rede, especifique os detalhes da rede:
      1. No campo Rede, selecione a rede VPC que contém a sub-rede que você criou, como lb-network.
      2. No campo Sub-rede, selecione a sub-rede que será usada pela VM, como lb-subnet.
      3. Clique em Concluído.
  8. Para criar e iniciar a VM, clique em Criar.

gcloud

  1. Crie uma VM.

    gcloud compute instances create test-vm \
    --network=lb-network \
    --subnet=lb-subnet \
    --zone=ZONE
    

Criar uma sub-rede somente proxy

Crie uma sub-rede somente proxy para todos os balanceadores de carga baseados em Envoy (balanceadores de carga HTTP[S] internos e balanceadores de carga HTTP[S] externos regionais) na região da rede lb-network.

Console

  1. No Console do Cloud, acesse a página de 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 com 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) externo regional para um aplicativo do Cloud Run.
Arquitetura regional de balanceamento de carga HTTP(S) externo 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. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  3. Em Internet ou somente interno, selecione Da Internet para VMs ou serviços sem servidor.
  4. Em Global ou regional, selecione Balanceador de carga HTTP(S) global.
  5. Clique em Continuar.
  6. Em Nome do balanceador de carga, digite serverless-lb.
  7. Selecione a Rede como lb_network.
  8. 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 HTTP(S) externo regional, preencha os campos como a seguir.
    1. Em Protocolo, selecione HTTPS.
    2. Em Versão IP, selecione IPv4.
    3. Em Endereço IP, selecione Temporário.
    4. Em Porta, selecione 443.
    5. Em Certificado, selecione um certificado SSL atual ou crie um novo.

      Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy HTTPS. É possível criar um recurso de certificado SSL usando um certificado SSL autogerenciado.
      Os certificados gerenciados pelo Google não são compatíveis.

    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 HTTPS.
    2. Em Versão IP, selecione IPv4.
    3. Em Endereço IP, selecione Temporário.
    4. 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 (Prévia).
  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. Clique em Criar. Aguarde o balanceador de carga ser criado.
  4. Clique no nome do balanceador de carga (serverless-lb).
  5. Anote o endereço IP do balanceador de carga para a próxima tarefa.

gcloud

  1. Reserve um endereço IP externo estático para o balanceador de carga.
        gcloud compute addresses create ADDRESS_NAME  \
            --region=REGION \
            --network-tier=STANDARD
        
  2. 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
        
  3. Criar um serviço de back-end regional Defina --protocol como HTTP ou HTTPS.
        gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --protocol=HTTP \
            --region=REGION
        
  4. Adicione o NEG sem servidor como um back-end ao serviço de back-end:
        gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \
            --region=REGION \
            --network-endpoint-group=SERVERLESS_NEG_NAME \
            --network-endpoint-group-region=REGION
        
  5. Crie um mapa de URL para encaminhar solicitações recebidas para o serviço de back-end:
        gcloud beta compute url-maps create URL_MAP_NAME \
            --default-service=BACKEND_SERVICE_NAME \
            --region=REGION
        
    Este mapa de URL de exemplo segmenta apenas um serviço de back-end que representa um único aplicativo sem servidor. Portanto, não é necessário configurar regras de host ou correspondências de caminho.
  6. Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy de destino HTTPS. É possível criar um recurso de certificado SSL usando um certificado SSL autogerenciado. Os certificados gerenciados pelo Google não são suportados. Para criar um recurso de certificado SSL autogerenciado:
        gcloud beta compute ssl-certificates create SSL_CERTIFICATE_NAME \
            --certificate CRT_FILE_PATH \
            --private-key KEY_FILE_PATH \
            --region=REGION
        
  7. 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 beta 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 beta compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
            --ssl-certificates=SSL_CERTIFICATE_NAME \
            --url-map=URL_MAP_NAME \
            --region=REGION
        
  8. Crie uma regra de encaminhamento para encaminhar as solicitações recebidas para o proxy. Para um balanceador de carga HTTP:
        gcloud beta compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --network-tier=STANDARD \
            --network=lb-network \
            --address=ADDRESS_NAME \
            --target-http-proxy=TARGET_HTTP_PROXY_NAME \
            --target-http-proxy-region=REGION \
            --region=REGION \
            --ports=80
        
    Para um balanceador de carga HTTPS:
        gcloud beta compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --network-tier=STANDARD \
            --network=lb-network \
            --address=ADDRESS_NAME \
            --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
            --target-https-proxy-region=REGION \
            --region=REGION \
            --ports=443
        

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

  1. Acesse a página Balanceamento de carga no Console do Google Cloud.
    Acesse balanceamento de carga
  2. Clique no balanceador de carga que você acabou de criar.
  3. Anote o Endereço IP do balanceador de carga.
  4. Para um balanceador de carga HTTP, é possível testar seu balanceador de carga usando um navegador da Web acessando http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você será direcionado para a página inicial do serviço do Cloud Run.
  5. Para um balanceador de carga HTTPS, é possível testar seu balanceador de carga usando um navegador da Web acessando https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você será direcionado para a página inicial do serviço do Cloud Run.
    Caso você tenha usado um certificado autoassinado durante o teste, o navegador exibirá um aviso. Você precisa permitir que o navegador aceite um certificado autoassinado. Clique no aviso para ver a página real.

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 usará 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 personalizado do URL.

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 aplicativo será 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.
    1. 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 /. Se um / 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> ou .

    Da mesma forma, se o nome do serviço 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 tópico. 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 HTTP(S), 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 é exibido. Atualmente, 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 ver instruçõ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 Salvar.
  3. Acesse a página Grupos de endpoints da rede no Console do 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