Como configurar o Cloud CDN com uma origem externa

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 atua como proxy em 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 por proxy 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 enviar as solicitações por proxy para a origem personalizada.

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.

Antes de começar

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

Opcional: como instalar gcloud

Se você preferir trabalhar na linha de comando, instale a ferramenta de linha de comando gcloud. Veja informações de conceitos e instalação sobre a ferramenta em visão geral da ferramenta de linha de comando gcloud.

Caso ainda não tenha usado a ferramenta de linha de comando gcloud anteriormente, primeiro execute gcloud init para inicializar seu diretório gcloud.

Opcional: como criar um projeto novo

Estas instruções exigem um projeto. Se você ainda não tiver um projeto, crie um agora.

Recomendamos que os usuários com a permissão resourcemanager.projects.create criem um projeto novo antes de continuar neste guia. Criar um novo projeto simplifica a limpeza no final do guia.

Permissões

Para seguir este guia, você precisa criar um 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 dois papéis de IAM do Compute Engine a seguir.

Tarefa Papel obrigató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

Nas etapas desta seção, veja como configurar o seguinte:

  • Criar um NEG na Internet e anexar um endpoint de rede que define seu endpoint INTERNET_IP_PORT ou INTERNET_FQDN_PORT.
  • Associar esse NEG ao serviço de back-end do balanceador de carga HTTP(S) externo.
  • Adicionando a regra de encaminhamento para este balanceador de carga HTTP(S) externo.

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 ausência no cache, as solicitações de usuário para /cart/id/1223515 são buscadas 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.

Para configurar este exemplo, crie os recursos a seguir:

  • 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. Esse NEG na Internet contém o endpoint da rede em que o balanceador de carga HTTP(S) externo envia tráfego quando há uma ausência de cache do Cloud CDN.
  • 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.

Como criar o endpoint NEG e Internet

Console

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

    Acessar 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 Novo endpoint de 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 um 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 acessada):

    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 usar um balanceador de carga existente

O exemplo a seguir atualiza um balanceador de carga existente.

Se você ainda não tiver um balanceador de carga HTTP(S) externo, pule esta seção e vá para Como usar um novo balanceador de carga.

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 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-ends > 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 o 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 personalizados, 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) externo.

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 usar um novo balanceador de carga

O exemplo a seguir cria um balanceador de carga HTTP(S) externo que usa seu NEG na Internet como serviço padrão (qualquer host, qualquer caminho).

Se você já tem um balanceador de carga HTTP(S) externo que quer modificar, pule esta seção e acesse Como usar um balanceador de carga existente.

Console

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

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

    Acessar a página "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  4. Selecione Da internet para minhas VMs.
  5. Insira um nome para o novo balanceador de carga. Esse nome se tornará o nome do novo mapa de URLs. Para este exemplo, chame-o de example-url-map.
  6. Clique em Configuração de back-end.
  7. No menu suspenso Criar ou selecionar serviços e buckets de back-end, selecione Serviços de back-ends > Criar um serviço de back-end.
  8. Defina o nome do serviço de back-end como: images.
  9. Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
  10. Selecione o protocolo que você pretende usar do balanceador de carga para o NEG na Internet. Neste exemplo, selecione HTTP/2.
  11. Em Novo back-end > Grupo de endpoints de rede da Internet, selecione example-fqdn-neg e clique em Concluído.
  12. Selecione Ativar Cloud CDN.
  13. Em Configurações avançadas, 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 backend.example.com.
  14. Clique em Criar
  15. Mantenha a janela aberta para continuar.

Anexe o serviço de back-end a um novo mapa de URL

  1. Clique em Regras de host e caminho.
  2. Certifique-se de que há uma linha com images selecionado na coluna da direita. As duas primeiras colunas já foram preenchidas com a regra padrão Any unmatched (default).
  3. Mantenha a janela aberta para continuar.

