É comum enviar conteúdo HTTP e HTTPS através do mesmo nome de anfitrião quando usa a CDN da Google Cloud. Embora muitos navegadores imponham a utilização do protocolo Transport Layer Security (TLS) e não permitam a entrega de conteúdo não seguro, ainda existem casos de utilização em que a entrega não segura e a entrega segura têm de ser permitidas através do mesmo nome de anfitrião. Este artigo aborda como pode alcançar esta funcionalidade usando o Cloud CDN.
Desafio
Quando um cliente está a estabelecer uma ligação com um servidor periférico de uma RFC, o protocolo de entrega do utilizador final é negociado. A maioria das plataformas de RFC convencionais direciona o tráfego para a respetiva área de cobertura de fornecimento da seguinte forma:
- Apontar para um nome de domínio pertencente à RFC, através de um registo CNAME de DNS.
- Encaminhar tráfego para um subconjunto de servidores que suportam a negociação de TLS para esse nome de domínio.
Uma vez que o Cloud CDN se integra com o Cloud Load Balancing, a abordagem do Cloud CDN difere da abordagem das RFCs convencionais. O Cloud CDN tira partido do endereço IP Anycast do balanceador de carga da aplicação externo. Quando configura a RFC na nuvem, tem um endereço IP específico para direcionar o tráfego. Isto requer uma construção de registo A (para IPv4) e/ou AAAA (para IPv6) no seu registo DNS, em vez de um registo CNAME com um valor de nome do anfitrião.
Por predefinição, quando configura o frontend do equilibrador de carga, este Google Cloud atribui dinamicamente um endereço IP temporário. Uma vez que tem de configurar as configurações HTTP e HTTPS separadamente, isto pode fazer com que tenha dois endereços IP para a sua instância da RFC da Google Cloud. Uma vez que o mesmo endereço IP do registo A ou AAAA é para HTTP e HTTPS, não é possível processar corretamente este caso no DNS.
Solução
Quando publica conteúdo seguro e não seguro através do mesmo nome de anfitrião, o cliente é direcionado para um servidor periférico que pode negociar HTTP ou HTTPS. Para fazer com que isto funcione com o Cloud CDN, pode reservar um endereço IP e associar o endereço IP reservado à configuração de front-end HTTP e HTTPS no Application Load Balancer externo.
No diagrama:
- Os pedidos recebidos para www.example.com provêm de clientes que usam HTTP/2, HTTPS e HTTP.
Estão reservados dois endereços IP, um para IPv4 e outro para IPv6:
- 34.95.111.204
- [2600:1901:0:b13e::]
Estes dois endereços IP estão associados a www.example.com no Cloud DNS.
Ao configurar o Application Load Balancer externo, a configuração de 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 falhas de cache da RFC, o balanceador de carga distribui pedidos para as origens de back-end com base nas definições definidas no mapa de URLs do balanceador de carga.
Passo 1: reserve um endereço IP externo global
Crie um endereço IPv4 ou IPv6 (ou ambos). Para suportar o endereçamento IPv4 e IPv6, tem de criar um endereço IPv4 e um endereço IPv6.
No seu registo de DNS,crie um registo A (ou AAAA) para direcionar o tráfego para este endereço IP reservado.
Consola
- Na Google Cloud consola, aceda à 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 a versão do IP como IPv4.
- Defina o Tipo como Global.
- Clique em Reservar.
O balanceador de carga usa a rede de nível Premium, conforme necessário quando o Cloud CDN está ativado.
gcloud
gcloud compute addresses create ipv4-address \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Tome nota do endereço IPv4 que foi reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Repita este passo para o IPv6.
Para mais informações, consulte o artigo Reserve um novo endereço IP externo estático.
Passo 2: associe o endereço IP reservado ao equilibrador de carga
Esta secção mostra como atribuir os endereços IP ao balanceador de carga. As instruções completas para configurar o balanceador de carga estão fora do âmbito deste artigo. Para ver um exemplo de configuração, consulte o artigo Criar um balanceador de carga HTTPS.
A secção de configuração do front-end permite-lhe selecionar o protocolo usado entre o cliente e o equilibrador de carga.
Neste exemplo, está a usar HTTP e HTTPS entre o cliente e o balanceador de carga, pelo que precisa de um ou mais recursos de certificado SSL para configurar o proxy.
Consola
Configurar a regra de encaminhamento HTTP
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Selecione o equilibrador de carga e clique em Editar.
- No painel esquerdo, clique em Configuração do frontend.
- No campo Nome, introduza
ipv4-http
. - No campo Protocolo, selecione
HTTP
. - Defina a versão do IP como
IPv4
. - Em Endereço IP, selecione
ipv4-address
, que criou anteriormente. - Certifique-se de que a Porta está definida como
80
para permitir o tráfego HTTP. - Clique em Concluído.
Configurar a regra de encaminhamento HTTPS
- Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Selecione o equilibrador de carga e clique em Editar.
- No painel esquerdo, clique em Configuração do frontend.
- No campo Nome, introduza
ipv4-https
. - No campo Protocolo, selecione
HTTPS
. - Defina a versão do IP como
IPv4
. - Em Endereço IP, selecione
ipv4-address
, que criou anteriormente. - Certifique-se de que a Porta está definida como
443
para permitir o tráfego HTTP. - Clique na lista pendente Certificado.
- Se já tiver um recurso de certificado SSL autogerido que quer usar como certificado SSL principal, selecione-o no menu pendente.
- Caso contrário, selecione Criar um novo certificado.
- Selecione Carregar o meu certificado ou Criar certificado gerido pela Google.
- Se selecionou Carregar o meu certificado, conclua
estes passos.
- Preencha um Nome de
www-ssl-cert
. - Nos campos adequados, carregue o seu certificado de chave pública (ficheiro .crt), cadeia de certificados (ficheiro .csr) e chave privada (ficheiro .key).
- Clique em Criar.
- Preencha um Nome de
- Se escolher Criar certificado gerido pela Google, introduza um Domínio.
- Para adicionar recursos de certificados além do recurso de certificado SSL principal:
- 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 estes passos para o IPv6.
Reveja e finalize
- No painel do lado esquerdo, 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 proxy HTTP de destino para encaminhar pedidos para o seu mapa de URLs.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map
Crie um proxy HTTPS de destino para encaminhar pedidos para o seu mapa de URLs. O proxy é a parte do balanceador de carga que contém o certificado SSL para o balanceamento de carga HTTPS, pelo que também carrega o certificado neste passo.
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 pedidos recebidos para o proxy, uma para cada um dos endereços IP que criou.
-
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 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 Application Load Balancer externo global, use o comando da CLI gcloud com
Depois de criar as regras de encaminhamento global, a propagação da configuração a nível mundial pode demorar vários minutos.
Passo 3: crie um registo A ou AAAA no ficheiro de zona de DNS
O último passo do processo é criar um registo A e/ou AAAA no ficheiro de zona de DNS para apontar para a CDN da Google Cloud, onde o valor do nome do anfitrião responde com os endereços IP reservados que atribuiu no equilibrador de carga.
Agora, pode publicar HTTP e HTTPS através do mesmo nome de anfitrião através da CDN da Google Cloud.
Opcional: redirecionar HTTP para HTTPS
Se quiser redirecionar pedidos HTTP para o seu balanceador de carga HTTPS, tem de adicionar um balanceador de carga HTTP parcial que tenha um front-end, mas nenhum back-end. O front-end recebe pedidos e, em seguida, redireciona-os para o balanceador de carga HTTPS. Para tal, usa o seguinte:
- Uma regra de encaminhamento com o mesmo endereço IP externo reservado que o balanceador de carga de HTTPS usa, conforme mostrado nesta página.
- Um proxy HTTP de destino, conforme mostrado nesta página.
- Um mapa de URLs que redireciona o tráfego para o balanceador de carga HTTPS.
Receber apoio técnico
Se tiver dúvidas acerca do Google Cloud e do Cloud CDN, contacte a sua Google Cloud equipa de vendas ou entre em contacto através do Google Cloud canal do Slack da comunidade e publique uma nota no canal #cloud-cdn.
O que se segue?
- Para ver detalhes sobre o conteúdo que é colocado em cache, consulte os detalhes da cache.
- Para resolver problemas do balanceador de carga, consulte a página de resolução de problemas do balanceador de carga.
- Para resolver problemas do Cloud CDN, consulte a página de resolução de problemas do Cloud CDN.
- Para obter informações sobre a utilização do Cloud CDN no GKE, consulte a página Funcionalidades do Ingress do Cloud CDN.
- Para verificar se o Cloud CDN está a publicar respostas a partir da cache, veja os registos.
- Limpe a configuração do balanceador de carga.