Configure um Application Load Balancer externo regional com o Cloud Run

Esta página mostra-lhe como implementar um Application Load Balancer externo regional com um back-end do Cloud Run. Para configurar esta opção, usa um back-end de NEG sem servidor para o balanceador de carga.

Antes de experimentar este procedimento, certifique-se de que conhece os seguintes tópicos:

Este documento mostra como configurar um Application Load Balancer que envia pedidos por proxy para um back-end de NEG sem servidor.

Os NEGs sem servidor permitem-lhe usar os serviços do Cloud Run com o seu equilibrador de carga. Depois de configurar um balanceador de carga com o back-end do NEG sem servidor, os pedidos ao balanceador de carga são encaminhados para o back-end do Cloud Run.

Antes de começar

  1. Instale a CLI do Google Cloud
  2. Implemente um serviço do Cloud Run
  3. Configure as autorizações

Instale o SDK do Google Cloud

Instale a ferramenta CLI Google Cloud. Para informações conceptuais e de instalação sobre a CLI gcloud, consulte o artigo Vista geral da CLI gcloud.

Se não tiver executado a CLI gcloud anteriormente, execute primeiro gcloud init para inicializar o diretório da CLI gcloud.

Implemente um serviço do Cloud Run

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

Para o exemplo nesta página, pode usar qualquer um dos inícios rápidos do Cloud Run para implementar um serviço do Cloud Run.

O NEG sem servidor e o equilibrador de carga têm de estar na mesma região que o serviço do Cloud Run. Pode bloquear pedidos externos enviados diretamente para os URLs predefinidos do serviço Cloud Run restringindo a entrada a internal and cloud load balancing. Por exemplo:

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

Tome nota do nome do serviço que criar. O resto desta página mostra-lhe como configurar um equilibrador de carga que encaminha pedidos para este serviço.

Configure autorizações

Para seguir este guia, tem de criar um NEG sem servidor e um equilibrador de carga num projeto. Tem de ser proprietário ou editor do projeto, ou ter as seguintes funções e autorizações do IAM do Compute Engine:

Tarefa Função necessária
Crie um balanceador de carga e componentes de rede Administrador de rede de Calcular (roles/compute.networkAdmin)
Crie e modifique NEGs Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1)
Crie e modifique certificados SSL Administrador de segurança (roles/iam.securityAdmin)

Configure a rede e as sub-redes

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

  • Crie uma rede e uma sub-rede da nuvem virtual privada (VPC).
  • Crie uma sub-rede só de proxy.

Crie a rede de VPC

Crie uma rede VPC no modo personalizado.

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Clique em Criar rede de VPC.

  3. Em Nome, introduza lb-network.

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

Crie uma sub-rede só de proxy

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

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Clique no nome da rede de VPC partilhada à qual quer adicionar a sub-rede apenas de proxy.

  3. Clique em Adicionar sub-rede.

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

  5. Selecione uma região.

  6. Defina Purpose como Regional Managed Proxy.

  7. Introduza um intervalo de endereços IP como 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

Crie a sub-rede só de 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 apenas de proxy. Pode 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

Crie o balanceador de carga

No diagrama seguinte, o balanceador de carga usa um back-end do NEG sem servidor para direcionar pedidos para um serviço do Cloud Run sem servidor.

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

Arquitetura de balanceamento de carga HTTP ou HTTPS externo regional para uma aplicação do Cloud Run.
Arquitetura de balanceamento de carga HTTP ou HTTPS externo regional para uma aplicação do Cloud Run (clique para aumentar).

Consola

Selecione o tipo de balanceador de carga

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique em Criar equilibrador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicações (HTTP/HTTPS) e clique em Seguinte.
  4. Para Público ou interno, selecione Público (externo) e clique em Seguinte.
  5. Para a Implementação global ou de região única, selecione Melhor para cargas de trabalho regionais e clique em Seguinte.
  6. Clique em Configurar.

Configuração básica

  1. Para o nome do balanceador de carga, introduza serverless-lb.
  2. Selecione a Rede como lb_network.
  3. Mantenha a janela aberta para continuar.

