Como configurar um balanceador de carga HTTPS externo em várias regiões e baseado em conteúdo

Neste guia, você verá como criar um balanceador de carga HTTPS do Google Cloud que:

  • seleciona serviços de back-end com base nos caminhos de URL de solicitação (balanceamento de carga com base em conteúdo);
  • roteia solicitações para back-ends próximos aos clientes (balanceamento de carga entre regiões).

Antes de começar, familiarize-se com os conceitos de balanceamento de carga HTTP(S).

Para um exemplo simplificado, consulte como configurar um balanceador de carga HTTP externo simples ou como configurar um balanceador de carga HTTPS externo simples. Para exemplos de roteamento avançados, como regravações e redirecionamentos HTTP, consulte Como configurar o gerenciamento de tráfego para balanceadores de carga HTTP(S) externos.

Visão geral

Este guia fornece instruções para criar um balanceador de carga que direciona o tráfego com base no caminho no URL da solicitação e equilibra o tráfego em várias regiões. Você cria oito instâncias do Compute Engine nas regiões dos EUA (zona us-central1-b) e UE (zona eu-west1-b). Em seguida, você cria um balanceador de carga que direciona o tráfego para essas instâncias.

Depois de concluir as instruções, o balanceador de carga será configurado da maneira a seguir:

  • Se o tráfego tiver um caminho de URL que comece com /video, ele será encaminhado ao serviço de back-end.
  • Se o tráfego tiver um caminho de URL que não corresponda a esse padrão, ele será encaminhado para outro serviço de back-end.

Neste documento, você criará a configuração representada no diagrama a seguir:

Balanceamento de carga HTTPS com base em conteúdo e entre regiões (clique para ampliar)
Balanceamento de carga HTTPS com base em conteúdo e entre regiões (clique para ampliar)

A sequência de eventos no diagrama é:

  1. Um cliente acessa o URL https://www.example.com/video/concert, enviando uma solicitação de conteúdo para o endereço de IP externo definido na regra de encaminhamento. A solicitação pode usar IPv4 ou IPv6. Há regras de encaminhamento para os dois protocolos.
  2. Uma regra de encaminhamento direciona a solicitação para o proxy HTTPS de destino.
  3. O proxy de destino usa o conjunto de regras no mapa do URL para determinar qual serviço de back-end recebe a solicitação. Uma solicitação com /video, como https://www.example.com/video/concert, é enviada para video-backend-service. Qualquer outro caminho de URL será enviado para o serviço padrão, web-backend-service.
  4. Com base no carregamento e na proximidade do cliente, o balanceador de carga determina quais grupos de instâncias do serviço de back-end precisam veicular a solicitação e direciona a solicitação para uma instância nesse grupo.
  5. A instância veicula o conteúdo solicitado por cada usuário. As instâncias video exibem conteúdo em vídeo, enquanto as instâncias www veiculam todos os outros conteúdos.

Neste exemplo, o balanceador de carga aceita as solicitações HTTPS dos clientes e as envia por proxy para os back-ends, na forma de HTTP. Também é possível configurar um balanceador de carga para aceitar solicitações HTTP e usar HTTPS quando estiver enviando solicitações aos back-ends por proxy.

Antes de começar

Estas instruções exigem um projeto. Se você ainda não tiver um projeto, crie um agora. As instruções mostram como criar uma rede de nuvem privada virtual (VPC) no modo personalizado. Você também precisa configurar regras de firewall personalizadas para permitir que o tráfego alcance as instâncias.

Se você preferir trabalhar na linha de comando, instale a ferramenta de linha de comando gcloud. Consulte Visão geral do gcloud para ver informações conceituais e de instalação sobre a ferramenta.

Permissões

Para concluir as etapas deste guia, é necessário ter permissão para criar instâncias do Compute Engine 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 necessário
Criar instâncias Administrador da instância do Compute
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:

Configurar

Opcional: como criar um projeto novo

Recomendamos que os usuários com a permissão resourcemanager.projects.create criem um projeto novo antes de continuar o tutorial. Isso simplifica a limpeza no final do guia.

Como configurar uma rede e sub-redes

Neste exemplo, use redes, regiões e sub-redes VPC a seguir:

  • Rede: uma rede VPC de modo personalizado denominada lb-network.

  • Sub-redes em duas regiões diferentes:

    • us-subnet usa 10.1.10.0/24 como intervalo IP principal e está na região us-central1.
    • eu-subnet usa 10.1.11.0/24 como intervalo IP principal e está na região europe-west1.

Para criar a rede e sub-rede do exemplo, siga estas etapas:

