Como configurar o Cloud CDN com um grupo de instâncias gerenciadas

O Cloud CDN aproveita os balanceadores de carga HTTP(S) globais do Google Cloud para fornecer suporte a roteamento, verificação de integridade e IP do Anycast. Os balanceadores de carga HTTP(S) externos globais podem ter vários tipos de instâncias de back-end, e é possível escolher quais back-ends (ou origens) serão ativados para o Cloud CDN.

Neste guia de configuração, mostramos como criar um balanceador de carga HTTP externo simples com o Cloud CDN ativado. O balanceador de carga tem os recursos a seguir:
  • A rede de nuvem privada virtual (VPC, na sigla em inglês) padrão
  • Um grupo de instâncias gerenciadas do Compute Engine
  • Um mapa de URLs padrão
  • Um endereço IP externo reservado
Para saber como configurar um balanceador de carga HTTPS externo e simples com terminação TLS, consulte este link.

Para um exemplo multirregional baseado em conteúdo que inclui configuração de certificado SSL e IPv6, consulte Como configurar um balanceador de carga HTTPS externo baseado em conteúdo.

Para conceitos gerais, consulte a Visão geral do balanceamento de carga HTTP(S) externo.

Se você estiver usando o GKE, o balanceador de carga normalmente será configurado pelo controlador Ingress do Kubernetes. Para mais informações, consulte Configuração do Ingress para balanceamento de carga externo.

Topology

Neste guia, você criará a configuração ilustrada no diagrama a seguir.

Balanceamento de carga HTTP simples (clique para ampliar)
Balanceamento de carga HTTP simples (clique para ampliar)

A sequência de eventos no diagrama é a seguinte:

  1. Um cliente envia uma solicitação de conteúdo para o endereço IPv4 externo definido na regra de encaminhamento.
  2. O balanceador de carga verifica se a solicitação pode ser atendida pelo cache. Nesse caso, o balanceador de carga disponibiliza o conteúdo solicitado fora do cache. Caso contrário, o processamento continuará.
  3. Uma regra de encaminhamento direciona a solicitação para o proxy HTTP de destino.
  4. O proxy de destino usa a regra no mapa de URLs para determinar que o único serviço de back-end receba todas as solicitações.
  5. O balanceador de carga determina que o serviço de back-end tem apenas um grupo de instâncias e direciona a solicitação para uma instância de máquina virtual (VM, na sigla em inglês) nesse grupo.
  6. A VM exibe o conteúdo solicitado pelo usuário.
Balanceamento de carga HTTP(S) simples com o Cloud CDN ativado (clique para ampliar)
Balanceamento de carga HTTP(S) simples com Cloud CDN ativado (clique para ampliar)

Permissões

Para concluir as etapas neste guia, é preciso ter permissão para criar instâncias do Compute Engine, regras de firewall e endereços IP reservados em um projeto. Você precisa ter um papel de proprietário ou editor do projeto, ou os seguintes papéis do IAM do Compute Engine.

Tarefa Papel obrigatório
Criar instâncias Administrador de instâncias
Adicionar e remover regras de firewall Administrador de segurança
Criar componentes do balanceador de carga Administrador de rede
Criar um projeto (opcional) Criador de projeto

Para mais informações, consulte estes guias:

Como criar um grupo de instâncias gerenciadas

Para configurar um balanceador de carga com um back-end do Compute Engine, suas VMs precisam estar em um grupo de instâncias. Neste guia, descrevemos como criar um grupo de instâncias gerenciadas usando VMs do Linux com o Apache em execução para, em seguida, configurar o balanceamento.

O grupo de instâncias gerenciadas fornece VMs que executam os servidores de back-end de um balanceador de carga HTTP externo. Para fins de demonstração, os back-ends veiculam nomes de host próprios.