Adicione o front-end

  1. Clique em Configuração de front-end.
  2. Em Nome, insira example-forwarding-rule.
  3. Em Protocolo, selecione HTTPS.
  4. Clique na lista suspensa Certificado.
    1. Se você já tiver um recurso de certificado SSL autogerenciado que você quer usar como o certificado SSL principal, selecione-o no menu suspenso.
    2. Caso contrário, selecione Criar um novo certificado.
    3. Selecione Fazer upload do meu certificado ou Criar um certificado gerenciado pelo Google.
    4. Se você selecionou Fazer upload do meu certificado, siga estas etapas.
      1. Preencha um nome para example-ssl.
      2. Nos campos adequados, carregue o Certificado de chave pública (arquivo .crt), a Cadeia de certificados (arquivo .csr) e a Chave particular (arquivo .key).
      3. Clique em Criar
    5. Se você selecionar Criar um certificado gerenciado pelo Google, em Domínios, insira um domínio e clique em Criar.
  5. Para adicionar recursos de certificado além do certificado SSL principal, siga estas etapas:
    1. Clique em Outros certificados > Adicionar certificado.
    2. Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções anteriores.
  6. Clique em Done.
  7. Mantenha a janela aberta para continuar.

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

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. Crie um mapa de URLs que especifique o serviço de back-end como o valor de --default-service.

    gcloud compute url-maps create example-url-map \
       --default-service images \
       --global
    
  5. Crie um recurso de certificado.

    1. Crie um recurso de certificado SSL autogerenciado:

      gcloud compute ssl-certificates create example-ssl \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
      
    2. Crie um recurso de certificado SSL gerenciado pelo Google

      gcloud beta compute ssl-certificates create example-ssl \
      --domains DOMAIN
      
  6. Crie um novo proxy HTTPS de destino, anexando o mapa de URLs e o certificado SSL.

    gcloud compute target-https-proxies create example-target-https-proxy \
      --url-map=example-url-map \
      --ssl-certificates=example-ssl \
      --global
    
  7. Crie uma regra de encaminhamento global, que configura um endereço IP anycast global. O balanceador de carga escuta no endereço IP anycast nas portas configuradas. Os clientes podem se conectar ao back-end por meio da rede do Google Cloud.

    gcloud compute forwarding-rules create example-forwarding-rule \
       --ip-protocol=TCP \
       --ports=443 \
       --global \
       --target-https-proxy=example-target-https-proxy
    

Teste

Recupere o endereço IP da regra de encaminhamento e use o navegador ou uma ferramenta de linha de comando (por exemplo, curl) para se conectar a ele.

gcloud compute forwarding-rules list

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

Como usar modos de cache

Se você configurou o Cloud CDN para buscar e armazenar em cache o conteúdo de uma origem de fora do Google Cloud, pode ser difícil a atualização do bucket de armazenamento de aplicativos ou de objetos para enviar cabeçalhos válidos de armazenamento em cache.

Isso também se aplica aos casos em que o servidor de origem define de maneira inconsistente os cabeçalhos de armazenamento em cache, define TTLs muito curtos ou muito longos ou define diretivas de cache inválidas (por exemplo, de um aplicativo legado).

É possível configurar o Cloud CDN para armazenar em cache todo o conteúdo dessa origem e modificar os TTLs definidos pela origem fazendo o seguinte:

  • Defina o modo de cache como FORCE_CACHE_ALL.
  • Configure um TTL padrão para aplicar um TTL a todas as respostas da origem.

Para armazenar em cache automaticamente as respostas estáticas da sua origem, use a configuração modo de cache CACHE_ALL_STATIC (Beta).

Para controlar a capacidade de armazenamento em cache de cada resposta usando diretivas de cache HTTP, defina o modo de cache para usar cabeçalhos de origem (USE_ORIGIN_HEADERS). Para informações sobre as diretivas de cache que o Cloud CDN entende e o que não é armazenado em cache pelo Cloud CDN, consulte Conteúdo armazenável em cache e Conteúdo não armazenável em cache.

Se a origem não estiver exibindo conteúdo dinâmico por usuário, convém armazenar em cache todas as respostas da origem. Para fazer isso, use o modo FORCE_CACHE_ALL. Esse modo armazena em cache todas as respostas, não importa o tipo de conteúdo ou as diretivas de cache.

Se você não selecionar explicitamente um modo de cache ao ativar o Cloud CDN em um back-end, os seguintes padrões serão aplicados:

  • Beta. A API e a ferramenta de linha de comando gcloud usarão USE_ORIGIN_HEADERS por padrão se você ativar o Cloud CDN, mas não especificar um modo de cache. Quando você ativa o Cloud CDN em um back-end, o Console do Cloud usa CACHE_ALL_STATIC como padrão (quando há suporte).

  • GA. Todos os back-ends recém-ativados para o Cloud CDN usarão CACHE_ALL_STATIC como padrão, independentemente do método de configuração (Console do Cloud, API ou ferramenta gcloud).

A seguir