Como configurar um balanceador de carga com uma origem personalizada

Este guia usa um exemplo para ensinar os fundamentos do uso de uma origem personalizada em um grupo de endpoints da rede na Internet (NEG). Uma origem personalizada é um endpoint na Internet que é externo ao Google Cloud. É possível usar um NEG da Internet como back-end para um balanceador de carga HTTP(S) externo e melhorar o desempenho usando o armazenamento em cache do Cloud CDN.

O guia descreve como configurar um balanceador de carga HTTP(S) externo global com um serviço de back-end habilitado para o Cloud CDN que envia proxies a um servidor de origem personalizado em backend.example.com.

No exemplo, o balanceador de carga aceita solicitações HTTPS de clientes e envia essas solicitações como HTTP/2 para a origem personalizada. Este exemplo supõe que a origem seja compatível com HTTP/2.

Outras opções seriam configurar um balanceador de carga para aceitar solicitações HTTP ou HTTP/2 e usar HTTPS ao fazer proxy de solicitações para a origem personalizada.

Neste guia, presumimos que você já tenha configurado um balanceador de carga e esteja adicionando um novo back-end de origem personalizado.

Uma arquitetura de exemplo tem esta aparência:

Caso de uso típico para origens personalizadas
Caso de uso típico para origens personalizadas

No diagrama, www.example.com tem um front-end do balanceador de carga com o endereço IP 120.1.1.1. Quando há uma falha de cache, as solicitações de /cart/id/1223515 são obtidos da origem personalizada por meio de HTTP/2. Todos os outros tipos de tráfego de entrada são direcionados para o serviço de back-end do Google Cloud com VMs do Compute Engine ou para o bucket de back-end, com base no mapa de URLs.

Antes de começar

Antes de seguir as instruções deste guia, familiarize-se com os itens abaixo:

Permissões

Para seguir este guia, você precisa criar uma NEG na Internet e criar ou modificar um balanceador de carga HTTP(S) externo 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 e modificar componentes do balanceador de carga Administrador de rede
Criar e modificar NEGs Administrador da instância do Compute

Como configurar um balanceador de carga com uma origem personalizada

Este guia mostra como configurar e testar um NEG na Internet.

Visão geral da configuração

A configuração de um NEG da Internet envolve o seguinte:

  • Definindo o endpoint na Internet em uma NEG na Internet.
  • Adicionar um NEG na Internet como back-end para um serviço de back-end.
  • Para definir o tráfego de usuários a ser mapeado para esse serviço de back-end, configure o mapa de URLs do seu balanceador de carga HTTP(S) externo.
  • Adicionar os intervalos de IPs necessários à lista de permissões

Neste exemplo, criamos os seguintes recursos:

  • Uma regra de encaminhamento com o endereço IP 120.1.1.1 direciona solicitações recebidas para um proxy de destino.
    • O networkTier da regra de encaminhamento precisa ser PREMIUM.
  • O proxy de destino verifica cada solicitação em um mapa de URL para determinar o serviço de back-end apropriado a ela.
    • Para origens personalizadas, o proxy de destino precisa ser TargetHttpProxy ou TargetHttpsProxy. O exemplo usa TargetHttpsProxy.
  • O Cloud CDN ativado (opcional) no serviço de back-end permite o armazenamento em cache e a veiculação de respostas dos caches do Cloud CDN.
  • A configuração do serviço de back-end direciona o tráfego para um NEG da Internet.
  • Este exemplo inclui um cabeçalho de solicitação definido pelo usuário, que é obrigatório quando a origem personalizada espera um valor específico para o cabeçalho Host da solicitação HTTP.

A configuração é semelhante a esta:

Cloud CDN com back-end local
Cloud CDN com back-end local

Como criar o endpoint NEG e Internet

Console

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

    Acesse a página Grupos de endpoints de rede

  2. Clique em Criar grupo de endpoints de rede.
  3. Digite o Nome do grupo de endpoints de rede: example-fqdn-neg.
  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. Para o FQDN, insira backend.example.com.
  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 a internet-fqdn-port (o nome do host e a porta em que sua origem pode ser alcançada):

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --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 example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Listar o NEG na Internet criado:

    gcloud compute network-endpoint-groups list --global
    

    Saída:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. Liste o endpoint dentro do NEG:

    gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \
        --global
    

    Saída:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Como adicionar uma origem personalizada a um balanceador de carga

O exemplo a seguir atualiza um balanceador de carga existente.

No balanceador de carga existente, o serviço padrão é um serviço do Google Cloud. O exemplo modifica o mapa de URLs existente adicionando um correspondente de caminho que envia todas as solicitações de cart/id/1223515 para o serviço de back-end images, que está associado à NEG na Internet.

