Configurar um balanceador de carga de aplicativo externo global com um back-end externo

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.

Um balanceador de carga de aplicativo externo global com um back-end externo.
Figura 1. Um balanceador de carga de aplicativo externo global com um back-end externo (clique para ampliar).

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

  1. No console do Google Cloud, acesse a página Endereços IP externos.

    Acessar Endereços IP externos

  2. Clique em Reservar endereço externo estático para reservar um endereço IPv4.

  3. Digite um nome.

  4. Em Nível de serviço de rede, selecione Premium.

  5. Em Versão IP, selecione IPv4.

  6. Em Tipo, selecione Global.

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

  1. No console do Google Cloud, acesse a página Grupos de endpoints da rede.

    Acessar grupos de endpoints da rede

  2. Clique em Criar grupo de endpoints de rede.

  3. Digite um nome.

  4. Em Tipo de grupo de endpoints de rede, selecione Grupo de endpoints de rede (Internet).

  5. Em Porta padrão, insira 443.

  6. Para o Novo endpoint da rede, selecione Nome de domínio totalmente qualificado e porta.

  7. Insira o Nome de domínio totalmente qualificado.

  8. Em Tipo de porta, selecione Padrão e verifique se Número da porta é 443.

  9. Clique em Criar.

gcloud

  1. Crie uma NEG na Internet e defina --network-endpoint-type como internet-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
    
  2. Adicione seu endpoint ao NEG. Se uma porta não for especificada, o padrão de seleção da porta será 80 (HTTP) ou 443 (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

  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. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicativo (HTTP/HTTPS) e clique em Próxima.
  4. Em Voltado ao público ou interno, selecione Voltado ao público (externo) e clique em Próxima.
  5. Em Implantação global ou de região única, selecione Melhor para cargas de trabalho globais e clique em Próxima.
  6. Em Geração do balanceador de carga, selecione Balanceador de carga de aplicativo externo global e clique em Próxima.
  7. Clique em Configurar.

Configuração de front-end

  1. Clique em Configuração de front-end.
  2. Digite um nome.
  3. 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
    Opcional: tempo limite do sinal de atividade HTTP Insira um valor de tempo limite de 5 a 1.200 segundos. O valor padrão é de 610 segundos.
    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
    Opcional: tempo limite do sinal de atividade HTTP Insira um valor de tempo limite de 5 a 1.200 segundos. O valor padrão é de 610 segundos.
  4. Clique em Concluído.

Configuração de back-end

  1. Clique em Configuração de back-end.
  2. Clique em Serviços e buckets de back-end.
  3. Clique em Criar um serviço de back-end.
  4. Digite um nome.
  5. Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
  6. Em Protocolo, selecione o protocolo que você pretende usar do balanceador de carga para o NEG na Internet. Neste exemplo, selecione HTTP/2.
  7. Para Back-ends, na janela Novo back-end, selecione o NEG da Internet criado na etapa anterior.
  8. Clique em Criar.

Revisar e finalizar

  1. Clique em Analisar e finalizar.
  2. Se estiver tudo certo, clique em Criar.

gcloud

  1. Crie um serviço de back-end:
      gcloud compute backend-services create BACKEND_SERVICE \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      
  2. 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
       
  3. 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
      
  4. 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:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    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
      
  5. 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.
    Opcional: para balanceadores de carga de aplicativo externos globais, é possível definir um tempo limite de sinal de atividade HTTP de cliente usando a opção --http-keep-alive-timeout-sec. O valor de tempo limite precisa ser de 5 a 1.200 segundos. O valor padrão é de 610 segundos.
  6. 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 \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --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 \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --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

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

    Acessar o "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. Enviar tráfego ao balanceador de carga

    • Se você criou um balanceador de carga HTTP, acesse http://IP_ADDRESS para testá-lo. Substitua IP_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. Substitua IP_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. Substitua IP_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. Exemplo:

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

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

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

    Acessar o "Balanceamento de carga"

  2. Clique no nome do balanceador de carga que você quer modificar.

  3. Clique em Editar.

  4. Clique em Configuração de back-end.

  5. Para o serviço de back-end com o back-end de NEG da Internet, clique em Editar.

  6. Selecione Ativar Cloud CDN.

  7. Opcional: modifique as configurações do modo de cache e TTL.

  8. Clique em Atualizar.

  9. 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 \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --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 diretivas private, no-store ou no-cache em cabeçalhos de resposta Cache-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

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

    Acessar o "Balanceamento de carga"

  2. Clique no nome do balanceador de carga que você quer modificar.

  3. Clique em Editar.

  4. Clique em Configuração de back-end.

  5. Para o serviço de back-end com o back-end de NEG da Internet, clique em Editar.

  6. Clique em Configurações avançadas.

  7. Em Cabeçalhos de solicitação personalizados, clique em Adicionar cabeçalho.

    1. Em Nome do cabeçalho, digite Host.
    2. Em Valor do cabeçalho, insira FQDN_NEG_ENDPOINT.
  8. Clique em Atualizar.

  9. 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" \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --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.

Atualizar tempo limite do sinal de atividade HTTP do cliente

O balanceador de carga criado nas etapas anteriores foi configurado com um valor padrão para o tempo limite do sinal de atividade HTTP do cliente. Para atualizar o tempo limite do sinal de atividade HTTP do cliente, use as instruções a seguir.

Console

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

    Acessar o "Balanceamento de carga"

  2. Clique no nome do balanceador de carga que você quer modificar.
  3. Clique em Editar.
  4. Clique em Configuração de front-end.
  5. Expanda Recursos avançados. Em Tempo limite de sinal de atividade HTTP, insira um valor de tempo limite entre 5 e 1.200 segundos.
  6. Clique em Atualizar.
  7. Para revisar as alterações, clique em Analisar e finalizar e depois em Atualizar.

gcloud

Para um balanceador de carga HTTP, atualize o proxy HTTP de destino usando o comando gcloud compute target-http-proxies update:

    gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

Para um balanceador de carga HTTPS, atualize o proxy HTTPS de destino usando o comando gcloud compute target-https-proxies update:

    gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

Substitua:

  • TARGET_HTTP_PROXY_NAME: o nome do proxy HTTP de destino.
  • TARGET_HTTPS_PROXY_NAME: o nome do proxy HTTPS de destino.
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: o tempo limite do sinal de atividade HTTP de 5 a 1.200 segundos.

A seguir