Configure um back-end externo com um NEG da Internet

Este guia usa um exemplo para descrever os princípios básicos da utilização de um back-end externo (por vezes, denominado origem personalizada) num Application Load Balancer externo. Um backend externo é um ponto final externo ao Google Cloud. Quando usa um back-end externo com um Application Load Balancer externo, pode melhorar o desempenho através da colocação em cache da RFC do Cloud CDN.

O guia explica como configurar um Application Load Balancer externo global com um serviço de back-end ativado para o Cloud CDN que usa um proxy para um servidor de back-end externo em backend.example.com.

No exemplo, o balanceador de carga aceita pedidos HTTPS de clientes e encaminha estes pedidos como HTTPS para o back-end externo. Este exemplo pressupõe que o back-end externo suporta HTTPS.

Outras opções seriam configurar um balanceador de carga para aceitar pedidos HTTP ou HTTPS e usar HTTPS ao encaminhar pedidos para o back-end externo.

Este guia pressupõe que já configurou um equilibrador de carga e que está a adicionar um novo back-end externo. Para mais informações, consulte o artigo Configure um Application Load Balancer clássico com um grupo de instâncias gerido no back-end.

A Figura 1 mostra uma arquitetura de exemplo.

Figura 1. Exemplo de utilização típico para back-ends externos.
Figura 1. Exemplo de utilização típico para back-ends externos.

No diagrama, www.example.com tem um front-end do balanceador de carga com o endereço IP 120.1.1.1. Quando existe uma falha de cache, os pedidos de utilizador para /cart/id/1223515 são obtidos do back-end externo através de HTTPS. Todo o outro tráfego de entrada é direcionado para o serviço de backend com VMs do Compute Engine ou para o contentor de backend, com base no mapa de URLs. Google Cloud

Antes de começar

Antes de seguir este guia, familiarize-se com o seguinte:

Autorizações

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

Tarefa Função necessária
Crie e modifique componentes do balanceador de carga Administrador da rede
Crie e modifique NEGs Administrador de instâncias do Compute

Configure um balanceador de carga com um back-end externo

Esta secção mostra como configurar e testar um NEG de Internet.

Vista geral da configuração

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

  • Definir o ponto final da Internet num NEG da Internet.
  • Adicionar um NEG da Internet como back-end a um serviço de back-end.
  • Definir que tráfego de utilizadores mapear para este serviço de back-end configurando o mapa de URLs do balanceador de carga da aplicação externo.
  • Adicionar os intervalos de IP necessários à lista de autorizações.

Este exemplo cria os seguintes recursos:

  • Uma regra de encaminhamento com o endereço IP 120.1.1.1direciona os pedidos recebidos para um proxy de destino.
    • O networkTier da regra de encaminhamento tem de ser PREMIUM.
  • O proxy de destino verifica cada pedido em relação ao mapa de URLs para determinar o serviço de back-end adequado para o pedido.
    • Para back-ends externos, o proxy de destino tem de ser TargetHttpProxy ou TargetHttpsProxy. Este exemplo usa TargetHttpsProxy.
  • A RFC da nuvem ativada (opcional) no serviço de back-end permite colocar em cache e publicar respostas a partir de caches da RFC da nuvem.
  • Este exemplo inclui um cabeçalho personalizado, que é necessário quando o back-end externo espera um valor específico para o cabeçalho Host do pedido HTTP.

A configuração tem o seguinte aspeto.

Figura 2. Cloud CDN com um back-end no local.
Figura 2. Cloud CDN com um back-end no local.

Crie o NEG e o ponto final 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 o nome do grupo de pontos finais da rede: example-fqdn-neg.
  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. Para o FQDN, introduza backend.example.com.
  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 example-fqdn-neg \
        --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 example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Liste o NEG da 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. Indique o ponto final nesse NEG:

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

    Saída:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Adicione um back-end externo a um balanceador de carga

O exemplo seguinte atualiza um balanceador de carga existente.

No equilibrador de carga existente, o serviço predefinido é um Google Cloud serviço. O exemplo modifica o mapa de URLs existente adicionando um correspondente de caminhos que envia todos os pedidos para cart/id/1223515 para o serviço de back-end images, que está associado ao NEG da Internet.

