Pode usar um backend externo quando o conteúdo está alojado no local ou noutra nuvem. O back-end externo permite-lhe publicar o conteúdo a partir da RFC da Google Cloud.
Este documento explica o processo de configuração do armazenamento de objetos de terceiros, como o Amazon Simple Storage Service (Amazon S3) ou o Azure Blob Storage, como um back-end externo para a RFC. Os back-ends externos e o Cloud CDN funcionam em conjunto com um balanceador de carga de aplicações externo.
Arquitetura
Para criar o back-end externo, cria um grupo de pontos finais de rede da Internet (NEG) que aponta para o serviço de armazenamento de terceiros como o back-end do balanceador de carga. Os NEGs da Internet são usados para back-ends externos.
Para configurar o contentor de armazenamento de terceiros como um back-end, tem de fazer o seguinte:
- Prepare o contentor de armazenamento de terceiros para publicar conteúdo.
- Crie um NEG de Internet que use o FQDN do contentor.
- Configure o balanceador de carga da aplicação externo com o NEG da Internet como o back-end.
- Teste a configuração.
Prepare o contentor para publicar conteúdo
Antes de iniciar a configuração no Google Cloud, certifique-se de que o contentor está configurado corretamente. Estas instruções pressupõem que está a usar um contentor do Amazon S3 e que tem as autorizações necessárias para fazer alterações ao contentor e aos objetos do Amazon S3.
Certifique-se de que o contentor do Amazon S3 e os objetos no contentor são públicos ou que configurou a autenticação de origem privada para o contentor do Amazon S3.
Certifique-se de que o conteúdo cumpre os requisitos de capacidade de colocação em cache indicados em Conteúdo colocável em cache. Se precisar de adicionar metadados de objetos, consulte a base de conhecimentos da AWS, por exemplo, o artigo Editar metadados de objetos.
Precisa do ponto final do contentor do Amazon S3 (o FQDN) quando configurar o NEG da Internet. Para obter as informações do ponto final, siga as instruções fornecidas na base de conhecimentos da AWS, por exemplo, Aceder a um contentor. Também pode obter o URL do ponto final do Amazon S3 na página de vista geral do objeto.
Crie um NEG de Internet que use o nome de anfitrião do contentor
Para simplificar, este exemplo usa o FQDN backend.example.com
. Certifique-se de que substitui este valor pelo FQDN do contentor de armazenamento de terceiros, que pode ter um aspeto semelhante a http://unique-name-bucket.s3-us-west-1.amazonaws.com/
.
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.
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:
Vista geral dos grupos de pontos finais de rede da Internet, que inclui as limitações.
Back-ends externos especificados através de NEGs da Internet
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.1
direciona os pedidos recebidos para um proxy de destino. - O
networkTier
da regra de encaminhamento tem de serPREMIUM
. - 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
ouTargetHttpsProxy
. Este exemplo usaTargetHttpsProxy
. - 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.
Crie o NEG e o ponto final da Internet
Consola
- Na Google Cloud consola, aceda à página Grupos de pontos finais de rede.
- Clique em Criar grupo de pontos finais de rede.
- Introduza o nome do grupo de pontos finais da rede:
example-fqdn-neg
. - Para o Tipo de grupo de pontos finais da rede, selecione Grupo de pontos finais da rede (Internet).
- Para Porta predefinida, introduza
443
. - Para Novo ponto final de rede, selecione Nome do domínio totalmente qualificado e porta.
- Para o FQDN, introduza
backend.example.com
. - Para Tipo de porta, selecione Predefinição e verifique se o Número da porta é
443
. - Clique em Criar.
gcloud
Crie um NEG de Internet e defina o
--network-endpoint-type
comointernet-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
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) ou443
(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
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
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
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
- 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.
- Clique em Configuração de back-end.
- No menu Serviços de back-end e contentores de back-end, selecione Criar um serviço de back-end.
- Defina o nome do serviço de back-end como
images
. - Para Tipo de back-end, selecione Grupo de pontos finais da rede da Internet.
- Selecione o protocolo que pretende usar do balanceador de carga para o NEG de Internet. Para este exemplo, selecione HTTPS.
- Em Novo back-end > Grupo de pontos finais de rede da Internet, selecione
example-fqdn-neg
e, de seguida, clique em Concluído. - Selecione Ativar Cloud CDN.
- Opcional: modifique o modo de cache e as definições de TTL.
- Em Configurações avançadas, em Cabeçalhos de pedidos personalizados,
clique em Adicionar cabeçalho.
- Em Nome do cabeçalho, introduza
Host
. - Em Valor do cabeçalho, introduza
backend.example.com
.
- Em Nome do cabeçalho, introduza
- Clique em Criar.
- Mantenha a janela aberta para continuar.
Anexe o serviço de back-end a um mapa de URLs existente
- Clique em Regras de anfitrião e caminho.
- 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. - 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 selecioneimages
. Preencha os outros campos da seguinte forma:- Em Anfitriões, introduza
*
. - Em Caminhos, introduza
/cart/id/1223515
.
- Em Anfitriões, introduza
Reveja e finalize
- Clique em Rever e finalizar.
- Compare as suas definições com o que pretendia criar.
- Se estiver tudo correto, clique em Atualizar.
gcloud
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áticoUSE_ORIGIN_HEADERS
(predefinição): requer que a origem defina cabeçalhos de colocação em cache válidos para colocar conteúdo em cacheFORCE_CACHE_ALL
: armazena em cache todo o conteúdo, ignorando todas as diretivasprivate
,no-store
ouno-cache
nos cabeçalhos de respostaCache-Control
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
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
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 existenteGCP_SERVICE_EXAMPLE
: o nome de um serviço de back-end predefinido existenteCUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE
: o nome desta nova regra de caminho/CART/ID/1223515
: o caminhoIMAGES
: 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.
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique no balanceador de carga que acabou de criar.
Tome nota do endereço IP do balanceador de carga.
Se criou um balanceador de carga de HTTP, pode testá-lo através de um navegador de Internet em
http://IP_ADDRESS
. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviçohelloworld
.Se criou um balanceador de carga HTTPS, pode testá-lo através de um navegador de Internet em
https://IP_ADDRESS
. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviçohelloworld
.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. SubstituaIP_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
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.
Teste o Cloud CDN
Teste 1: aceder diretamente ao ponto final do contentor
Este teste usa os comandos time
e wget
de uma VM. O exemplo transfere
/cart/id/1223515/image.jpg
do contentor backend.example.com
.
A partir do resultado, pode ver que o pedido geral demora 780 ms. Este é o tempo necessário para obter uma imagem de 3,3 MB diretamente do Amazon S3.
time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46-- backend.example.com/cart/id/1223515/image.jpg Resolving backend.example.com (backend.example.com)... 52.219.120.233 Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.47' /cart/id/1223515/image.jpg.47 100%[==============================================================================================================================================>] 3.29M 6.25MB/s in 0.5s 2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106] real 0m0.780s user 0m0.003s sys 0m0.012s
Teste 2: primeiro pedido através da RFC na nuvem
Este teste usa o endereço IP do equilibrador de carga para obter o ficheiro /cart/id/1223515/image.jpg
. Como este é o primeiro pedido, deve ser um erro e a RFC deve obter a imagem da origem, que é o Amazon S3. A partir do resultado, pode ver que o pedido demorou 844 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.44' /cart/id/1223515/image.jpg.44 100%[==============================================================================================================================================>] 3.29M 8.23MB/s in 0.4s 2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106] real 0m0.844s user 0m0.003s sys 0m0.012s
Teste 3: segundo pedido através da RFC
Agora, vamos fazer mais um pedido através deste IP do equilibrador de carga. Desta vez, devemos receber uma resposta em cache, pelo que deve ser mais rápido do que os 2 primeiros testes.
Estamos a usar novamente o mesmo IP do LB LOAD_BALANCER_IP_ADDRESS. A partir do resultado, podemos ver que o pedido demorou apenas 18 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.45' /cart/id/1223515/image.jpg.45 100%[==============================================================================================================================================>] 3.29M --.-KB/s in 0.008s 2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106] real 0m0.018s user 0m0.001s sys 0m0.010s
Valide através da utilização de registos
Os registos do Cloud CDN estão associados ao Application Load Balancer externo ao qual os back-ends ativados para o Cloud CDN estão anexados. Com os registos, pode verificar se um pedido é um acerto ou um erro. Pode ler mais acerca dos registos da RFC na secção Ver registos.
Limitações
O contentor de terceiros e os objetos têm de ser públicos. Em alternativa, pode manter o seu contentor e objetos privados se configurar a autenticação de origem privada. Os backends externos não suportam outros métodos de autenticação de conteúdo, como URLs assinados ou cookies assinados.
Quando usar um serviço de back-end externo que espera um valor específico para o cabeçalho
Host
do pedido HTTP, tem de configurar o serviço de back-end para definir o cabeçalhoHost
com esse valor esperado. Se não configurar um cabeçalho de pedido personalizado, um serviço de back-end preserva o cabeçalhoHost
que o cliente usou para se ligar ao Application Load Balancer externo. Google Cloud Para ver informações gerais sobre cabeçalhos personalizados, consulte o artigo Configure cabeçalhos de pedidos personalizados. Para um exemplo específico, consulte o artigo Configurar um balanceador de carga com um back-end externo.
O que se segue?
- Para verificar se o Cloud CDN está a publicar respostas a partir da cache, consulte o artigo Registos e métricas para o armazenamento em cache.
- Para saber que conteúdo é armazenável em cache ou não, consulte a vista geral da colocação em cache.
- Para encontrar pontos de presença da GFE, consulte o artigo Localizações da cache.