Configure a interface

  1. Antes de continuar, certifique-se de que tem um certificado SSL.
  2. Clique em Configuração do front-end.
  3. Introduza um Nome.
  4. Para configurar um Application Load Balancer externo regional, preencha os campos da seguinte forma:
    1. Para Protocolo, selecione HTTPS.
    2. Para Nível de serviço de rede, selecione Padrão.
    3. Para Versão de IP, selecione IPv4.
    4. Para Endereço IP, selecione Efémero.
    5. Em Porta, selecione 443.
    6. Em Escolher repositório de certificados, selecione Certificados clássicos.

      O exemplo seguinte mostra como criar certificados SSL do Compute Engine:

    7. Clique em Criar um novo certificado.
      1. No campo Nome, introduza um nome.
      2. Nos campos adequados, carregue os seus ficheiros formatados em PEM:
        • Certificado
        • Chave privada
      3. Clique em Criar.

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

  5. Opcional: para criar um balanceador de carga HTTP, faça o seguinte:
    1. Para Protocolo, selecione HTTP.
    2. Para Nível de serviço de rede, selecione Padrão.
    3. Para Versão de IP, selecione IPv4.
    4. Para Endereço IP, selecione Efémero.
    5. Em Porta, selecione 80.
  6. Clique em Concluído.

Configure os serviços de back-end

  1. Clique em Configuração de back-end.
  2. No menu Criar ou selecionar serviços de back-end, mantenha o ponteiro sobre Serviços de back-end e, de seguida, selecione Criar um serviço de back-end.
  3. Na janela Criar um serviço de back-end, introduza um Nome.
  4. Para Tipo de back-end, selecione Grupo de pontos finais da rede sem servidor.
  5. Deixe o Protocolo inalterado. Este parâmetro é ignorado.
  6. Para Back-ends > Novo back-end, selecione Criar grupo de pontos finais de rede sem servidor.
    1. Na janela Criar grupo de pontos finais de rede sem servidor, introduza um Nome.
    2. Para Região, é apresentada a região do balanceador de carga.
    3. No campo Tipo de grupo de pontos finais da rede sem servidor, selecione Cloud Run. O Cloud Run é o único tipo suportado.
    4. Selecione Selecionar nome do serviço.
    5. Na lista Serviço, selecione o serviço do Cloud Run para o qual quer criar um balanceador de carga.
    6. Clique em Concluído.
    7. Clique em Criar.
  7. Opcional: configure uma política de segurança do back-end predefinida. A política de segurança predefinida limita o tráfego acima de um limite configurado pelo utilizador. Para mais informações sobre as políticas de segurança predefinidas, consulte a vista geral da limitação de taxa.

    1. Para desativar a política de segurança predefinida do Cloud Armor, selecione None na lista Política de segurança de back-end do Cloud Armor.
    2. Para configurar a política de segurança predefinida do Cloud Armor, selecione Política de segurança predefinida na lista Política de segurança de back-end do Cloud Armor.
    3. No campo Nome da política, aceite o nome gerado automaticamente ou introduza um nome para a sua política de segurança.
    4. No campo Contagem de pedidos, aceite a contagem de pedidos predefinida ou introduza um número inteiro entre 1 e 10,000.
    5. No campo Intervalo, selecione um intervalo.
    6. No campo Aplicar à chave, escolha um dos seguintes valores: Tudo, Endereço IP ou Endereço IP X-Forwarded-For. Para mais informações sobre estas opções, consulte o artigo Identificar clientes para a limitação de taxa.
  8. Na janela Criar serviço de back-end, clique em Criar.

Configure regras de encaminhamento

As regras de encaminhamento determinam como o seu tráfego é direcionado. Pode direcionar o tráfego para um serviço de back-end ou um serviço Kubernetes. Todo o tráfego que não corresponda explicitamente a um anfitrião e a um matcher de caminho é enviado para o serviço predefinido.

  1. Clique em Regra simples de anfitrião e caminho.
  2. Selecione um serviço de back-end na lista Back-end.

Reveja a configuração

  1. Clique em Rever e finalizar.
  2. Reveja os valores de Backend, Regras de anfitriões e caminhos e Frontend.
  3. Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o balanceador de carga.
  4. Clique em Criar. Aguarde a criação do balanceador de carga.
  5. Clique no nome do balanceador de carga (serverless-lb).
  6. Tome nota do endereço IP do equilibrador de carga para a tarefa seguinte.