Console

Crie o serviço de back-end e adicione a NEG na Internet

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

    Acessar a página "Balanceamento de carga"

  2. Para adicionar o serviço de back-end a um balanceador de carga, selecione o balanceador de carga HTTP(S) externo, clique em Menu e selecione Editar.
  3. Clique em Configuração de back-end.
  4. No menu suspenso Criar ou selecionar serviços e buckets de back-end, selecione Serviços de back-end. Em seguida, clique em Criar um serviço de back-end.
  5. Defina o Nome do serviço de back-end como images.
  6. Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
  7. Selecione o protocolo que você pretende usar do balanceador de carga para a NEG na Internet. Neste exemplo, selecione HTTP/2.
  8. Em Novo back-end > Grupo de endpoints de rede da Internet, selecione example-fqdn-neg e clique em Concluído.
  9. Selecione Ativar Cloud CDN.
  10. Mantenha as configurações padrão do modo de cache e TTL.
  11. Em Configurações avançadas, em Cabeçalhos de solicitação personalizada, clique em Adicionar cabeçalho.
    1. Em Nome do cabeçalho, digite Host.
    2. Em Valor do cabeçalho, insira backend.example.com.
  12. Clique em Criar.
  13. Mantenha a janela aberta para continuar.

Anexe o serviço de back-end a um mapa de URLs existente

  1. Clique em Regras de host e caminho.
  2. A primeira linha ou linhas têm serviços do Google Cloud na coluna à direita e uma delas já está preenchida com a regra padrão Any unmatched (default) para Hosts e Caminhos.
  3. Certifique-se de que há uma linha com images selecionado na coluna da direita. Se ela não existir, clique em Adicionar regra de host e caminho e selecione images. Preencha os outros campos da seguinte forma:
    1. Em Hosts, insira *.
    2. Em Caminhos, digite /cart/id/1223515.

Revisar e finalizar

  1. Clique em Analisar e finalizar.
  2. Compare as configurações com o que você pretendia criar.
  3. Se tudo parecer certo, clique em Criar para criar o balanceador de carga HTTP(S).

gcloud

  1. Crie um novo serviço de back-end para o NEG:

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --protocol=HTTP2
    
  2. Configure o serviço de back-end para adicionar o cabeçalho de solicitação personalizado Host: backend.example.com à solicitação:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. Use o comando backend-services add-backend para adicionar o NEG na Internet ao serviço de back-end:

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. Anexe o novo serviço de back-end ao mapa de URLs do balanceador de carga ao criar uma nova regra de correspondência para direcionar solicitações para esse back-end:

    gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \
      --default-service=GCP_SERVICE_EXAMPLE \
      --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \
      --backend-service-path-rules=/CART/ID/1223515=IMAGES
    

    Substitua:

    • EXAMPLE_URL_MAP: o nome do seu mapa de URLs atual
    • GCP_SERVICE_EXAMPLE: o nome de um serviço de back-end padrão existente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: o nome dessa nova regra de caminho
    • /CART/ID/1223515: o caminho
    • IMAGES: o nome do novo serviço de back-end com o NEG conectado à Internet

Como adicionar os intervalos de IPs necessários à lista de permissões

Para permitir que um balanceador de carga HTTP(S) externo envie solicitações ao NEG da Internet, você precisa consultar o registro TXT _cloud-eoips.googleusercontent.com do DNS usando uma ferramenta como dig ou nslookup.

Por exemplo, 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 IPs, da seguinte maneira:

34.96.0.0/20
34.127.192.0/18

Observe os intervalos de IPs e verifique se esses intervalos são permitidos pelo firewall ou pela lista de controle de acesso à nuvem (ACL).

Para mais informações, consulte Como autenticar solicitações.

Como testar o balanceador de carga HTTP(S) externo

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.

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "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. Se você tiver criado um balanceador de carga HTTP, será possível testar seu balanceador de carga usando um navegador da Web acessando http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você será direcionado para a página inicial do serviço helloworld.

    Se você tiver criado um balanceador de carga HTTPS, será possível testar seu balanceador de carga usando um navegador da Web acessando https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você será direcionado para a página inicial do serviço helloworld.

    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 'backend.example.com:443' --connect-to test.example.com:443:IP_ADDRESS:443
    

  5. (Opcional) Se você estiver usando um domínio personalizado, talvez seja necessário aguardar para que as configurações de DNS atualizadas sejam propagadas. Em seguida, teste seu domínio (por exemplo, backend.example.com) no navegador da Web.

    Para ajuda com a solução de problemas, consulte Solução de problemas de origem personalizada e NEG na Internet.

Como ativar o IAP no balanceador de carga HTTP(S) externo

É 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

A seguir