Console

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acessar a página "Grupos de instâncias"

  2. Clique em Criar grupo de instâncias.
  3. À esquerda, escolha Novo grupo de instâncias gerenciadas.
  4. Em Nome, insira lb-backend-example.
  5. Em Local, selecione Única zona.
  6. Em Região, selecione a região de sua preferência. Este exemplo usa us-east1.
  7. Em Zona, selecione us-east1-b.
  8. Em Modelo de instância, selecione Criar um novo modelo de instância.
  9. Em Nome, insira lb-backend-template.
  10. Certifique-se de que o disco de inicialização esteja configurado como uma imagem Debian. Por exemplo, Debian GNU/Linux 9 (stretch). Estas instruções usam comandos que estão disponíveis apenas no Debian, como apt-get.
  11. Na guia Gerenciamento, insira o seguinte script no campo Script de inicialização em Gerenciamento, segurança, discos, rede, locatário único.

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  12. Na guia Rede, adicione as tags de rede: allow-health-check

  13. Clique em Salvar e continuar.

  14. Em Modo de escalonamento automático, selecione Não fazer escalonamento automático.

  15. Em Número de instâncias, insira 2.

  16. Para criar o novo grupo de instâncias, clique em Criar.

gcloud

  1. Crie o modelo.

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. Crie o grupo de instâncias gerenciadas com base no modelo.

    gcloud compute instance-groups managed create lb-backend-example \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    

Como configurar uma regra de firewall

