Este guia usa um exemplo para ensinar os fundamentos do uso de um back-end externo (às vezes chamado de origem personalizada) com um balanceador de carga de aplicativo externo global. Um back-end externo é um endpoint externo ao Google Cloud. Ao usar um back-end externo com um balanceador de carga de aplicativo externo global, é possível melhorar o desempenho usando o armazenamento em cache do Cloud CDN.
O guia mostra como configurar um balanceador de carga de aplicativo externo global com um serviço de back-end ativado para o Cloud CDN que envia solicitações por proxy para um servidor de back-end externo.
Antes de seguir este guia, familiarize-se com a documentação de visão geral do NEG na Internet, incluindo as limitações.O diagrama de arquitetura a seguir mostra um front-end externo do balanceador de carga de aplicativo global com um back-end externo.
Permissões
Para seguir este guia, você precisa criar uma NEG na Internet e criar ou modificar um balanceador de carga de aplicativo externo em um projeto. É necessário ser proprietário ou
editor (roles/owner
ou roles/editor
) de um projeto ou ter os seguintes
papéis de IAM do Compute Engine.
Tarefa | Papel necessário |
---|---|
Criar e modificar componentes do balanceador de carga | Administrador de rede do Compute ( roles/compute.networkAdmin )
|
Criar e modificar NEGs | Administrador da instância do Compute ( roles/compute.instanceAdmin )
|
Configurar seu ambiente de back-end externo fora do Google Cloud
Para configurar o ambiente, consulte as seções a seguir.
Configurar endpoints da rede
Configure um endpoint de rede para expor seu back-end externo ao Google Cloud. Verifique se o endpoint, que pode ser uma combinação de IP:Porta ou um nome de domínio totalmente qualificado (FQDN, na sigla em inglês) e porta, pode ser acessado pela Internet. Posteriormente, esse endpoint será referenciado pelo NEG da Internet.
Para requisitos de configuração detalhados para endpoints NEG da Internet, consulte a Visão geral de NEGs da Internet.
Permitir que o back-end externo receba tráfego do Google Cloud
Para permitir que as solicitações do Google Cloud alcancem seu back-end externo, você precisa colocar na lista de permissões os intervalos de endereços IP que o Google usa para enviar solicitações para back-ends externos. Para pesquisar os endereços IP que precisam ter permissão para enviar tráfego para back-ends externos, consulte o registro TXT do DNS _cloud-eoips.googleusercontent.com
usando uma ferramenta como dig
ou nslookup
.
Exemplos:
Execute o seguinte comando
nslookup
:nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
A saída será assim:
Non-authoritative answer: _cloud-eoips.googleusercontent.com text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
Observe os intervalos CIDR após
ip4:
e verifique se esses intervalos são permitidos pelas regras de firewall ou listas de controle de acesso (ACLs, na sigla em inglês) na nuvem configuradas no back-end externo.Execute o seguinte comando
dig
:dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
A saída contém dois intervalos de endereços IPs, da seguinte maneira:
34.96.0.0/20 34.127.192.0/18
Configurar ambiente do Google Cloud
Crie o balanceador de carga de aplicativo externo global com um back-end de NEG da Internet.
Reservar um endereço IP externo
Reserve um endereço IP externo estático global que os clientes possam usar para acessar seu aplicativo.
Console
No console do Google Cloud, acesse a página Endereços IP externos.
Clique em Reservar endereço externo estático para reservar um endereço IPv4.
Digite um nome.
Em Nível de serviço de rede, selecione Premium.
Em Versão IP, selecione IPv4.
Em Tipo, selecione Global.
Clique em Reservar.
gcloud
gcloud compute addresses create LB_IP_ADDRESS_NAME \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Anote o endereço IPv4 que foi reservado:
gcloud compute addresses describe LB_IP_ADDRESS_NAME \ --format="get(address)" \ --global
Configurar o NEG da Internet
Console
No console do Google Cloud, acesse a página Grupos de endpoints da rede.
Clique em Criar grupo de endpoints de rede.
Digite um nome.
Em Tipo de grupo de endpoints de rede, selecione Grupo de endpoints de rede (Internet).
Em Porta padrão, insira
443
.Para o Novo endpoint da rede, selecione Nome de domínio totalmente qualificado e porta.
Insira o Nome de domínio totalmente qualificado.
Em Tipo de porta, selecione Padrão e verifique se Número da porta é
443
.Clique em Criar.
gcloud
Crie uma NEG na Internet e defina
--network-endpoint-type
comointernet-fqdn-port
(o nome do host e a porta em que seu back-end externo pode ser alcançado):gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
Adicione seu endpoint ao NEG. Se uma porta não for especificada, o padrão de seleção da porta será
80
(HTTP) ou443
(HTTPS; HTTP/2), dependendo do protocolo configurado no serviço de back-end. Certifique-se de incluir a sinalização--global
:gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \ --global
Criar o balanceador de carga
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 Voltado ao público (externo) e clique em Próxima.
- Em Implantação global ou de região única, selecione Melhor para cargas de trabalho globais e clique em Próxima.
- Em Geração do balanceador de carga, selecione Balanceador de carga de aplicativo clássico e clique em Próxima.
- Clique em Configurar.
Configuração de front-end
- Clique em Configuração de front-end.
- Digite um nome.
Para criar um balanceador de carga HTTPS, é necessário ter um certificado SSL. Recomendamos o uso de um certificado gerenciado pelo Google.
Verifique se as seguintes opções estão configuradas com estes valores.
Propriedade Valor: digite um valor ou selecione uma opção conforme especificado Protocolo HTTPS Nível de serviço da rede Premium Versão IP IPv4 Endereço IP Selecione o endereço IP criado na etapa Reservar um endereço IP externo. Porta 443 Certificado Selecione um certificado SSL existente 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 gerenciado pelo Google ou um certificado SSL autogerenciado.
Para criar um certificado gerenciado pelo Google, você precisa ter um domínio. O registro A do domínio precisa ser resolvido para o endereço IP do balanceador de carga (neste exemplo,
example-ip
). Recomendamos o uso de certificados gerenciados pelo Google porque o Google Cloud recebe, gerencia e os renova automaticamente. Se você não tiver um domínio, use um certificado SSL autoassinado para teste.Opcional: ativar o redirecionamento de HTTP para HTTPS Use essa caixa de seleção para ativar os redirecionamentos de HTTP para HTTPS.
Ativar esta caixa de seleção cria um balanceador de carga HTTP parcial que utiliza o mesmo endereço IP que o balanceador de carga HTTPS e redireciona solicitações HTTP para o front-end HTTPS do balanceador de carga.
Essa caixa de seleção poderá ser marcada somente quando o protocolo HTTPS estiver selecionado e um endereço IP reservado for utilizado.
Se você quiser testar esse processo sem configurar um recurso de certificado SSL (ou um domínio conforme exigido pelos certificados gerenciados pelo Google), configure um balanceador de carga HTTP.
Para criar um balanceador de carga HTTP, verifique se as seguintes opções estão configuradas com estes valores:
Propriedade Valor: digite um valor ou selecione uma opção conforme especificado Protocolo HTTP Nível de serviço da rede Premium Versão IP IPv4 Endereço IP Selecione o endereço IP criado na etapa Reservar um endereço IP externo. Porta 80 Clique em Concluído.
Configuração de back-end
- Clique em Configuração de back-end.
- Clique em Serviços e buckets de back-end.
- Clique em Criar um serviço de back-end.
- Digite um nome.
- Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
- Em Protocolo, selecione o protocolo que você pretende usar do balanceador de carga para o NEG na Internet. Neste exemplo, selecione HTTP/2.
- Para Back-ends, na janela Novo back-end, selecione o NEG da Internet criado na etapa anterior.
- Clique em Criar.
Revisar e finalizar
- Clique em Analisar e finalizar.
- Se estiver tudo certo, clique em Criar.
gcloud
- Crie um serviço de back-end:
gcloud compute backend-services create BACKEND_SERVICE \ --global
- Adicione o NEG da Internet ao serviço de back-end:
gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- Crie um mapa de URL para encaminhar solicitações recebidas para o
serviço de back-end :
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
Execute essa etapa somente se você quiser criar um balanceador de carga HTTPS. Ela não é necessário para balanceadores de carga HTTP.
Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy HTTPS de destino. É possível criar um recurso de certificado SSL usando um certificado SSL gerenciado pelo Google ou um certificado SSL autogerenciado. Recomendamos o uso de certificados gerenciados pelo Google porque o Google Cloud recebe, gerencia e renova esses certificados automaticamente.
Para criar um certificado gerenciado pelo Google, você precisa ter um domínio. Se você não tiver um domínio, use um certificado SSL autogerenciado para teste.
Para criar um recurso de certificado SSL gerenciado pelo Google: Para criar um recurso de certificado SSL autogerenciado:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
Crie um proxy de destino HTTP(S) 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 \ --global
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, também é possível carregar o certificado.
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --global
Substitua:
TARGET_HTTP_PROXY_NAME
: o nome do proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: o nome do proxy HTTPS de destino.SSL_CERTIFICATE_NAME
: o nome do certificado SSL.URL_MAP_NAME
: o nome do mapa de URL.
Crie uma regra de encaminhamento para encaminhar as solicitações recebidas para o proxy.
Para um balanceador de carga HTTP:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --address=LB_IP_ADDRESS_NAME \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --global \ --ports=80
Para um balanceador de carga HTTPS:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --address=LB_IP_ADDRESS_NAME \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443
Como conectar seu domínio ao balanceador de carga
Após a criação do balanceador de carga, anote o endereço IP associado a
ele, por exemplo, 30.90.80.100
. Para apontar seu domínio para o
balanceador de carga, crie um registro A
usando o serviço de registro de domínio. Se
você adicionou vários domínios ao certificado SSL, adicione um registro A
para cada um deles, todos apontando para o endereço IP do balanceador de carga. Por exemplo, para
criar registros A
para www.example.com
e example.com
, use o seguinte:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Se você usa o Cloud DNS como provedor de DNS, consulte Adicionar, modificar e excluir registros.
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. Se você tiver configurado um domínio, também será possível enviar tráfego para o nome do domínio. No entanto, a propagação de DNS pode levar algum tempo para ser concluída. Portanto, é possível começar usando o endereço IP para o teste.
Console
No Console do Google Cloud, acesse a página Balanceamento de carga.
Clique no balanceador de carga que você acabou de criar.
Anote o Endereço IP do balanceador de carga.
Enviar tráfego ao balanceador de carga
Se você criou um balanceador de carga HTTP, acesse
http://IP_ADDRESS
para testá-lo. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. Você será direcionado para o aplicativo em execução no back-end externo.Se você criou um balanceador de carga HTTPS, acesse
https://IP_ADDRESS
para testá-lo. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. Você será direcionado para o aplicativo em execução no back-end externo.
Se isso não funcionar e você estiver usando um certificado gerenciado pelo Google, confirme se o status do recurso do certificado é "ATIVO". Para mais informações, consulte Status do recurso de certificado SSL gerenciado pelo Google.
Se preferir, use o
curl
na linha de comando da sua máquina local. SubstituaIP_ADDRESS
pelo endereço IPv4 do balanceador de carga: Se você estiver usando um certificado gerenciado pelo Google, teste o domínio que aponta para o endereço IP do balanceador de carga. Por exemplo:curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
Opcional: se você estiver usando um domínio personalizado, talvez seja necessário aguardar até que as configurações de DNS atualizadas sejam propagadas. Em seguida, teste seu domínio no navegador da Web.
Para ajuda com a solução de problemas, consulte Solução de problemas de back-end externo e NEG na Internet.
Configurações avançadas
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.
Ativar o Cloud CDN
Quando o Cloud CDN está ativado, o balanceador de carga de aplicativo externo envia solicitações para o back-end NEG da Internet somente quando há uma ausência de cache do Cloud CDN.
Console
No Console do Google Cloud, acesse a página Balanceamento de carga.
Clique no nome do balanceador de carga que você quer modificar.
Clique em
Editar.Clique em Configuração de back-end.
Para o serviço de back-end com o back-end de NEG da Internet, clique em
Editar.Selecione Ativar Cloud CDN.
Opcional: modifique as configurações do modo de cache e TTL.
Clique em Atualizar.
Para revisar as alterações, clique em Analisar e finalizar e em Atualizar.
gcloud
- Para ativar o Cloud CDN no serviço de back-end, use o seguinte comando:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE
Defina o modo de cache substituindo
CACHE_MODE
por um dos seguintes itens:CACHE_All_STATIC
: armazena automaticamente em cache o conteúdo estático.USE_ORIGIN_HEADERS
(padrão): exige a origem para definir cabeçalhos de cache válidos a fim de armazenar conteúdo em cache.FORCE_CACHE_ALL
: armazena em cache todo o conteúdo, ignorando todas as diretivasprivate
,no-store
ouno-cache
em cabeçalhos de respostaCache-Control
.
Usar um cabeçalho personalizado para autenticar solicitações
Para autenticar solicitações enviadas ao back-end externo, defina um cabeçalho personalizado para indicar que a solicitação veio de um balanceador de carga do Google Cloud. Por exemplo, é possível configurar o back-end externo para esperar um valor específico para o cabeçalho Host
da solicitação HTTP e para definir o cabeçalho Host
com esse valor esperado.
Use as etapas a seguir para configurar o serviço de back-end para adicionar um cabeçalho Host
personalizado a cada solicitação.
Console
No Console do Google Cloud, acesse a página Balanceamento de carga.
Clique no nome do balanceador de carga que você quer modificar.
Clique em
Editar.Clique em Configuração de back-end.
Para o serviço de back-end com o back-end de NEG da Internet, clique em
Editar.Clique em Configurações avançadas.
Em Cabeçalhos de solicitação personalizados, clique em Adicionar cabeçalho.
- Em Nome do cabeçalho, digite
Host
. - Em Valor do cabeçalho, insira
FQDN_NEG_ENDPOINT
.
- Em Nome do cabeçalho, digite
Clique em Atualizar.
Para revisar as alterações, clique em Analisar e finalizar e em Atualizar.
gcloud
- Use o comando a seguir para configurar o serviço de back-end para adicionar um cabeçalho "Host" personalizado a cada solicitação.
gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --global
Verifique se você também configurou o back-end externo para receber um cabeçalho Host
. Assim, ele pode autenticar solicitações recebidas.
Para informações gerais sobre cabeçalhos de solicitação personalizados, consulte Configurar cabeçalhos de solicitação personalizados. Para outros métodos de autenticação, consulte Autenticar solicitações no back-end externo.
Ativar o IAP no balanceador de carga externo do aplicativo
Observação: o IAP não é compatível com o Cloud CDN.É possível configurar o IAP para ser
ativado ou desativado (padrão). Se ativado, você precisa fornecer valores para
oauth2-client-id
e oauth2-client-secret
.
Para ativar o IAP, atualize o serviço de back-end
para incluir a sinalização --iap=enabled
com o oauth2-client-id
e
oauth2-client-secret
.
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \ --global
Se preferir, ative o IAP para um recurso do Compute Engine usando o console do Google Cloud, a gcloud CLI ou a API do Google Cloud.
A seguir
- Para verificar se o Cloud CDN está exibindo respostas a partir do cache, consulte Como visualizar registros.
- Para saber qual conteúdo é armazenável em cache ou não, consulte Visão geral do armazenamento em cache.
- Para encontrar os pontos de presença do Cloud CDN, consulte Locais de cache.
- Veja como limpar a configuração do balanceador de carga.