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:
- Visão geral do balanceador de carga de aplicativo interno regional
- Visão geral dos NEGs sem servidor
Neste guia, mostramos como configurar um balanceador de carga de aplicativo que encaminha solicitações para um back-end de NEG sem servidor.
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
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
.
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
No Console do Google Cloud, acesse a página Redes VPC.
Clique em Criar rede VPC.
Em Nome, insira
lb-network
.Em Modo de criação da sub-rede, selecione Personalizado.
Na seção Nova sub-rede, especifique os parâmetros de configuração a seguir para uma sub-rede:
- Em Nome, insira
lb-subnet
. - Selecione uma Região.
- Em Intervalo de endereços IP, insira
10.1.2.0/24
. - Clique em Concluído.
- Em Nome, insira
Clique em Criar.
gcloud
Crie a rede VPC personalizada usando o comando
gcloud compute networks create
:gcloud compute networks create lb-network --subnet-mode=custom
Crie uma sub-rede na rede
lb-network
. Este exemplo usa um intervalo de endereços IP de10.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
No Console do Google Cloud, acesse a página Redes VPC.
Clique no nome da rede VPC compartilhada à qual você quer adicionar uma sub-rede somente proxy.
Clique em Adicionar sub-rede.
No campo Nome, use
proxy-only-subnet
.Selecione uma Região.
Defina Finalidade como Proxy gerenciado regional.
Digite um Intervalo de endereços IP como
10.129.0.0/23
.Clique em Adicionar.
gcloud
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.
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
Iniciar a configuração
No console do Google Cloud, acesse a página Balanceamento de carga.
- Clique em Criar balanceador de carga.
- Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicativo (HTTP/HTTPS) e clique em Próxima.
- Em Voltado ao público ou interno, selecione Interno e clique em Próxima.
- Em Implantação entre regiões ou região única, selecione Melhor para cargas de trabalho regionais e clique em Próxima.
- Clique em Configurar.
Configuração básica
- Digite
serverless-lb
como o nome do balanceador de carga. - Selecione a Rede como
lb_network
. - Mantenha a janela aberta para continuar.
Configure o front-end
- Antes de continuar, verifique se você tem um certificado SSL.
- Clique em Configuração de front-end.
- Digite um Nome.
- Para configurar um balanceador de carga de aplicativo interno, preencha os campos da seguinte maneira.
- Em Protocolo, selecione HTTPS.
- Em Sub-rede, selecione a sub-rede.
- Em Versão IP, selecione IPv4.
- Em Endereço IP, selecione Temporário.
- Em Porta, selecione
443
. Em Certificado, selecione um certificado SSL atual ou crie um novo.
O exemplo a seguir mostra como criar certificados SSL do Compute Engine:
- Clique em Criar um novo certificado.
- Digite um nome no campo Nome.
- Nos campos apropriados, faça o upload dos arquivos formatados em PEM:
- Certificado
- Chave privada
- Clique em Criar.
- Opcional: para criar um balanceador de carga HTTP, faça o seguinte:
- Em Protocolo, selecione HTTP.
- Em Sub-rede, selecione a sub-rede.
- Em Versão IP, selecione IPv4.
- Em Endereço IP, selecione Temporário.
- Em Porta, selecione
80
. - Clique em Concluído.
Se quiser testar o processo sem configurar um recurso de certificado SSL, configure um balanceador de carga HTTP.
Configurar os serviços de back-end
- Clique em Configuração de back-end.
- 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.
- Na janela Criar um serviço de back-end, insira um Nome.
- Em Tipo de back-end, selecione Grupo de endpoints de rede sem servidor.
- Deixe o Protocolo inalterado. Este parâmetro é ignorado.
- Em Backends > Novo back-end, selecione Criar grupo de endpoints de rede sem servidor.
- Na janela Criar grupo de endpoints de rede sem servidor, insira um Nome.
- Em Região, a região do balanceador de carga é exibida.
- No campo Tipo de grupo de endpoints de rede sem servidor, selecione Cloud Run. O Cloud Run é o único tipo compatível.
- Selecione Selecionar nome do serviço.
- Na lista suspensa Serviço, selecione o serviço do Cloud Run em que você quer criar um balanceador de carga.
- Clique em Concluído.
- Clique em Criar.
- 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.
- Clique em Host simples e uma regra de caminho.
- Selecione um serviço de back-end na lista suspensa Back-end.
Analise a configuração
- Clique em Analisar e finalizar.
- Revise os valores de Back-end, Regras de host e caminho e Front-end.
- Opcional: clique em Código equivalente para conferir a solicitação de API REST que será usada para criar o balanceador de carga.
- Clique em Criar. Aguarde o balanceador de carga ser criado.
- Clique no nome do balanceador de carga (serverless-lb).
- Anote o endereço IP do balanceador de carga para a próxima tarefa.
gcloud
- 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
- 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
- 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
- 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. - 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:
- Certificados regionais gerenciados pelo Google com autorização de DNS por projeto. Para mais informações, consulte Implantar um certificado regional gerenciado pelo Google.
- Certificados (particulares) regionais gerenciados pelo Google com o Certificate Authority Service. Para mais informações, consulte Implantar um certificado regional gerenciado pelo Google com o serviço de AC.
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
- No Console do Google Cloud, acesse a página políticas de Firewall.
Acesse as políticas de firewall - 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.
- Nome:
- Clique em Criar.
gcloud
Crie a regra de firewall
fw-allow-ssh
que permita a conectividade SSH para VMs com a tag de redeallow-ssh
. Se você omitirsource-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
Substitua TEST_DOMAIN_URL pelo domínio associado ao seu aplicativo. Por exemplo,
test.example.com
.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.
- Remova o
http
ou ohttps
do URL. Você ainda temexample.com/login
. - 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>
.
- Cloud Run: substitua o nome do serviço do Cloud Run pelo
marcador
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:
- No Console do Google Cloud, acesse a página Balanceamento de carga.
Acesse "Balanceamento de carga" - Clique no nome do balanceador de carga que tem o serviço de back-end que você quer editar.
- Na página Detalhes do balanceador de carga, clique em Editar.
- Na página Editar balanceador de carga externo do aplicativo global, clique em Configuração de back-end.
- Na página Configuração de back-end, clique em Editar no serviço de back-end que você quer modificar.
- Clique em Adicionar back-end.
- Selecione Criar grupo de endpoints da rede sem servidor.
- Em Nome, insira
helloworld-serverless-neg
. - Em Região, a região do balanceador de carga é exibida.
- Em Tipo de grupo de endpoints de rede sem servidor, o Cloud Run é o único tipo de grupo de endpoints de rede compatível.
- Selecione Usar máscara de URL.
- 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.
- Clique em Criar.
- Em Novo back-end, clique em Concluído.
- 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
- 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" - Se o NEG sem servidor estiver em uso no momento, faça o seguinte:
- Clique no nome do serviço de back-end que está usando o NEG sem servidor.
- Clique em Editar.
- Na lista de Back-ends, clique em para remover o back-end NEG sem servidor do serviço de back-end.
- Clique em Save.
- Acesse a página Grupo de endpoints da rede no Console do Google Cloud.
Acesse "Grupo de endpoints de rede" - Marque a caixa de seleção do NEG sem servidor que você quer excluir.
- Clique em Excluir.
- 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
- Implantar um balanceador de carga de aplicativo interno regional com o Cloud Run usando o Terraform
- Limpar uma configuração de balanceamento de carga
- Desprovisionar VPC compartilhada
- Geração de registros e monitoramento do balanceador de carga de aplicativo interno
- Resolver problemas com balanceadores de carga internos regionais de aplicativos