Neste exemplo, você criará a regra de firewall fw-allow-health-check. Essa é uma regra de entrada que permite o tráfego dos sistemas de verificação de integridade do Google Cloud (130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a tag de destino allow-health-check para identificar as VMs.

Console

  1. No Console do Google Cloud, acesse a página Firewall.

    Acesse a página "Firewall"

  2. Clique em Criar regra de firewall para gerar a segunda regra.
  3. Em Nome, insira fw-allow-health-check.
  4. Em Rede, selecione Padrão.
  5. Em Destinos, selecione Tags de destino especificadas.
  6. Preencha o campo Tags de destino com allow-health-check.
  7. Defina Filtro de origem como IP ranges.
  8. Defina Intervalos IP de origem como 130.211.0.0/22 e 35.191.0.0/16.
  9. Em Protocolos e portas, selecione Portas e protocolos especificados.
  10. Marque a caixa de seleção tcp e digite 80 para os números de porta.
  11. Clique em Criar

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

Como reservar um endereço IP externo

Agora que suas instâncias estão funcionando, configure um endereço IP externo, estático e global que seus clientes possam usar para alcançar seu balanceador de carga.

Console

  1. No Console do Google Cloud, acesse a página Endereços IP externos.

    Acessar a página "Endereços IP externos"

  2. Para reservar um endereço IPv4, clique em Reservar endereço estático.
  3. Em Nome, insira lb-ipv4-1.
  4. Defina o Nível de serviço de rede como Premium.
  5. Defina Versão IP como IPv4.
  6. Configure Tipo como Global.
  7. Clique em Reservar.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

Anote o endereço IPv4 que foi reservado:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Configurar o balanceador de carga

Console

  1. No Console do Google 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 e clique em Continuar.
  5. No campo Nome do balanceador de carga, insira web-map-http.
  6. Clique em Configuração de back-end.
    1. Em Criar ou selecionar serviços e buckets de back-end, selecione Serviços de back-end > Criar um serviço de back-end.
    2. Adicione um nome para o serviço de back-end, como web-backend-service.
    3. Em Protocolo, selecione HTTP.
    4. Em Back-ends > Novo back-end > Grupo de instâncias, selecione o grupo de instâncias, lb-backend-example.
    5. Mantenha as outras configurações padrão.
    6. Em Verificação de integridade, selecione Criar uma verificação de integridade e adicione um nome para ela, como http-basic-check.
    7. Defina o protocolo como HTTP e clique em Salvar e continuar.
    8. Selecione Ativar Cloud CDN.
    9. Mantenha as outras configurações padrão.
    10. Clique em Criar
  7. Em Regras de host e caminho, mantenha as configurações padrão.
  8. Em Configuração de front-end, use os seguintes valores:
    1. Defina Protocolo como HTTP.
    2. Defina o endereço IP como lb-ipv4-1, que você criou antes.
    3. Verifique se Porta está definida como 80 para permitir o tráfego HTTP.
    4. Clique em Done.
  9. Clique em Analisar e finalizar.
  10. Quando terminar de configurar o balanceador de carga, clique em Criar.
  11. Aguarde o balanceador de carga ser criado.
  12. Clique no nome do balanceador de carga.
  13. Na tela Detalhes do balanceador de carga, anote o IP:Porta do balanceador de carga.

gcloud

  1. Crie uma verificação de integridade.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Crie um serviço de back-end.
        gcloud compute backend-services create web-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. Adicione seu grupo de instâncias como o back-end ao serviço de back-end.
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. Crie um mapa de URLs para encaminhar as solicitações recebidas ao serviço de back-end padrão.
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. Crie um proxy HTTP de destino para encaminhar solicitações ao mapa de URL.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  6. Crie uma regra de encaminhamento global para direcionar ao proxy as solicitações recebidas.
        gcloud compute forwarding-rules create http-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Como ativar a Cloud CDN

Se você ainda não ativou o Cloud CDN quando criou o serviço de back-end, faça isso agora atualizando o serviço de back-end:

gcloud compute backend-services update-backend web-backend-service \
    --enable-cdn

Leia mais sobre as diretivas de cache que o Cloud CDN entende e o que não é armazenado em cache pelo Cloud CDN na visão geral do armazenamento em cache.

Enviar tráfego às instâncias

Agora que o serviço de balanceamento de carga está em execução, é possível enviar tráfego para a regra de encaminhamento e observá-lo ser distribuído para instâncias diferentes.

Console

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

    Acessar a página "Balanceamento de carga"

  2. Clique no balanceador de carga que você acabou de criar.
  3. Na seção Back-end, confirme se as VMs estão íntegras. A coluna Integridade deve estar preenchida, indicando que ambas as VMs estão íntegras (2/2). Caso contrário, primeiro tente recarregar a página. Pode levar alguns instantes para o Console do Cloud indicar que as VMs estão íntegras. Se os back-ends não aparecerem íntegros depois de alguns minutos, revise a configuração do firewall e a tag de rede atribuída às suas VMs de back-end.
  4. Depois que o Console do Cloud mostrar que as instâncias de back-end estão íntegras, teste o balanceador de carga usando um navegador da Web acessando http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga.
  5. Seu navegador deve renderizar uma página que mostre o nome da instância que a exibiu e a zona (por exemplo, Page served from: lb-backend-example-xxxx). Caso seu navegador não renderize essa página, revise as configuração mostradas neste guia.

Como desativar a Cloud CDN

Console

Desativar o Cloud CDN para um único serviço de back-end

  1. No Console do Google Cloud, acesse a página do Cloud CDN.

    Acessar a página do Cloud CDN

  2. No lado direito da linha de origem, clique em Menu e selecione Editar.
  3. Desmarque as caixas de seleção dos serviços de back-end que você não quer mais que usem o Cloud CDN.
  4. Clique em Update.

Remover o Cloud CDN de todos os serviços de back-end em uma origem

  1. No Console do Cloud, acesse a página do Cloud CDN.

    Acessar a página do Cloud CDN

  2. No lado direito da linha de origem, clique em Menu e selecione Remover.
  3. Para confirmar, clique em Remover.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

Desativar a CDN do Cloud não invalida ou limpa os caches. Se você desativar e, em seguida, reativar o Cloud CDN, a maior parte do seu conteúdo em cache talvez ainda esteja armazenada. Para impedir que o conteúdo seja disponibilizado a partir do cache, é necessário invalidar esse conteúdo.

A seguir