Console

  1. Acesse a página "Redes VPC" no Console do Google Cloud.
    Acessar a página "Redes VPC"
  2. Clique em Criar rede VPC.
  3. Informe um Nome de lb-network.
  4. Na seção Sub-redes, crie a primeira sub-rede:
    • Defina o Modo de criação de sub-rede como Personalizado.
    • Na seção Nova sub-rede, insira as informações a seguir:
      • Nome: us-subnet
      • Região: us-central1
      • Intervalo de endereços IP: 10.1.10.0/24
      • Clique em Done.
  5. Ainda na seção Sub-redes, clique em Adicionar sub-rede e crie a segunda sub-rede:
    • Na seção Nova sub-rede, insira as informações a seguir:
      • Nome: eu-subnet
      • Região: europe-west1
      • Intervalo de endereços IP: 10.1.11.0/24
      • Clique em Concluído.
  6. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crie a us-subnet:

    gcloud compute networks subnets create us-subnet \
      --network=lb-network \
      --range=10.1.10.0/24 \
      --region=us-central1
    
  3. Crie a eu-subnet:

    gcloud compute networks subnets create eu-subnet \
      --network=lb-network \
      --range=10.1.11.0/24 \
      --region=europe-west1
    

Como configurar regras de firewall

A regra negar padrão de entrada bloqueia o tráfego de entrada para as instâncias de back-end, incluindo tráfego do balanceador de carga e sistemas de verificação de integridade do Google Cloud. Crie novas regras de firewall para substituir a regra padrão e permitir que o tráfego alcance suas instâncias.

Neste exemplo, você cria as regras de firewall a seguir:

  • fw-allow-ssh: uma regra de entrada, aplicável às instâncias submetidas a balanceamento de carga, que permite a conectividade SSH de entrada na porta TCP 22 proveniente de qualquer endereço. É possível escolher um intervalo de IP de origem mais restritivo para essa regra, por exemplo, especificando apenas os intervalos de IP do sistema que iniciará as sessões SSH. Neste exemplo, usamos a tag allow-ssh de destino para identificar as VMs de back-end a que isso se aplicará.

  • fw-allow-health-check-and-proxy: uma regra de entrada, aplicável às instâncias submetidas a balanceamento de carga, que permite o tráfego do balanceador de carga e 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-hc-and-proxy para identificar as VMs de back-end às quais ela deve ser aplicada.

Console

  1. Acesse a página "Firewalls" no Console do Google Cloud.
    Acessar a página "Firewalls"
  2. Clique em Criar regra de firewall para criar a primeira regra de firewall:
    1. Informe um Nome de fw-allow-ssh.
    2. Em Rede, selecione lb-network.
    3. Em Destinos, selecione Tags de destino especificadas.
    4. Preencha o campo Tags de destino com allow-ssh.
    5. Defina Filtro de origem como IP ranges.
    6. Defina Intervalos de IPs de origem como 0.0.0.0/0.
    7. Em Protocolos e portas, selecione Portas e protocolos especificados.
    8. Marque a caixa de seleção ao lado de tcp e digite o número da porta, 22.
    9. Clique em Criar
  3. Clique em Criar regra de firewall para criar a segunda regra de firewall:
    1. Informe um Nome de fw-allow-health-check-and-proxy.
    2. Em Rede, selecione lb-network.
    3. Em Destinos, selecione Tags de destino especificadas.
    4. Preencha o campo Tags de destino com allow-hc-and-proxy.
    5. Defina Filtro de origem como IP ranges.
    6. Defina Intervalos IP de origem como 130.211.0.0/22 e 35.191.0.0/16.
    7. Em Protocolos e portas, selecione Portas e protocolos especificados.
    8. Marque a caixa de seleção ao lado de tcp e digite os números de porta, 80,443.
    9. Clique em Criar

gcloud

  1. Crie a regra de firewall fw-allow-ssh que permita a conectividade SSH para VMs com a tag de rede allow-ssh. Se você omitir source-ranges, o Google Cloud interpretará que a regra autoriza a conexão proveniente de qualquer origem.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. Crie o fw-allow-health-check-and-proxy para permitir que o balanceador de carga e as verificações de integridade do Google Cloud se comuniquem com instâncias de back-end na porta TCP 80 e 443:

    gcloud compute firewall-rules create fw-allow-health-check-and-proxy \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-hc-and-proxy \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80,tcp:443
    

Criar instâncias

Para configurar um balanceador de carga com um back-end do Compute Engine, as VMs precisam estar em grupos de instâncias. Neste guia, descrevemos como criar um grupo de instâncias gerenciadas com VMs do Linux que têm o Apache em execução.

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

Neste exemplo, você cria oito instâncias de máquina virtual (VMs): quatro para veicular conteúdo de vídeo e quatro para veicular todos os outros conteúdos. Você usa um script de inicialização para instalar o software do servidor da Web Apache com uma página inicial exclusiva para cada instância. É possível usar qualquer servidor da Web em suas VMs. O Apache é instalado neste exemplo como uma conveniência.

Console

  1. Acesse a página Grupos de instâncias no Console do Cloud.

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

  2. Clique em Criar grupo de instâncias.
  3. Escolha Novo grupo de instâncias gerenciadas à esquerda.
  4. Em Nome, insira ig-video-us.
  5. Em Local, selecione Única zona.
  6. Em Região, selecione o local de sua preferência. Este exemplo usa us-central1.
  7. Em Zona, selecione us-central1-b.
  8. Em Modelo de instância, selecione Criar um novo modelo de instância.
  9. Em Nome, insira video-us-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. Em Rede, adicione as tags: 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. Clique em Criar para criar o novo grupo.