gcloud

  1. Reserve um endereço IP externo estático para o balanceador de carga.
        gcloud compute addresses create IP_ADDRESS_NAME  \
            --region=REGION \
            --network-tier=STANDARD
        
  2. Crie um NEG sem servidor para o 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. Crie um serviço de back-end regional. Defina o --protocol como HTTP. Este parâmetro é ignorado, mas é obrigatório porque, caso contrário, a predefinição é TCP.--protocol
        gcloud compute backend-services create BACKEND_SERVICE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --protocol=HTTP \
            --region=REGION
        
  4. Adicione o NEG sem servidor como 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
        
  5. Crie um mapa de URLs regional para encaminhar pedidos recebidos para o serviço de back-end:
        gcloud compute url-maps create URL_MAP_NAME \
            --default-service=BACKEND_SERVICE_NAME \
            --region=REGION
        
    Este mapa de URLs de exemplo segmenta apenas um serviço de back-end que representa uma app sem servidor única, pelo que não precisa de configurar regras de anfitrião nem correspondências de caminhos.
  6. Opcional: execute este passo se estiver a usar HTTPS entre o cliente e o balanceador de carga. Este passo não é necessário para balanceadores de carga HTTP.

    Pode criar certificados do Compute Engine ou do Certificate Manager. Use qualquer um dos seguintes métodos para criar certificados através do gestor de certificados:

    Depois de criar os certificados, anexe-os diretamente ao proxy de destino.

    Para criar um recurso de certificado SSL autogerido regional:
        gcloud 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 pedidos para o mapa de URLs.

    Para um balanceador de carga HTTP, crie um proxy HTTP de destino:
        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 HTTPS de destino. O proxy é a parte do balanceador de carga que contém o certificado SSL para o balanceamento de carga HTTPS, pelo que também carrega o certificado neste passo.
        gcloud 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 pedidos recebidos para o proxy. Para um balanceador de carga HTTP:
        gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --network-tier=STANDARD \
            --network=lb-network \
            --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=EXTERNAL_MANAGED \
            --network-tier=STANDARD \
            --network=lb-network \
            --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
            --target-https-proxy-region=REGION \
            --region=REGION \
            --ports=443
        

Teste o balanceador de carga

Agora que configurou o equilibrador de carga, pode começar a enviar tráfego para o endereço IP do equilibrador de carga.

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique no balanceador de carga que acabou de criar.

  3. Tome nota do endereço IP do balanceador de carga.

  4. Para um balanceador de carga de HTTP, pode testar o balanceador de carga através de um navegador de Internet acedendo a http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do equilibrador de carga. Deve aceder à página inicial do serviço do Cloud Run.

  5. Para um balanceador de carga HTTPS, pode testar o balanceador de carga através de um navegador de Internet acedendo a https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do equilibrador de carga. A página é redirecionada para a página inicial do serviço do Cloud Run.
    Se usou um certificado autoassinado para testes, o navegador apresenta um aviso. Tem de instruir explicitamente o navegador para aceitar um certificado autossinado. Clique no aviso para ver a página real.

Opções de configuração adicionais

Esta secção expande o exemplo de configuração para oferecer opções de configuração alternativas e adicionais. Todas as tarefas são opcionais. Pode realizá-las por qualquer ordem.

Usar uma máscara de URL

Quando cria um NEG sem servidor, em vez de selecionar um serviço do Cloud Run específico, pode usar uma máscara de URL para apontar para vários serviços publicados no mesmo domínio. Uma máscara de URL é um modelo do seu esquema de URL. O NEG sem servidor usa este modelo para extrair o nome do serviço do URL do pedido recebido e mapear o pedido para o serviço adequado.

As máscaras de URL são particularmente úteis se o seu serviço estiver mapeado para um domínio personalizado em vez do endereço predefinido que Google Cloud fornece para o serviço implementado. Uma máscara de URL permite-lhe segmentar vários serviços e versões com uma única regra, mesmo quando a sua aplicação está a usar um padrão de URL personalizado.

Se ainda não o fez, certifique-se de que lê a vista geral dos NEGS sem servidor: máscaras de URL.

Construa uma máscara de URL

