É comum exibir conteúdo HTTP e HTTPS com o mesmo nome de host ao usar o Cloud CDN. Muitos navegadores impõem o uso do Transport Layer Security (TLS) e não permitem a entrega de conteúdo não seguro, mas ainda há casos em que a entrega não segura e a entrega segura precisam ser permitidas no mesmo nome de host. Neste artigo, discutimos como conseguir essa funcionalidade usando o Cloud CDN.
Desafio
Quando um cliente estabelece uma conexão com um servidor de borda do CDN, o protocolo de entrega do usuário final é negociado. A maioria das plataformas de CDN convencionais direciona o tráfego para o respectivo alcance de entrega ao:
- Direcionar para um nome de domínio pertencente ao CDN, usando um registro DNS CNAME.
- Rotear o tráfego para um subconjunto de servidores compatíveis com a negociação TLS do nome de domínio.
Como o Cloud CDN é integrado ao Cloud Load Balancing, a abordagem do Cloud CDN é diferente da abordagem de CDNs convencionais. O Cloud CDN usa o endereço IP Anycast do balanceador de carga de aplicativo externo. Ao configurar o Cloud CDN, você tem um endereço IP específico para direcionar o tráfego. Isso exige um registro A (para IPv4) e/ou AAAA (para IPv6) no registro DNS, em vez de um registro CNAME com um valor de nome do host.
Por padrão, ao configurar o front-end do balanceador de carga, o Google Cloud atribui dinamicamente um endereço IP temporário. Como é preciso definir as configurações de HTTP e HTTPS separadamente, isso pode fazer com que você tenha dois endereços IP para sua instância do Cloud CDN. Como o mesmo endereço IP de registro A ou AAAA é usado para HTTP e HTTPS, não é possível tratar desse caso corretamente no DNS.
Solução
Ao entregar conteúdo seguro e não seguro no mesmo nome de host, o cliente é direcionado para um servidor de borda que pode negociar HTTP ou HTTPS. Para fazer isso funcionar com o Cloud CDN, reserve um endereço IP e vincule-o às configurações do front-end HTTP e HTTPS no balanceador de carga de aplicativo externo.
No diagrama:
- as solicitações recebidas para www.example.com são provenientes de clientes que usam HTTP/2, HTTPS e HTTP.
Dois endereços IP são reservados: um para IPv4 e outro para IPv6:
- 34.95.111.204
- [2600:1901:0:b13e::]
Esses dois endereços IP estão vinculados a www.example.com no Cloud DNS.
Ao configurar o balanceador de carga de aplicativo externo, a configuração do front-end inclui quatro regras de encaminhamento que usam os endereços IP reservados:
Nome Protocolo IP:Porta ipv4-http HTTP 34.95.111.204:80 ipv4-https HTTPS 34.95.111.204:443 ipv6-http HTTP [2600:1901:0:b13e::]:80 ipv6-https HTTPS [2600:1901:0:b13e::]:443 Para ausências no cache do Cloud CDN, o balanceador de carga distribui solicitações para as origens de back-end com base nas configurações definidas no mapa de URL do balanceador de carga.
Etapa 1: reserve um endereço IP externo global
Crie um endereço IPv4 ou IPv6 (ou ambos). Para dar suporte aos endereços IPv4 e IPv6, crie um endereço IPv4 e um endereço IPv6.
No registro DNS, crie um registro A (ou AAAA) para direcionar o tráfego para esse endereço IP reservado.
Console
- No console do Google Cloud, acesse a página Endereços IP externos.
- Clique em Reservar endereço estático para reservar um endereço IPv4.
- Atribua um Nome de
ipv4-address
. - Defina o Nível da rede como Premium.
- Defina Versão IP como IPv4.
- Defina Tipo como Global.
- Clique em Reservar.
O balanceador de carga usa rede nível Premium, necessária quando o Cloud CDN está ativado.
gcloud
gcloud compute addresses create ipv4-address \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Anote o endereço IPv4 que foi reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Repita esta etapa para IPv6.
Para mais informações, consulte Como reservar um novo endereço IP externo estático.
Etapa 2: vincule o endereço IP reservado ao balanceador de carga
Veja nesta seção como atribuir os endereços IP ao seu balanceador de carga. As instruções completas para configurar o balanceador de carga estão além do escopo deste artigo. Para ver um exemplo de configuração, consulte Como criar um balanceador de carga HTTPS.
Na seção de configuração do front-end, você seleciona o protocolo usado entre o cliente e o balanceador de carga.
Neste exemplo, você está usando HTTPS entre o cliente e o balanceador de carga. Portanto, é necessário um ou mais recursos de certificado SSL para configurar o proxy.
Console
Como configurar a regra de encaminhamento HTTP
- No Console do Google Cloud, acesse a página Balanceamento de carga.
- Clique no balanceador de carga e em Editar.
- No painel esquerdo, clique em Configuração de front-end.
- No campo Nome, use
ipv4-http
. - No campo Protocolo, selecione
HTTP
. - Defina Versão do IP como
IPv4
. - Em Endereço IP, selecione
ipv4-address
, criado anteriormente. - Verifique se a Porta está definida como
80
para permitir o tráfego HTTPS. - Clique em Concluído.
Como configurar a regra de encaminhamento HTTPS
- No Console do Google Cloud, acesse a página Balanceamento de carga.
- Clique no balanceador de carga e em Editar.
- No painel esquerdo, clique em Configuração de front-end.
- No campo Nome, use
ipv4-https
. - No campo Protocolo, selecione
HTTPS
. - Defina Versão do IP como
IPv4
. - Em Endereço IP, selecione
ipv4-address
, criado anteriormente. - Verifique se a Porta está definida como
443
para permitir o tráfego HTTPS. - Clique na lista suspensa Certificado.
- Se você já tiver um recurso de certificado SSL autogerenciado que você quer usar como o certificado SSL principal, selecione-o no menu suspenso.
- Caso contrário, selecione Criar um novo certificado.
- Selecione Fazer upload do meu certificado ou Criar um certificado gerenciado pelo Google.
- Se você selecionou Fazer upload do meu certificado, siga estas etapas.
- Preencha um Nome para
www-ssl-cert
. - Nos campos adequados, carregue o Certificado de chave pública (arquivo .crt), a Cadeia de certificados (arquivo .csr) e a Chave particular (arquivo .key).
- Clique em Criar.
- Preencha um Nome para
- Se você escolher Criar um certificado gerenciado pelo Google, informe um Domínio.
- Para adicionar recursos de certificado além do certificado SSL principal, siga estas etapas:
- Clique em Adicionar certificado.
- Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções acima.
- Clique em Concluído.
Repita essas etapas para IPv6.
Revisar e finalizar
- No painel esquerdo, clique em Revisar e finalizar.
- Compare as configurações com o que você pretendia criar.
- Se tudo parecer certo, clique em Atualizar.
gcloud
Crie um proxy HTTP de destino para encaminhar solicitações ao mapa de URLs.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map
Crie um proxy de destino HTTPS para encaminhar solicitações ao mapa de URL. O proxy é a parte do balanceador de carga onde é armazenado o certificado SSL para balanceamento de carga HTTPS. Portanto, nesta etapa, também é possível carregar o certificado.
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-map --ssl-certificates=www-ssl-cert
Crie duas regras de encaminhamento global para encaminhar as solicitações recebidas para o proxy, uma para cada um dos endereços IP que você criou.
-
Para um balanceador de carga de aplicativo externo global, use o comando da CLI gcloud com
load-balancing-scheme=EXTERNAL_MANAGED
. Essa configuração oferece recursos avançados de gerenciamento de tráfego. - Para um balanceador de carga de aplicativo clássico, use
load-balancing-scheme=EXTERNAL
.
gcloud compute forwarding-rules create ipv4-http \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
gcloud compute forwarding-rules create ipv4-https \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=ipv4-address \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
Para um balanceador de carga de aplicativo externo global, use o comando da CLI gcloud com
Depois de criar a regra de encaminhamento global, pode levar vários minutos até a configuração ser propagada em todo o mundo.
Etapa 3: crie um registro A ou AAAA no seu arquivo de zona DNS
A última etapa do processo é criar um registro A e/ou AAAA no arquivo da zona DNS para apontar para o Cloud CDN. Nele, o valor do nome do host responderá com os endereços IP reservados que você atribuiu no balanceador de carga.
Agora é possível exibir HTTP e HTTPS com o mesmo nome de host por meio do Cloud CDN.
Opcional: redirecionamento de HTTP para HTTPS
Se você quiser redirecionar solicitações HTTP para o balanceador de carga HTTPS, será necessário adicionar um balanceador de carga HTTP parcial com um front-end, mas sem back-ends. O front-end recebe solicitações e os redireciona para o balanceador de carga HTTPS. Ele faz isso da seguinte forma:
- Uma regra de encaminhamento com o mesmo endereço IP externo reservado que seu balanceador de carga HTTPS usa, como mostrado nesta página.
- Um proxy HTTP de destino, como mostrado nesta página.
- Um mapa de URL que redireciona o tráfego para o balanceador de carga HTTPS.
Como receber suporte
Se você tiver dúvidas sobre o Google Cloud e o Cloud CDN, entre em contato com a equipe de vendas do Google Cloud ou entre no canal da comunidade do Google Cloud no Slack e poste uma observação no canal #cloud-cdn.
A seguir
- Para detalhes sobre qual conteúdo é armazenado em cache, consulte Detalhes do armazenamento em cache.
- Para resolver problemas do balanceador de carga, consulte a página de solução de problemas do balanceador de carga.
- Para resolver problemas do Cloud CDN, consulte a página de solução de problemas do Cloud CDN.
- Para informações sobre como usar o Cloud CDN no GKE, consulte Cloud CDN na página de recursos de Entrada.
- Para verificar se o Cloud CDN está veiculando respostas do cache, consulte Visualizar registros.
- Veja como limpar a configuração do balanceador de carga.