gcloud

  1. Crie o modelo.

    gcloud compute instance-templates create video-us-template \
       --region=us-central1 \
       --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 ig-video-us \
       --template=video-us-template --size=2 --zone=us-central1-b
    

Repita esse procedimento quatro vezes nos quatro grupos de instâncias. Altere o nome do grupo de instâncias, o nome do modelo, a região e a zona de cada grupo de instâncias da seguinte maneira:

  • ig-video-us, video-us-template, us-central1-b (como mostrado no exemplo)
  • ig-video-eu, video-eu-template, europe-west1-b
  • ig-www-us, www-us-template, us-central1-b
  • ig-www-eu, www-europe-template, europe-west1-b

Como reservar endereços IP externos

Agora que as instâncias já estão em execução, configure os serviços necessários para o balanceamento de carga. Nesta seção, você cria dois endereços IP externos estáticos globais que os clientes usam para alcançar seu balanceador de carga.

Console

  1. Acesse a página "Endereços IP externos" no Console do Google Cloud.
    Acessar a página "Endereços IP externos"
  2. Clique em Reservar endereço estático para reservar um endereço IPv4.
  3. Atribua um Nome de lb-ipv4-1.
  4. Defina o Nível da rede como Premium.
  5. Defina Versão IP como IPv4.
  6. Defina Tipo como Global.
  7. Clique em Reservar.
  8. Clique em Reservar endereço estático novamente para reservar um endereço IPv6.
  9. Atribua um Nome de lb-ipv6-1.
  10. Defina o nível da rede como Premium.
  11. Defina Versão IP como IPv6.
  12. Certifique-se de que o Tipo esteja definido como Global.

    Neste exemplo, o balanceador de carga usa Rede nível Premium. Um balanceador de carga com rede de nível padrão usaria endereços IP regionais. Endereços IPv6 não estão disponíveis no nível padrão.

  13. Clique em Reservar.

gcloud

  1. Reservar um endereço IPv4:

    gcloud compute addresses create lb-ipv4-1 \
      --ip-version=IPV4 \
      --global
    
  2. Reservar um endereço IPv6:

    gcloud compute addresses create lb-ipv6-1 \
      --ip-version=IPV6 \
      --global
    

Como configurar os recursos de balanceamento de carga

A funcionalidade do balanceador de carga envolve vários recursos conectados. Nesta seção, você configura e conecta os recursos. Os efeitos são os seguintes:

  • Portas nomeadas, usadas pelo balanceador de carga para direcionar tráfego aos grupos de instâncias.
  • Uma verificação de integridade, que consulta as instâncias para conferir se estão íntegras. O balanceador de carga só envia tráfego a instâncias íntegras.
  • Serviços de back-end, que acompanham a capacidade, a afinidade de sessões e o status da verificação de integridade. Solicitações diretas de serviços de back-end para VMs ou endpoints de back-ends com base na integridade da capacidade e da instância.
  • Um Mapa de URL, que o balanceador de carga usa para direcionar solicitações a serviços de back-end específicos com base no host e no caminho do URL de solicitação.
  • Um recurso de certificado SSL. Os recursos do certificado SSL têm informações sobre o certificado SSL que o balanceador de carga usa para interromper o TLS quando os clientes HTTPS se conectam a ele. É possível usar vários certificados SSL, que podem ser qualquer combinação de certificados SSL gerenciados ou autogerenciados. É necessário criar um recurso de certificado SSL para cada certificado usado.
  • Um proxy HTTPS de destino, que o balanceador de carga usa para associar o mapa de URL e certificados SSL às regras de encaminhamento global.
  • Duas regras de encaminhamento global, uma para IPv4 e outra para IPv6, que contêm os recursos de endereço IP externo global. As regras de encaminhamento global encaminham a solicitação recebida para o proxy de destino.

Console

Como nomear o balanceador de carga

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  3. Em Somente voltado para a Internet ou interno, selecione Da Internet para minhas VMs.
  4. Clique em Continuar.
  5. Em Nome do balanceador de carga, digite web-map.
  6. Mantenha a janela aberta para continuar.

Como configurar o serviço de back-end e a verificação de integridade das instâncias www

O balanceador de carga requer dois serviços de back-end e uma verificação de integridade para atender a ambos. Neste exemplo, o balanceador de carga encerra solicitações HTTPS do cliente e usa HTTP para se comunicar com os back-ends. Para fazer isso, você especifica o HTTP dos protocolos de back-end e as verificações de integridade.