Para criar uma máscara de URL para o seu equilibrador de carga, comece com o URL do seu serviço. Este exemplo usa uma app sem servidor de exemplo em execução em https://example.com/login. Este é o URL onde o serviço login da app é publicado.

  1. Remova o http ou o https do URL. Tem example.com/login.
  2. Substitua o nome do serviço por um marcador de posição para a máscara de URL.
    • Cloud Run: substitua o nome do serviço do Cloud Run pelo marcador de posição <service>. Se o serviço do Cloud Run tiver uma etiqueta associada, substitua o nome da etiqueta pelo marcador de posição <tag>. Neste exemplo, a máscara de URL que lhe resta é example.com/<service>.
  3. Opcional: se for possível extrair o nome do serviço da parte do caminho do URL, o domínio pode ser omitido. A parte do caminho da máscara de URL distingue-se pelo primeiro caráter de barra (/). Se não estiver presente uma barra (/) na máscara de URL, entende-se que a máscara representa apenas o anfitrião. Por conseguinte, para este exemplo, a máscara de URL pode ser reduzida a /<service>.

    Da mesma forma, se for possível extrair <service> da parte do anfitrião do URL, pode omitir completamente o caminho da máscara de URL.

    Também pode omitir quaisquer componentes de anfitrião ou subdomínio que venham antes do primeiro marcador de posição, bem como quaisquer componentes de caminho que venham depois do último marcador de posição. Nestes casos, o marcador de posição captura as informações necessárias para o componente.

Seguem-se mais alguns exemplos que demonstram estas regras:

Esta tabela pressupõe que tem um domínio personalizado denominado example.com e que todos os seus serviços do Cloud Run estão a ser mapeados para este domínio.

Serviço, nome da etiqueta URL de domínio personalizado do Cloud Run Máscara de URL
service: login https://login-home.example.com/web <service>-home.example.com
service: 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>

Criar um NEG sem servidor com uma máscara de URL

Consola

Para um novo equilibrador de carga, pode usar o mesmo processo completo, conforme descrito anteriormente neste documento. Quando configurar o serviço de back-end, em vez de selecionar um serviço específico, introduza uma máscara de URL.

Se tiver um balanceador de carga existente, pode editar a configuração do back-end e fazer com que o NEG sem servidor aponte para 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 existente, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.
    Aceder a Balanceamento de carga
  2. Clique no nome do equilibrador de carga que tem o serviço de back-end que quer editar.
  3. Na página Detalhes do equilibrador de carga, clique em Editar.
  4. Na página Editar balanceador de carga de aplicações externo global, clique em Configuração do back-end.
  5. Na página Configuração de back-end, clique em Editar para o serviço de back-end que quer modificar.
  6. Clique em Adicionar back-end.
  7. Selecione Criar grupo de pontos finais de rede sem servidor.
    1. No campo Nome, introduza helloworld-serverless-neg.
    2. Em Região, é apresentada a região do balanceador de carga.
    3. Em Tipo de grupo de pontos finais de rede sem servidor, o Cloud Run é o único tipo de grupo de pontos finais de rede suportado.
      1. Selecione Usar máscara de URL.
      2. Introduza uma máscara de URL. Para obter informações sobre como criar uma máscara de URL, consulte o artigo Construir uma máscara de URL.
      3. Clique em Criar.

  8. No 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 exemplo 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>"

Eliminar um NEG sem servidor

Não é possível eliminar um grupo de pontos finais de rede se estiver anexado a um serviço de back-end. Antes de eliminar um NEG, certifique-se de que está desvinculado do serviço de back-end.

Consola

  1. Para se certificar de que o NEG sem servidor que quer eliminar não está a ser usado por nenhum serviço de back-end, aceda ao separador Serviços de back-end na página Componentes de equilíbrio de carga.
    Aceda aos serviços de back-end
  2. Se o NEG sem servidor estiver em utilização, faça o seguinte:
    1. Clique no nome do serviço de back-end que está a usar o NEG sem servidor.
    2. Clique em Editar.
    3. Na lista de Back-ends, clique em para remover o back-end do NEG sem servidor do serviço de back-end.
    4. Clique em Guardar.

  3. Aceda à página Grupo de pontos finais de rede na Google Cloud consola.
    Aceda a Grupo de pontos finais da rede
  4. Selecione a caixa de verificação do NEG sem servidor que quer eliminar.
  5. Clique em Eliminar.
  6. Clique novamente em Eliminar para confirmar.

gcloud

Para remover um NEG sem servidor de um serviço de back-end, tem de especificar a região onde 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 eliminar o NEG sem servidor:

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

O que se segue?