Configure um balanceador de carga de aplicações clássico com um back-end externo

Este guia usa um exemplo para ensinar os princípios básicos da utilização de um back-end externo (por vezes, denominado origem personalizada) com um Application Load Balancer externo global. Um backend externo é um ponto final externo a Google Cloud. Quando usa um back-end externo com um Application Load Balancer externo global, pode melhorar o desempenho usando o armazenamento em cache da RFC.

O guia mostra como configurar um Application Load Balancer externo global com um serviço de back-end ativado para a RFC da Google que envia pedidos por proxy para um servidor de back-end externo.

Antes de seguir este guia, familiarize-se com a documentação de vista geral do NEG da Internet, incluindo as limitações.

O diagrama de arquitetura seguinte mostra um front-end do Application Load Balancer externo global com um back-end externo.

Um balanceador de carga de aplicações externo global com um back-end externo.
Figura 1. Um Application Load Balancer externo global com um back-end externo (clique para aumentar).

Autorizações

Para seguir este guia, tem de criar um NEG de Internet e criar ou modificar um Application Load Balancer externo num projeto. Deve ser proprietário ou editor (roles/owner ou roles/editor) do projeto ou ter ambas as seguintes funções do IAM do Compute Engine.

Tarefa Função necessária
Crie e modifique componentes do balanceador de carga Administrador de rede de Calcular
(roles/compute.networkAdmin)
Crie e modifique NEGs Administrador de instância de computação
(roles/compute.instanceAdmin)

Configure o ambiente de back-end externo fora Google Cloud

Para configurar o seu ambiente, consulte as seguintes secções.

Configure pontos finais de rede

Configure um ponto final de rede para expor o seu back-end externo ao Google Cloud. Certifique-se de que o ponto final, ou seja, uma combinação de IP:Porta ou um nome de domínio totalmente qualificado (FQDN) e uma porta, é acessível através da Internet. Este ponto final é referenciado posteriormente a partir do NEG da Internet.

Para ver os requisitos de configuração detalhados para pontos finais de NEG da Internet, consulte a vista geral dos NEGs da Internet.

Permitir que o back-end externo receba tráfego de Google Cloud

Para permitir que os pedidos de Google Cloud alcancem o seu back-end externo, tem de adicionar à lista de autorizações os intervalos de endereços IP que a Google usa para enviar pedidos para back-ends externos. Para procurar os endereços IP que têm de ser permitidos para enviar tráfego para os seus back-ends externos, consulte o registo TXT de DNS _cloud-eoips.googleusercontent.com através de uma ferramenta como dig ou nslookup.

Exemplos:

  • Execute o seguinte comando nslookup:

    nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
    

    O resultado tem o seguinte aspeto:

    Non-authoritative answer:
    _cloud-eoips.googleusercontent.com    text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
    

    Tenha em atenção os intervalos de CIDR após ip4: e certifique-se de que estes intervalos são permitidos pelas regras de firewall ou pelas listas de controlo de acesso (ACLs) na nuvem configuradas no seu 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 IP, da seguinte forma:

    34.96.0.0/20
    34.127.192.0/18
    

Configure o seu Google Cloud ambiente

Crie o balanceador de carga de aplicações externo global com um back-end do NEG da Internet.

Reserve um endereço IP externo

Reserve um endereço IP externo estático global que os clientes usam para alcançar a sua aplicação.

Consola

  1. Na Google Cloud consola, aceda à página Endereços IP externos.

    Aceda a Endereços IP externos

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

  3. Introduza um nome.

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

  5. Para Versão do IP, selecione IPv4.

  6. Para Tipo, selecione Global.

  7. Clique em Reservar.

gcloud

gcloud compute addresses create LB_IP_ADDRESS_NAME \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Tome nota do endereço IPv4 que foi reservado:

gcloud compute addresses describe LB_IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

Configure o NEG da Internet

Consola

  1. Na Google Cloud consola, aceda à página Grupos de pontos finais de rede.

    Aceda a Grupos de pontos finais da rede

  2. Clique em Criar grupo de pontos finais de rede.

  3. Introduza um nome.

  4. Para o Tipo de grupo de pontos finais da rede, selecione Grupo de pontos finais da rede (Internet).

  5. Para Porta predefinida, introduza 443.

  6. Para Novo ponto final de rede, selecione Nome do domínio totalmente qualificado e porta.

  7. Introduza o nome do domínio totalmente qualificado.

  8. Para Tipo de porta, selecione Predefinição e verifique se o Número da porta é 443.

  9. Clique em Criar.