Como configurar o serviço de back-end para instâncias www

  1. Clique em Configuração de back-end.
  2. No menu suspenso Criar ou selecionar um serviço de back-end, mantenha o ponteiro do mouse sobre Serviços de back-end e selecione Criar um serviço de back-end.
  3. Defina o Nome do serviço de back-end como web-backend-service.
  4. Verifique se o Tipo de back-end está definido como Grupo de instância.
  5. No menu suspenso Protocolo, selecione HTTP.
  6. No campo Porta nomeada, insira http.
  7. Abaixo de Back-ends, defina Grupo de instâncias como ig-www-us.
  8. Para o tráfego entre o balanceador de carga e as instâncias, defina Número de portas como 80.
  9. Nos campos restantes, mantenha os valores padrão.
  10. Clique em Concluído na parte inferior da janela Novo back-end.
  11. Clique em Adicionar back-end e repita as etapas, mas selecione o grupo de instâncias ig-www-eu.
  12. Mantenha a janela aberta para continuar.

Como configurar a verificação de integridade das instâncias www

  1. Na janela Configuração do back-end, em Verificação de integridade, selecione Criar verificação de integridade ou Criar outra verificação de integridade.
  2. Para criar a verificação de integridade HTTP, defina os parâmetros de verificação de integridade a seguir:
    • Nome como http-basic-check-www
    • Protocolo como HTTP
    • Porta como 80.
  3. Clique em Salvar e continuar.
  4. Clique em Criar

Como configurar o back-end e a verificação de integridade para as instâncias video

  1. Repita as etapas acima, mas nomeie o segundo serviço de back-end video-backend-service e atribua a ele os grupos de instâncias ig-video-us e ig-video-eu.
  2. Siga as mesmas etapas para criar uma verificação de integridade, mas nomeie-a como http-basic-check-video. Os nomes das verificações de integridade precisam ser exclusivos.

Como configurar regras de host e caminho