Consola

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

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

    Aceda a Balanceamento de carga

  2. Para adicionar o serviço de back-end a um equilibrador de carga existente, selecione o seu equilibrador de carga de aplicações clássico, clique em Menu e, de seguida, selecione Editar.
  3. Clique em Configuração de back-end.
  4. No menu Serviços de back-end e contentores de back-end, selecione Criar um serviço de back-end.
  5. Defina o nome do serviço de back-end como images.
  6. Para Tipo de back-end, selecione Grupo de pontos finais da rede da Internet.
  7. Selecione o protocolo que pretende usar do balanceador de carga para o NEG de Internet. Para este exemplo, selecione HTTPS.
  8. Em Novo back-end > Grupo de pontos finais de rede da Internet, selecione example-fqdn-neg e, de seguida, clique em Concluído.
  9. Selecione Ativar Cloud CDN.
  10. Opcional: modifique o modo de cache e as definições de TTL.
  11. Em Configurações avançadas, em 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 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 anfitrião e caminho.
  2. A primeira linha ou linhas têm Google Cloud serviços na coluna direita e um deles já está preenchido com a regra predefinida Any unmatched (default) para Anfitriões e Caminhos.
  3. Certifique-se de que existe uma linha com images selecionado na coluna do lado direito. Se não existir, clique em Adicionar regra de anfitrião e caminho e selecione images. Preencha os outros campos da seguinte forma:
    1. Em Anfitriões, introduza *.
    2. Em Caminhos, introduza /cart/id/1223515.

Reveja e finalize

  1. Clique em Rever e finalizar.
  2. Compare as suas definições com o que pretendia criar.
  3. Se estiver tudo correto, clique em Atualizar.

gcloud

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

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --cache-mode=CACHE_MODE \
       --protocol=HTTP2
    

    Defina o modo de cache substituindo CACHE_MODE por uma das seguintes opções:

    • CACHE_ALL_STATIC: armazena automaticamente em cache 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 todas as diretivas private, no-store ou no-cache nos cabeçalhos de resposta Cache-Control

  2. Configure o serviço de back-end para adicionar o cabeçalho do pedido personalizado Host: backend.example.com ao pedido:

    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 da 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. Associe o novo serviço de back-end ao mapa de URLs do balanceador de carga criando uma nova regra de correspondência para direcionar pedidos 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 o seguinte:

    • EXAMPLE_URL_MAP: o nome do seu mapa de URLs existente
    • GCP_SERVICE_EXAMPLE: o nome de um serviço de back-end predefinido existente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: o nome desta nova regra de caminho
    • /CART/ID/1223515: o caminho
    • IMAGES: o nome do novo serviço de back-end com o NEG da Internet anexado

Adicione os intervalos de IP necessários à lista de autorizações

Para permitir que um Application Load Balancer externo envie pedidos para o seu NEG de Internet, tem de consultar o _cloud-eoips.googleusercontent.com Registo TXT de DNS através de 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 IP, da seguinte forma:

34.96.0.0/20
34.127.192.0/18

Tome nota dos intervalos de IP e certifique-se de que estes intervalos são permitidos pela sua firewall ou lista de controlo de acesso (ACL) na nuvem.

Para mais informações, consulte o artigo Autenticar pedidos.

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 de aplicações externo

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.

  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. Se criou um balanceador de carga de HTTP, pode testá-lo através de um navegador de Internet em http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviço helloworld.

    Se criou um balanceador de carga HTTPS, pode testá-lo através de um navegador de Internet em https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviço helloworld.

    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 seu domínio (por exemplo, backend.example.com) 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.

Desative o 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. Desmarque a caixa de verificação Ativar RFC.

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

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

A desativação do Cloud CDN não invalida nem remove as caches. Se desativar e voltar a ativar o Cloud CDN, a maioria ou todo o seu conteúdo em cache pode continuar em cache. Para impedir que o conteúdo seja usado pelas caches, tem de invalidar esse conteúdo.

O que se segue?