gcloud

  1. Crie um NEG de Internet e defina o --network-endpoint-type como internet-fqdn-port (o nome do anfitrião e a porta onde o 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 o seu ponto final ao NEG. Se não for especificada uma porta, a seleção de portas é predefinida para a porta 80 (HTTP) ou 443 (HTTPS; HTTP/2), consoante o protocolo configurado no serviço de back-end. Certifique-se de que inclui a flag --global:

    gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \
        --global
    

Crie o balanceador de carga

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 globais e clique em Seguinte.
  6. Para Geração do balanceador de carga, selecione Classic Application Load Balancer e clique em Seguinte.
  7. Clique em Configurar.

Configuração da interface

  1. Clique em Configuração do front-end.
  2. Introduza um nome.
  3. Para criar um balanceador de carga HTTPS, tem de ter um certificado SSL. Recomendamos a utilização de um certificado gerido pela Google.

    Verifique se as seguintes opções estão configuradas com estes valores.

    Propriedade Valor (introduza um valor ou selecione uma opção conforme especificado)
    Protocolo HTTPS
    Nível de serviço de rede Premium
    Versão do IP IPv4
    Endereço IP Selecione o endereço IP criado no passo Reserve um endereço IP externo.
    Porta 443
    Certificado

    Selecione um certificado SSL existente ou crie um novo certificado.

    Para criar um balanceador de carga HTTPS, tem de ter um recurso de certificado SSL para usar no proxy HTTPS. Pode criar um recurso de certificado SSL através de um certificado SSL gerido pela Google ou um certificado SSL autogerido.

    Para criar um certificado gerido pela Google, tem de ter um domínio. O registo A do domínio tem de ser resolvido para o endereço IP do equilibrador de carga (neste exemplo, example-ip). Recomendamos a utilização de certificados geridos pela Google porque Google Cloud obtém, gere e renova Google Cloud estes certificados automaticamente. Se não tiver um domínio, pode usar um certificado SSL autoassinado para testes.

    Opcional: ative o redirecionamento de HTTP para HTTPS

    Use esta caixa de verificação para ativar os redirecionamentos de HTTP para HTTPS.

    Selecione esta caixa de verificação para criar um balanceador de carga HTTP parcial adicional que usa o mesmo endereço IP que o seu balanceador de carga HTTPS e redireciona os pedidos HTTP para o frontend HTTPS do seu balanceador de carga.

    Esta caixa de verificação só pode ser selecionada quando o protocolo HTTPS estiver selecionado e for usado um endereço IP reservado.

    Se quiser testar este processo sem configurar um recurso de certificado SSL (ou um domínio, conforme exigido pelos certificados geridos pela Google), pode configurar um balanceador de carga HTTP.

    Para criar um HTTP, verifique se as seguintes opções estão configuradas com estes valores:

    Propriedade Valor (introduza um valor ou selecione uma opção conforme especificado)
    Protocolo HTTP
    Nível de serviço de rede Premium
    Versão do IP IPv4
    Endereço IP Selecione o endereço IP criado no passo Reserve um endereço IP externo.
    Porta 80
  4. Clique em Concluído.

Configuração do back-end

  1. Clique em Configuração de back-end.
  2. Clique em Serviços de back-end e contentores de back-end.
  3. Clique em Criar um serviço de back-end.
  4. Introduza um nome.
  5. Para Tipo de back-end, selecione Grupo de pontos finais da rede da Internet.
  6. Para Protocolo, selecione o protocolo que pretende usar do balanceador de carga para o NEG da Internet. Para este exemplo, selecione HTTP/2.
  7. Para Back-ends, na janela Novo back-end, selecione o NEG da Internet criado no passo anterior.
  8. Clique em Criar.

Reveja e finalize

  1. Clique em Rever e finalizar.
  2. Se tudo parecer correto, clique em Criar.

gcloud

  1. Crie um serviço de back-end:
      gcloud compute backend-services create BACKEND_SERVICE \
          --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 URLs para encaminhar pedidos recebidos para o serviço de back-end:
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. Execute este passo apenas se quiser criar um balanceador de carga HTTPS. Este passo não é obrigatório para equilibradores de carga HTTP.

    Para criar um balanceador de carga HTTPS, tem de ter um recurso de certificado SSL para usar no proxy de destino HTTPS. Pode criar um recurso de certificado SSL usando um certificado SSL gerido pela Google ou um certificado SSL autogerido. Recomendamos a utilização de certificados geridos pela Google, uma vez que Google Cloud obtém, gere e renova estes certificados automaticamente.

    Para criar um certificado gerido pela Google, tem de ter um domínio. Se não tiver um domínio, pode usar um certificado SSL autogerido para testes.

    Para criar um recurso de certificado SSL gerido pela Google:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    Para criar um recurso de certificado SSL autogerido:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --certificate CRT_FILE_PATH \
          --private-key KEY_FILE_PATH
      
  5. Crie um proxy HTTP(S) de destino para encaminhar pedidos para o seu 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 \
          --global
      

    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 \
          --global
      

    Substitua o seguinte:

    • 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 URLs.
  6. 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 \
          --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
      

Associe o seu domínio ao balanceador de carga

Após a criação do balanceador de carga, tome nota do endereço IP associado ao balanceador de carga, por exemplo, 30.90.80.100. Para direcionar o seu domínio para o equilibrador de carga, crie um registo A através do serviço de registo de domínios. Se adicionou vários domínios ao seu certificado SSL, tem de adicionar um registo A para cada um, todos a apontar para o endereço IP do equilibrador de carga. Por exemplo, para criar registos 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 usar o Cloud DNS como fornecedor de DNS, consulte o artigo Adicione, modifique e elimine registos.

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. Se configurou um domínio, também pode enviar tráfego para o nome de domínio. No entanto, a propagação de DNS pode demorar algum tempo a ser concluída, pelo que pode começar por usar o endereço IP para testes.

Consola

  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. Envie tráfego para o balanceador de carga.

    • Se criou um balanceador de carga HTTP, pode testá-lo acedendo a http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Deve ser direcionado para a aplicação que está a executar no back-end externo.

    • Se criou um balanceador de carga HTTPS, pode testá-lo acedendo a https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Deve ser direcionado para a sua aplicação em execução no back-end externo.

    Se isso não funcionar e estiver a usar um certificado gerido pela Google, confirme que o estado do recurso do certificado é ACTIVE. Para mais informações, consulte o estado do recurso do certificado SSL gerido pela Google.

    Em alternativa, pode usar curl a partir da linha de comandos da sua máquina local. Substitua IP_ADDRESS pelo endereço IPv4 do equilibrador de carga. Se estiver a usar um certificado gerido pela 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
    

  5. Opcional: se estiver a usar um domínio personalizado, pode ter de aguardar que as definições de DNS atualizadas sejam propagadas. Em seguida, teste o domínio no navegador de Internet.

    Para obter ajuda na resolução de problemas, consulte o artigo Resolva problemas de NEG externos e de back-end da Internet.

Configuração adicional

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.

Ative o Cloud CDN

Quando o Cloud CDN está ativado, o Application Load Balancer externo envia pedidos ao back-end do NEG da Internet apenas quando existe uma falha de cache do Cloud CDN.

Consola

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

    Aceda a Balanceamento de carga.

  2. Clique no nome do equilibrador de carga que 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 do NEG da Internet, clique em Editar.

  6. Selecione Ativar Cloud CDN.

  7. Opcional: modifique o modo de cache e as definições de TTL.

  8. Clique em Atualizar.

  9. Para rever as alterações, clique em Rever e finalizar e, de seguida, clique 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 uma das seguintes opções:

    • CACHE_All_STATIC: coloca automaticamente em cache o conteúdo estático.
    • USE_ORIGIN_HEADERS (predefinição): requer que a origem defina cabeçalhos de colocação em cache válidos para colocar conteúdo em cache.
    • FORCE_CACHE_ALL: armazena em cache todo o conteúdo, ignorando quaisquer diretivas private, no-store ou no-cache nos cabeçalhos de resposta Cache-Control.

Use um cabeçalho personalizado para autenticar pedidos

Para autenticar pedidos enviados para o seu back-end externo, pode definir um cabeçalho personalizado para indicar que o pedido foi feito a partir de um equilibrador de carga. Google Cloud Por exemplo, pode configurar o back-end externo para esperar um valor específico para o cabeçalho Host do pedido HTTP e pode configurar o serviço de back-end para definir o cabeçalho Host para esse valor esperado.

Siga os passos abaixo para configurar o serviço de back-end de modo a adicionar um cabeçalho Host personalizado a cada pedido.

Consola

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

    Aceda a Balanceamento de carga.

  2. Clique no nome do equilibrador de carga que 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 do NEG da Internet, clique em Editar.

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

  7. Para Cabeçalhos de pedidos personalizados, clique em Adicionar cabeçalho:

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

  9. Para rever as alterações, clique em Rever e finalizar e, de seguida, clique em Atualizar.

gcloud

  • Use o seguinte comando para configurar o serviço de back-end de modo a adicionar um cabeçalho `Host` personalizado a cada pedido.
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --global
      

Certifique-se de que também configurou o back-end externo para esperar um cabeçalho Host para que possa autenticar os pedidos recebidos.

Para ver informações gerais sobre cabeçalhos de pedidos personalizados, consulte o artigo Configure cabeçalhos de pedidos personalizados. Para outros métodos de autenticação, consulte o artigo Autenticar pedidos para o back-end externo.

Ative a IAP no Application Load Balancer externo

Nota: o IAP não é compatível com o Cloud CDN.

Pode configurar as CAs para estarem ativadas ou desativadas (predefinição). Se a opção estiver ativada, tem de fornecer valores para oauth2-client-id e oauth2-client-secret.

Para ativar as CAs, atualize o serviço de back-end para incluir a flag --iap=enabled com 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

Opcionalmente, pode ativar a IAP para um recurso do Compute Engine através da Google Cloud consola, da CLI gcloud ou da API.

O que se segue?