As regras de host e de caminho configuram o recurso de mapa do URL do balanceador de carga.

  1. Na coluna à esquerda da tela, clique em Regras de host e de caminho.
  2. A primeira linha tem web-backend-service na coluna da direita e já está preenchida com a regra padrão Any unmatched (default) para Hosts e Caminhos.
  3. Verifique se há uma segunda linha com video-backend-service na coluna do lado direito. Se ela não existir, clique em Adicionar regra de host e caminho e selecione video-backend-service no menu suspenso na coluna da direita. Preencha as outras colunas da seguinte forma:
    1. Defina Hosts como *.
    2. No campo Caminhos:
      1. Digite /video e pressione a tecla Tab.
      2. Digite /video/* e pressione a tecla Tab.

Como configurar o front-end

A seção de configuração do front-end configura vários recursos para o balanceador de carga, incluindo as regras de encaminhamento e os certificados SSL. Além disso, ela permite selecionar 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. Consulte as informações sobre como criar recursos de certificado SSL em Certificados SSL. Recomendamos o uso de um certificado gerenciado pelo Google.

  1. No painel esquerdo da página Novo balanceador de carga HTTP(S), clique em Configuração de front-end.
  2. No campo Nome, digite https-content-rule.
  3. No campo Protocolo, selecione HTTPS.
  4. Mantenha a janela aberta para continuar.

Como configurar a regra de encaminhamento IPv4

  1. Defina Versão do IP como IPv4.
  2. Em Endereço IP, selecione lb-ipv4-1, criado anteriormente.
  3. Certifique-se de que Porta esteja definida como 443, para permitir tráfego HTTPS.
  4. Clique na lista suspensa Certificado.
    1. Se você tiver um recurso de certificado SSL autogerenciado e quiser usá-lo como o certificado SSL principal, selecione-o no menu suspenso.
    2. Caso contrário, selecione Criar um novo certificado.
    3. Preencha um Nome para www-ssl-cert.
    4. Selecione Fazer upload do meu certificado ou Criar um certificado gerenciado pelo Google. Para criar um certificado gerenciado pelo Google, você deve ter um domínio. Se você não tiver um domínio, poderá fazer upload do seu próprio certificado para fins de teste.
    5. Se você selecionou Fazer upload do meu certificado, siga estas etapas.
      1. No campo Certificado de chave pública, escolha uma destas opções:
        • Clique no botão Upload e selecione o arquivo de certificado no formato PEM.
        • Copie e cole o conteúdo de um certificado no formato PEM. O conteúdo tem que começar com -----BEGIN CERTIFICATE----- e encerrar com -----END CERTIFICATE-----.
      2. No campo Cadeia de certificados, escolha uma destas opções:
        • Clique no botão Upload e selecione o arquivo de certificado da sua CA. É recomendável que esse arquivo inclua certificados de CA tanto intermediários como raiz.
        • Copie e cole o conteúdo de uma cadeia de certificados. Cada certificado na cadeia precisa estar no formato PEM, começando com -----BEGIN CERTIFICATE----- e terminando com -----END CERTIFICATE-----. O Google Cloud não valida a cadeia de certificados para você. A validação é sua responsabilidade.
        • Se você omitir a cadeia de certificados, seu certificado precisará ser assinado por uma CA confiável publicamente, em que os clientes confiem automaticamente.
      3. No campo Certificado de chave privada, escolha uma destas opções:
        • Clique no botão Upload e selecione sua chave privada. Ela precisa estar no formato PEM e não ser protegida por uma senha longa.
        • Copie e cole o conteúdo de uma chave privada no formato PEM. As chaves privadas RSA precisam começar com -----BEGIN RSA PRIVATE KEY----- e terminar com -----END RSA PRIVATE KEY-----. As chaves privadas ECDSA precisam começar com -----BEGIN EC PRIVATE KEY----- e terminar com -----END EC PRIVATE KEY-----.
      4. Clique em Criar
    6. Se você selecionou Criar um certificado gerenciado pelo Google, insira um Domínio.
  5. Para adicionar recursos de certificado além do certificado SSL principal, siga estas etapas:
    1. Clique em Adicionar certificado.
    2. Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções acima.
  6. Clique em Done.
  7. Mantenha a janela aberta para continuar.

Como configurar a regra de encaminhamento IPv6

  1. Clique em Adicionar IP e porta de front-end.
  2. Informe um Nome de https-content-ipv6-rule.
  3. No campo Protocolo, selecione HTTPS se você quiser usar HTTPS entre o cliente e o balanceador de carga. Selecione HTTP se quiser usar HTTP entre o cliente e o balanceador de carga.
  4. Defina Versão do IP como IPv6.
  5. Em IP, selecione lb-ipv6-1, criado anteriormente.
  6. A Porta padrão 443 é obrigatória.
  7. Se você já tem um recurso de certificado SSL que quer usar, selecione-o no menu suspenso Certificado. Caso contrário, selecione Criar um novo certificado.
    1. Preencha um Nome para www-ssl-cert.
    2. Nos campos adequados, carregue o Certificado de chave pública (arquivo .crt), a Cadeia de certificados (arquivo .csr) e a Chave particular (arquivo .key).
    3. Clique em Criar
  8. Para adicionar recursos de certificado além do certificado SSL principal, siga estas etapas:
    1. Clique em Adicionar certificado.
    2. Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções acima.
  9. Clique em Done.

Revisão e finalização

  1. No painel esquerdo da página Novo balanceador de carga HTTP(S), clique em Revisar e finalizar.
  2. Compare as configurações com o que você pretendia criar.
  3. Se tudo parecer certo, clique em Criar para criar o balanceador de carga HTTP(S).

gcloud

  1. Para cada grupo de instâncias, defina um serviço HTTP e associe um nome à porta relevante. Após a configuração do serviço de balanceamento de carga, o tráfego é encaminhado à porta nomeada.

    gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. Crie uma verificação de integridade. Use o comando gcloud para HTTP se você estiver usando HTTP entre o balanceador de carga e os back-ends.

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. Crie um serviço de back-end para cada provedor de conteúdo. Defina o campo --protocol como HTTP, porque estamos usando HTTP para chegar às instâncias. Use a verificação de integridade http-basic-check que criamos antes.

    gcloud compute backend-services create video-backend-service \
        --global-health-checks \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
    gcloud compute backend-services create web-backend-service \
        --global-health-checks \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
  4. Adicione os grupos de instâncias como back-ends aos serviços de back-end. Um back-end define a capacidade (uso máximo de back-end ou máximo de consultas por segundo) dos grupos de instâncias que ele contém. Para este exemplo, defina balancing-mode como o valor UTILIZATION, max-utilization como 0.8 e capacity-scaler como 1. Defina capacity-scaler como 0 caso queira drenar um serviço de back-end.

    Adicione o grupo de instâncias ig-video-us:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-us \
        --instance-group-zone=us-central1-b \
        --global
    

    Adicione o grupo de instâncias ig-video-eu:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-eu \
        --instance-group-zone=europe-west1-b \
        --global
    

    Adicione o grupo de instâncias ig-www-us:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-us \
        --instance-group-zone=us-central1-b \
        --global
    

    Adicione o grupo de instâncias ig-www-eu:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-eu \
        --instance-group-zone=europe-west1-b \
        --global
    
  5. Crie uma mapa de URL para encaminhar as solicitações recebidas para os serviços de back-end adequados. Nesse caso, os mapeamentos de caminhos de solicitação definidos por meio da sinalização --path-rules dividem o tráfego de acordo com o caminho do URL de cada solicitação para seu local. Qualquer tráfego que não conste na lista --path-rules é enviado para --default-service flag.

    1. Crie um mapa de URL:

      gcloud compute url-maps create web-map \
          --default-service web-backend-service
      
    2. Adicione uma correspondência de caminho ao mapa de URL e defina os mapeamentos de caminhos das solicitações:

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-backend-service \
          --path-matcher-name pathmap \
          --path-rules="/video=video-backend-service,/video/*=video-backend-service"
      
  6. Crie um recurso de certificado SSL para ser usado no proxy HTTPS. Para criar um certificado gerenciado pelo Google, você precisa ter um domínio. Se você não tiver um domínio, poderá usar um certificado SSL autoassinado para testes. Para mais informações, consulte Tipos de certificados SSL.

    Se você usa vários certificados SSL, é necessário criar um recurso de certificado SSL para cada certificado.

    Para criar um recurso de certificado SSL autogerenciado:

    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    

    Para criar um recurso de certificado SSL gerenciado pelo Google:

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]
    
  7. 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. Por isso, nesta etapa, carregue também o certificado.

    gcloud compute target-https-proxies create https-lb-proxy \
        --url-map web-map --ssl-certificates www-ssl-cert
    
  8. 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.

    gcloud compute forwarding-rules create https-content-rule \
        --address=lb-ipv4-1\
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    
    gcloud compute forwarding-rules create https-content-ipv6-rule \
        --address=lb-ipv6-1 \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    

Depois de criar a regra de encaminhamento global, pode levar vários minutos até a configuração ser propagada em todo o mundo.

Enviar tráfego às instâncias

Agora que você configurou o serviço de balanceamento de carga, comece a enviar tráfego para a regra de encaminhamento e veja o tráfego ir para instâncias diferentes.

Console e navegador da Web

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em web-map para expandir o balanceador de carga que você acabou de criar.
  3. Na seção Back-end, confirme se as instâncias estão íntegras. A coluna Íntegra precisa estar preenchida, indicando a integridade das duas instâncias de cada um dos quatro grupos de instâncias. Se não estiver assim, tente atualizar a página. Pode levar alguns instantes para o Console do Cloud indicar que as instâncias estão íntegras. Caso os back-ends não apareçam como íntegros depois de alguns minutos, analise a configuração do firewall e defina as tags da rede atribuídas às instâncias do back-end.

  4. Registre os endereços IPv4 e IPv6 do balanceador de carga:

    1. Acesse a página "Endereços IP externos" no Console do Google Cloud.
      Acessar a página "Endereços IP externos"
    2. Em Nome, encontre os endereços chamados lb-ipv4-1 e lb-ipv6-1 e registre os valores associados na coluna Endereços externos.
  5. Se você estiver usando um certificado gerenciado pelo Google:

    1. Crie os seguintes registros DNS:

    2. Confirme se o status do recurso de certificado é ACTIVE. Para mais informações, consulte Status do recurso de certificado SSL gerenciado pelo Google.

  6. Teste o balanceador de carga usando um navegador da Web e acessando uma das seguintes opções:

    • https://<var>ip-address</var>, em que ip-address é o endereço IPv4 do balanceador de carga. Se o navegador exibir um aviso de certificado, você precisará instruí-lo explicitamente a confiar no certificado. O aviso aparece porque os certificados geralmente são configurados com domínios, não com endereços IP.

    • https://<var>fqdn</var>, em que fqdn é o nome de domínio totalmente qualificado (FQDN, na sigla em inglês) em que você configurou o DNS para apontar para o endereço IP do balanceador de carga. Se você usou um certificado SSL auto-gerenciado e autoassinado ou um certificado SSL auto-gerenciado e assinado por uma autoridade de certificação personalizada, seu navegador exibirá um aviso de certificado, a menos que você o tenha configurado explicitamente para confiar no certificado ou em na autoridade de certificação. Para mais detalhes sobre certificados autogerenciados, consulte Como criar uma chave privada e um certificado.

    O navegador renderizará uma página exibindo o nome da instância que veiculou a página e a zona (por exemplo, Page on ig-www-us-02 in us-central1-b).

  7. No navegador, acesse uma das seguintes opções:

    • https://<var>ip-address</var>/video, em que ip-address é o endereço IPv4 do balanceador de carga.

    • https://<var>fqdn</var>/video, em que fqdn é o FQDN em que você configurou o DNS para apontar para o endereço IP do balanceador de carga.

    O navegador renderizará uma página exibindo o nome da instância de vídeo que veiculou a página e a zona (por exemplo, Page on ig-video-us-02 in us-central1-b).

gcloud e usando curl

  1. Registre os endereços IPv4 e IPv6 do balanceador de carga:

    gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
    
    gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
    
  2. Se você estiver usando um certificado gerenciado pelo Google:

    1. Crie os seguintes registros DNS:

    2. Confirme se o status do recurso de certificado é ACTIVE. Para mais informações, consulte Status do recurso de certificado SSL gerenciado pelo Google.

      gcloud beta compute ssl-certificates list
      
  3. Use o comando curl para testar a resposta desses URLs. Substitua ip-address pelo endereço IPv4 do balanceador de carga:

    curl -k https://ip-address
    
    curl -k https://ip-address/video/
    
  4. Use o comando curl para testar a resposta desses URLs. Substitua ip-address pelo endereço IPv6 do balanceador de carga. Para IPv6, coloque o endereço entre colchetes ([]) e desative globs com a sinalização -g (por exemplo, curl -g -6 "https://[2001:DB8::]/").

    curl -k -g -6 https://[ip-address]
    
    curl -k -g -6 https://[ip-address]/video/
    

Como testar a funcionalidade entre regiões

Para simular um usuário em uma região geográfica diferente, conecte-se a uma das instâncias de máquina virtual em uma região diferente e execute um comando curl dessa instância para ver a solicitação ir para uma instância na região mais próxima.

Se você se conectar a ig-www-us-01, a execução de um comando curl mostrará que a solicitação vai para uma instância em us-central1. Você verá uma saída como esta: Page on ig-www-us-02 in us-central1-b.

Se você se conectar a ig-www-eu-01, a execução de um comando curl mostrará que a solicitação vai para uma instância em europe-west1. Você verá uma saída como esta: Page on ig-www-eu-02 in europe-west1-b.

É possível testar um sistema cliente em qualquer lugar do mundo. Se os back-ends de uma região não forem íntegros ou atingirem a capacidade, o balanceador de carga HTTPS automaticamente enviará o tráfego para a região mais próxima.

Outras opções de configuração

Nesta seção, você verá mais detalhadamente o exemplo de configuração para fornecer opções de configuração extras e alternativas. Todas as tarefas são opcionais. É possível realizá-las em qualquer ordem.

Como ativar a afinidade da sessão

Estes procedimentos demonstram como configurar um tipo diferente de afinidade de sessão para cada serviço de back-end:

  • Afinidade da sessão do endereço IP do cliente para web-backend-service
  • Afinidade da sessão de cookie HTTP para video-backend-service

Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona as solicitações de um determinado cliente para a mesma VM de back-end com base em um hash criado a partir do endereço IP do cliente.

Quando a afinidade de cookie gerado é ativada, o balanceador de carga emite um cookie na primeira solicitação. Em cada solicitação subsequente com o mesmo cookie, o balanceador de carga direciona a solicitação para a mesma VM ou o mesmo endpoint de back-end. Em balanceadores de carga HTTP(S) externos, o cookie é chamado de GCLB.

Console

Para ativar a afinidade de sessão de IP do cliente para web-backend-service:

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Back-ends.
  3. Clique em web-backend-service (o nome de um dos serviços de back-end que você criou para este exemplo) e clique em Editar.
  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.
  5. Em Afinidade da sessão, selecione IP do cliente no menu.
  6. Clique em Save.

Para ativar a afinidade de sessão de cookie gerada para video-backend-service:

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Back-ends.
  3. Clique em video-backend-service (o nome de um dos serviços de back-end que você criou para este exemplo) e clique em Editar.
  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.
  5. Em Afinidade da sessão, selecione Cookies gerados no menu.
  6. Clique em Update.

gcloud

Use o seguinte comando gcloud para atualizar o serviço de back-end web-backend-service, especificando a afinidade da sessão de IP do cliente:

gcloud compute backend-services update web-backend-service \
    --session-affinity=CLIENT_IP \
    --global

Use o seguinte comando gcloud para atualizar o serviço de back-end video-backend-service, especificando a afinidade da sessão de cookie gerada:

gcloud compute backend-services update video-backend-service \
    --session-affinity=GENERATED_COOKIE \
    --global

API

Para definir a afinidade da sessão de IP do cliente, faça uma solicitação PATCH ao método backendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/web-backend-service
{
  "sessionAffinity": "CLIENT_IP"
}

Para definir a afinidade da sessão do cookie gerado, faça uma solicitação PATCH para o método backendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/video-backend-service
{
  "sessionAffinity": "GENERATED_COOKIE"
}

Como remover endereços IP externos de VMs de back-end

O balanceamento de carga do Google Cloud HTTP(S) se comunica com back-ends usando os endereços IP internos e rotas especiais do balanceador de carga. As instâncias de back-end não precisam de endereços IP externos para se comunicar com o balanceador de carga. Para aumentar a segurança, remova os endereços IP externos das instâncias de back-end.

Para remover endereços IP externos de instâncias de back-end, siga estas instruções.

Para se conectar a uma instância de back-end que não tenha um endereço IP externo usando SSH, consulte Como se conectar a uma instância que não tem um endereço IP externo.

Limpar

Após concluir este tutorial de balanceamento de carga HTTP(S), é possível excluir os recursos do Cloud Load Balancing criados para que você não seja cobrado por eles no futuro. Se esses recursos foram criados no próprio projeto, exclua todo o projeto. Caso contrário, exclua os recursos individualmente.

Como excluir o projeto

Console

  1. Acesse a página "Projetos" no Console do Google Cloud.
    Acessar a página "Projetos"
  2. Na lista de projetos, selecione um e clique em Excluir.
  3. Na caixa de diálogo, digite project-id e clique em Encerrar para excluir o projeto.

gcloud

Execute o seguinte comando, substituindo project-id pelo ID do projeto:

gcloud projects delete project-id

Excluir recursos individuais

Console

Excluir o balanceador de carga

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Marque a caixa de seleção ao lado de web-map.
  3. Clique no botão Excluir na parte superior da página.
  4. Marque as caixas de seleção ao lado de todos os recursos extras, incluindo serviços de back-end, verificações de integridade e certificados SSL.
  5. Clique em Excluir balanceador de carga e recursos selecionados.

Como excluir os grupos de instâncias

  1. Acesse a página "Grupos de instâncias" no Console do Google Cloud.
    Acessar a página "Grupos de instâncias"
  2. Marque a caixa de seleção na parte superior ao lado de Nome para selecionar todos os grupos de instâncias.
  3. Clique em Excluir.
  4. Na janela de confirmação, clique em Excluir.

Como liberar endereços IP externos

  1. Acesse a página "Endereços IP externos" no Console do Google Cloud.
    Acessar a página "Endereços IP externos"
  2. Marque as caixas de seleção ao lado de lb-ipv4-1 e lb-ipv6-1.
  3. Clique em Liberar endereços estáticos.
  4. Na janela de confirmação, clique em Excluir.

Como excluir as regras de firewall

  1. Acesse a página "Firewalls" no Console do Google Cloud.
    Acessar a página "Firewalls"
  2. Marque as caixas de seleção ao lado de fw-allow-health-check-and-proxy e fw-allow-ssh.
  3. Clique em Excluir.
  4. Na janela de confirmação, clique em Excluir.

Como excluir as instâncias de VM

  1. Acesse a página "Instâncias de VM" no Console do Google Cloud Platform.
    Acessar a página "Instâncias de VM"
  2. Marque a caixa de seleção na parte superior ao lado de Nome para selecionar todas as instâncias.
  3. Clique em Excluir.
  4. Na janela de confirmação, clique em Excluir.

Como excluir a rede VPC

  1. Acesse a página "Redes VPC" no Console do Google Cloud.
    Acessar a página "Redes VPC"
  2. Clique em lb-network.
  3. Na página "Detalhes da rede", clique em Excluir rede VPC.
  4. Na janela de confirmação, clique em Excluir.

gcloud

Excluir o balanceador de carga

Para excluir o balanceador de carga, é necessário excluir cada um dos componentes dele.

  1. Exclua as regras de encaminhamento:

    gcloud compute forwarding-rules delete https-content-rule \
        --global
    
    gcloud compute forwarding-rules delete https-content-ipv6-rule \
        --global
    
  2. Exclua os endereços IP externos globais:

    gcloud compute addresses delete lb-ipv4-1 \
        --global
    
    gcloud compute addresses delete lb-ipv6-1 \
        --global
    
  3. Exclua o proxy de destino:

    gcloud compute target-https-proxies delete https-lb-proxy
    
  4. Exclua o certificado SSL:

    gcloud compute ssl-certificates delete www-ssl-cert
    
  5. Exclua o mapa de URL:

    gcloud compute url-maps delete web-map
    
  6. Exclua os serviços de back-end:

    gcloud compute backend-services delete web-backend-service \
        --global
    
    gcloud compute backend-services delete video-backend-service \
        --global
    
  7. Exclua as verificações de integridade:

    gcloud compute health-checks delete http-basic-check
    

Você excluiu todos os recursos do balanceador de carga.

Como excluir os grupos de instâncias

Repita o comando a seguir para excluir quatro grupos de instâncias não gerenciadas, usando as seguintes combinações de nome e zona. Substitua instance-group-name e zone adequadamente:

  • Nome: ig-www-us, zona: us-central1-b
  • Nome: ig-video-us, zona: us-central1-b
  • Nome: ig-www-eu, zona: europe-west1-b
  • Nome: ig-video-eu, zona: europe-west1-b
gcloud compute instance-groups unmanaged delete instance-group-name \
   --zone=zone

Como excluir as instâncias de VM

Repita o comando a seguir para excluir as oito VMs, usando as combinações de nome e zona a seguir. Substitua vm-name e zone adequadamente:

  • Nome: ig-www-us-01, zona: us-central1-b
  • Nome: ig-www-us-02, zona: us-central1-b
  • Nome: ig-video-us-01, zona: us-central1-b
  • Nome: ig-video-us-02, zona: us-central1-b
  • Nome: ig-www-eu-01, zona: europe-west1-b
  • Nome: ig-www-eu-02, zona: europe-west1-b
  • Nome: ig-video-eu-01, zona: europe-west1-b
  • Nome: ig-video-eu-02, zona: europe-west1-b
gcloud compute instances delete vm-name \
   --zone=zone

Como excluir as regras de firewall

Exclua as duas regras de firewall:

gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
gcloud compute firewall-rules delete fw-allow-ssh

Como excluir a rede VPC

  1. Exclua o us-subnet:

    gcloud compute networks subnets delete us-subnet \
    --region=us-central1
    
  2. Exclua o eu-subnet:

    gcloud compute networks subnets delete eu-subnet \
    --region=europe-west1
    
  3. Excluir a rede VPC

    gcloud compute networks delete lb-network
    

Você excluiu todos os recursos configurados neste projeto.

A seguir