O Cloud CDN tira partido da sua escolha do balanceador de carga de aplicações externo global ou do balanceador de carga de aplicações clássico para oferecer encaminhamento, verificação de funcionamento e apoio técnico para IP Anycast. Uma vez que os balanceadores de carga de aplicações externos globais podem ter vários tipos de instâncias de back-end, como instâncias de VM do Compute Engine, pods do Google Kubernetes Engine, contentores do Cloud Storage ou back-ends externos fora do Google Cloud, pode escolher os back-ends (origens) para os quais ativar o Cloud CDN.
Este guia de configuração mostra como criar um Application Load Balancer externo com o Cloud CDN ativado. O exemplo usa os seguintes recursos:
- A rede de nuvem virtual privada (VPC) predefinida
- Um mapa de URLs predefinido
- Um endereço IP externo reservado
- Um contentor do Cloud Storage como back-end
- Um único contentor de back-end do balanceador de carga que funciona como um wrapper em torno do contentor do Cloud Storage
Um contentor de back-end suporta o seguinte:
- Contentores do Cloud Storage de qualquer classe de armazenamento, incluindo contentores multirregionais
- Políticas de RFC de nuvem para colocar conteúdo em cache na extremidade global da Google
Para saber como funciona o Cloud CDN, consulte a vista geral do Cloud CDN.
Por predefinição, o Cloud Storage usa a mesma cache que o Cloud CDN usa. Se ativar a RFC do Google Cloud no contentor de back-end, pode usar os controlos da RFC do Google Cloud no seu conteúdo.
Os controlos da CDN na nuvem incluem, por exemplo, modos de cache, URLs assinados e
anulação. A RFC de multimédia na nuvem também lhe permite colocar em cache conteúdo grande (> 10 MB). Se não ativar a RFC do Google Cloud no seu contentor de back-end, só pode usar cabeçalhos de origem Cache-Control
para controlar o armazenamento em cache de conteúdo mais pequeno, conforme definido pelos metadados do Google Cloud Storage.
Back-ends do balanceador de carga
Um balanceador de carga de aplicações externo usa um mapa de URLs para direcionar o tráfego de URLs especificados para serviços especificados. A tabela seguinte resume os tipos de back-ends onde pode alojar conteúdo e serviços.
Configuração do back-end do balanceador de carga | Tipo de suporte típico | Tipos de back-end |
---|---|---|
Serviço de back-end | Dinâmico (como dados) |
|
Contentor de back-end | Estáticos (como imagens) |
|
Antes de começar
- Se estiver a usar HTTPS para o frontend, crie um certificado SSL, autogerido ou gerido pela Google. Recomendamos a utilização de um certificado gerido pela Google.
- Se estiver a usar a CLI Google Cloud, consulte o artigo Descubra o armazenamento de objetos com a ferramenta gcloud para a instalar.
Consola
- Na Google Cloud consola, aceda à página Início.
- À direita de Google Cloud, selecione um projeto no menu pendente.
gcloud
gcloud config set project PROJECT_ID
Substitua PROJECT_ID
pelo seu Google Cloud
ID do projeto.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Crie um contentor do Cloud Storage
Se tiver um contentor do Cloud Storage existente que ainda não esteja atribuído a um equilibrador de carga, pode avançar para o passo seguinte.
Quando cria um contentor do Cloud Storage para usar como back-end de um Application Load Balancer externo com o Cloud CDN, recomendamos que escolha um contentor multirregional, que replica automaticamente objetos em várias Google Cloud regiões. Isto pode melhorar a disponibilidade do seu conteúdo e melhorar a tolerância a falhas na sua aplicação.
Consola
- Na Google Cloud consola, abra a página Recipientes do Cloud Storage.
- Clique em Criar contentor.
Especifique valores para os campos na tabela seguinte, deixando todos os outros com os respetivos valores predefinidos.
Propriedade Valor (introduza o valor ou selecione uma opção conforme especificado) Nome Para cada contentor, introduza um nome globalmente único. Se o nome que introduzir não for único, é apresentada uma mensagem para experimentar outro nome. Tipo de localização Multirregião Localização Selecione uma região, como us (várias regiões nos Estados Unidos). Classe de armazenamento predefinida Padrão Controlo de acesso Uniform Clique em Criar.
Tome nota do nome do contentor do Cloud Storage recém-criado para o passo seguinte.
gcloud
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Terraform
Para criar um contentor, use o google_storage_bucket
resource.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Copie um ficheiro gráfico para o seu contentor do Cloud Storage
Para lhe permitir testar a configuração, copie um ficheiro gráfico de um contentor do Cloud Storage público para o seu próprio contentor do Cloud Storage.
gcloud
Execute o seguinte comando no Cloud Shell. Substitua
BUCKET_NAME
pelo nome exclusivo do contentor do Cloud Storage:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
Para copiar o objeto, use o comando local-exec
Provisioner
com o comando gcloud storage cp
.
resource "null_resource" "upload_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive" } }
Em alternativa, para carregar um objeto, use o google_storage_bucket_object
recurso.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Na Google Cloud consola, clique em Atualizar para verificar se o ficheiro gráfico foi copiado.
Torne o seu contentor do Cloud Storage público
Este exemplo torna o seu contentor do Cloud Storage publicamente legível. Esta é a abordagem recomendada para conteúdo público. Com esta definição, qualquer pessoa na Internet pode ver e listar os seus objetos e os respetivos metadados, excluindo as ACLs. Para reduzir o risco de exposição não intencional de dados, deve normalmente dedicar buckets do Cloud Storage específicos para objetos públicos.
Seguem-se alternativas para tornar um contentor do Cloud Storage inteiro público:
Use pastas geridas para tornar uma parte do seu contentor publicamente legível.
Torne os objetos individuais publicamente legíveis. Não recomendamos esta abordagem, porque usa um sistema de autorizações específico do Cloud Storage antigo.
Use URLs assinados.
O procedimento seguinte concede a todos os utilizadores acesso à visualização de objetos no seu contentor do Cloud Storage, tornando o contentor publicamente legível.
Consola
- Na Google Cloud consola, abra a página Recipientes do Cloud Storage.
- Navegue para o contentor e clique no separador Autorizações.
- Clique em Adicionar responsáveis.
- Em Novos membros, introduza
allUsers
. - Para a função, selecione Cloud Storage > Visitante de objetos de armazenamento.
- Clique em Guardar.
gcloud
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
Para tornar o seu contentor do Cloud Storage público, use o recurso google_storage_bucket_iam_member
.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Reserve um endereço IP externo
Agora que o contentor do Cloud Storage está em funcionamento, configure um endereço IP externo estático global que os seus clientes usam para alcançar o equilibrador de carga.
Este passo é opcional, mas recomendado, porque um endereço IP externo estático fornece um único endereço para direcionar o seu domínio.
Consola
- Na Google Cloud consola, aceda à página Endereços IP externos.
- Para reservar um endereço IPv4, clique em Reservar endereço estático.
- Atribua um Nome de
example-ip
. - Defina o Nível de serviço de rede como Premium.
- Defina a versão do IP como IPv4.
- Defina o Tipo como Global.
- Clique em Reservar.
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Tome nota do endereço IPv4 que foi reservado:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
Para reservar um endereço IP, use o recurso google_compute_global_address
.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Crie o balanceador de carga de aplicações externo
Neste procedimento, cria o contentor de back-end do balanceador de carga, que funciona como um wrapper para o seu contentor do Cloud Storage. Quando cria ou edita um bucket de back-end, pode ativar o Cloud CDN.
Consola
Inicie o processo de configuração do balanceador de carga de aplicações externo
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
- Selecione Da Internet para as minhas VMs e, de seguida, clique em Continuar.
- Em Gestão avançada de
tráfego, selecione
uma das seguintes opções:
- Para balanceadores de carga de aplicações clássicos, selecione Balanceador de carga HTTP(S) clássico.
- Para balanceadores de carga de aplicações externos globais, selecione Balanceador de carga HTTP(S) com gestão de tráfego avançada.
- Defina Nome como
http-lb
e, em seguida, avance para o passo seguinte.
Configure o back-end e ative o Cloud CDN
Crie o contentor de back-end do balanceador de carga, que funciona como um wrapper para o seu contentor do Cloud Storage. Quando cria ou edita um bucket de back-end, pode ativar o Cloud CDN.
- Clique em Configuração de back-end.
- Em Serviços de back-end e contentores de back-end, clique em Criar ou selecionar serviços de back-end e contentores de back-end e, de seguida, clique em Contentores de back-end > Criar um contentor de back-end.
- Defina o Nome como
cat-backend-bucket
. Este nome não tem de ser globalmente único e pode ser diferente do nome do contentor do Cloud Storage real. - Em Contentor do Cloud Storage, clique em Procurar.
- Selecione o identificador exclusivo global do Cloud Storage
BUCKET_NAME
que criou e, de seguida, clique em Selecionar. Clique em Ativar Cloud CDN.
(Opcional) Modifique o modo de cache e as definições de TTL.
Clique em Criar.
Configure regras de anfitriões e correspondências de caminhos
As regras de anfitrião e os correspondentes de caminhos são componentes de configuração de um mapa de URLs de um balanceador de carga de aplicações externo.
Em Regras de anfitrião e caminho, pode manter as predefinições.
Para ver um exemplo de configuração personalizada, consulte o artigo Adicionar contentores de back-end a equilibradores de carga.
Para saber mais acerca das regras de anfitrião e dos correspondentes de caminhos, consulte a vista geral dos mapas de URLs.
Configure a interface
- Clique em Configuração do front-end.
Verifique se as 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 example-ip
Porta 80 Se quiser criar um balanceador de carga HTTPS em vez de um balanceador de carga HTTP, tem de ter um certificado SSL (
gcloud compute ssl-certificates list
) e preencher os campos da seguinte forma.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 example-ip
Porta 443 Certificado Selecione um certificado ou Crie um novo certificado Clique em Concluído.
Reveja a configuração
- Clique em Rever e finalizar.
- Reveja as secções Recipientes de back-end, Regras de anfitriões e caminhos e Front-end.
- Clique em Criar.
- Aguarde a criação do balanceador de carga.
- Clique no nome do balanceador de carga (http-lb).
- Tome nota do endereço IP do equilibrador de carga para a tarefa seguinte. Chama-se
IP_ADDRESS
.
gcloud
Configure o back-end
gcloud compute backend-buckets create cat-backend-bucket \ --gcs-bucket-name=BUCKET_NAME \ --enable-cdn \ --cache-mode=CACHE_MODE
Defina o modo de cache substituindo CACHE_MODE por uma das seguintes opções:
CACHE_ALL_STATIC
ouUSE_ORIGIN_HEADERS
: usa os cabeçalhos definidos de acordo com os metadados de controlo da cache no armazenamento na nuvem. O Cloud Storage fornece sempre um cabeçalhoCache-Control
ao Cloud CDN. Se não for escolhido explicitamente nenhum valor, envia um valor predefinido.FORCE_CACHE_ALL
: coloca em cache todo o conteúdo, ignorando todas as diretivasprivate
,no-store
ouno-cache
nos cabeçalhos de respostaCache-Control
enviados pelo Cloud Storage.
Configure o mapa de URLs
gcloud compute url-maps create http-lb \ --default-backend-bucket=cat-backend-bucket
Configure o proxy de destino
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
Configure a regra de encaminhamento
-
Para um Application Load Balancer externo global, use o comando da CLI gcloud com
load-balancing-scheme=EXTERNAL_MANAGED
. Esta definição oferece capacidade de gestão avançada do tráfego. - Para um balanceador de carga de aplicações clássico, use
load-balancing-scheme=EXTERNAL
.
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
Configure o back-end
Para configurar o back-end, use o recurso google_compute_backend_bucket
.
Configure o mapa de URLs
Para configurar o back-end, use o recurso google_compute_url_map
.
Configure o proxy de destino
Para configurar o proxy de destino, use o recurso google_compute_target_http_proxy
ou o recurso google_compute_target_https_proxy
.
Configure a regra de encaminhamento
Para configurar a regra de encaminhamento, use o recurso google_compute_global_forwarding_rule
.
- Para um Application Load Balancer externo global, use-o com o
load_balancing_scheme="EXTERNAL_MANAGED"
. Esta definição oferece uma capacidade de gestão de tráfego avançada. - Para um balanceador de carga de aplicações clássico, use
load_balancing_scheme="EXTERNAL"
.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Envie tráfego para o seu contentor de back-end
Depois de criar a regra de encaminhamento global, a configuração pode demorar vários minutos a propagar-se a nível mundial. Após vários minutos, pode começar a enviar tráfego para o endereço IP do balanceador de carga.
Consola
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique em
http-lb
para expandir o equilibrador de carga que acabou de criar.Na secção Backend, confirme se o contentor de back-end está em bom estado. Deve existir uma marca de verificação verde junto ao seu contentor de back-end. Se vir algo diferente, experimente primeiro atualizar a página. A Google Cloud consola pode demorar alguns momentos a indicar que os back-ends estão em bom estado.
Depois de a Google Cloud consola mostrar que o contentor de back-end está em bom estado, pode testar o equilibrador de carga através de um navegador de Internet acedendo a
http://IP_ADDRESS/never-fetch/three-cats.jpg
. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. O navegador deve renderizar uma página com conteúdo que mostre o ficheiro gráfico.
gcloud
Use o comando curl
para testar a resposta do URL. Substitua
IP_ADDRESS
pelo endereço IPv4 do equilibrador de carga.
Tome nota do endereço IPv4 que foi reservado:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Envie um pedido curl:
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
Verifique se o Cloud CDN está a funcionar
Se atualizar a
http://IP_ADDRESS/never-fetch/three-cats.jpg
página
várias vezes em rápida sucessão, devem ocorrer vários acertos da cache.
A entrada de registo seguinte mostra um resultado da cache. Pode ver os resultados positivos da cache na Google Cloud consola abrindo o Explorador de registos e filtrando pelo nome da regra de encaminhamento.
Logs Explorer
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg" requestSize: "577" status: 254 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:25.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:25.588272510Z" spanId: "7b6537d3672e08e1" }
Consola
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique em
http-lb
para expandir o equilibrador de carga que acabou de criar.Na secção Backend, confirme se o contentor de back-end está em bom estado. Deve existir uma marca de verificação verde junto ao seu contentor de back-end. Se vir algo diferente, experimente primeiro atualizar a página. A Google Cloud consola pode demorar alguns momentos a indicar que os back-ends estão em bom estado.
Depois de a Google Cloud consola mostrar que o contentor de back-end está em bom estado, pode testar o equilibrador de carga através de um navegador de Internet acedendo a
http://IP_ADDRESS/never-fetch/three-cats.jpg
. SubstituaIP_ADDRESS
pelo endereço IP do balanceador de carga. O navegador deve renderizar uma página com conteúdo que mostre o ficheiro gráfico.
gcloud
Use o comando curl
para testar a resposta do URL. Substitua
IP_ADDRESS
pelo endereço IPv4 do equilibrador de carga.
Tome nota do endereço IPv4 que foi reservado:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Envie um pedido curl:
curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg
O conteúdo é obtido a partir do Cloud Storage, colocado em cache pelo Cloud CDN e, em seguida, validado e obtido novamente quando expira ou é removido da cache.
O conteúdo da cache tem um cabeçalho Age
superior a zero.
O conteúdo que tem de ser atualizado antes do TTL pode ser invalidado e obtido novamente a partir do Cloud Storage.
Desative o Cloud CDN
Consola
Desative o Cloud CDN para um único contentor de back-end
- Na Google Cloud consola, aceda à página Cloud CDN.
- No lado direito da linha de origem, clique em Menu e, de seguida, selecione Editar.
- Desmarque as caixas de verificação de todos os contentores de back-end que quer impedir de usar a CDN da Google Cloud.
- Clique em Atualizar.
Remova o RFC para todos os contentores de back-end de uma origem
- Na Google Cloud consola, aceda à página Cloud CDN.
- No lado direito da linha de origem, clique em Menu e, de seguida, selecione Remover.
- Para confirmar, clique em Remover.
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_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?
- Para saber que conteúdo é colocado em cache, consulte a Vista geral da colocação em cache.
- Para usar o Cloud CDN no GKE, consulte as funcionalidades de entrada.
- Para verificar se o Cloud CDN está a enviar respostas da cache, consulte a secção Ver registos.
- Para encontrar informações sobre problemas e soluções comuns, consulte a secção Resolução de problemas.
- Para configurar políticas de filtragem e controlo de acesso para o seu conteúdo, consulte as políticas de segurança de limite.