Como configurar proxies SSL para o Google Cloud Load Balancing

O proxy do Google Cloud SSL encerra as conexões SSL (TLS) do usuário na camada de balanceamento de carga global e, em seguida, equilibra as conexões entre as instâncias por meio de SSL ou TCP. O proxy do Cloud SSL é destinado ao tráfego não HTTP(S). Para o tráfego HTTP(S), recomendamos o balanceamento de carga HTTP(S).

O balanceamento de carga do proxy SSL é compatível com tráfego do cliente nos endereços IPv4 e IPv6. As solicitações IPv6 do cliente são encerradas na camada global do balanceamento de carga e, em seguida, encaminhadas por proxy via IPv4 para seus back-ends.

Visão geral

Com o proxy SSL (TLS) no seu tráfego SSL, é possível encerrar as sessões SSL na camada global do balanceamento de carga. Em seguida, você pode encaminhar o tráfego para suas instâncias da máquina virtual usando SSL (recomendado) ou TCP.

O proxy SSL é um serviço de balanceamento de carga global. Você pode implantar as instâncias em várias regiões, e o balanceador de carga direciona automaticamente o tráfego para a região mais próxima que tenha capacidade. Se ela estiver no limite da capacidade, o balanceador direcionará automaticamente novas conexões para outra região com capacidade. As conexões de usuário existentes permanecem na região atual.

Para ter a melhor segurança, use criptografia de ponta a ponta na sua implantação de proxy SSL. Para fazer isso, configure o serviço de back-end para que ele aceite tráfego via SSL. Isso garante que o tráfego do cliente descriptografado na camada de proxy SSL seja criptografado novamente antes de ser enviado às instâncias do back-end. Na criptografia de ponta a ponta, você precisa provisionar certificados e chaves nas instâncias para que possam realizar o processamento do SSL.

Vantagens do proxy SSL:

  • Roteamento inteligente: o balanceador de carga pode direcionar solicitações para locais de back-end em que haja capacidade. Por outro lado, um balanceador de carga L3/L4 precisa direcionar para back-ends regionais sem observar a capacidade. O uso do encaminhamento mais inteligente permite o aprovisionamento em N+1 ou N+2, em vez de x*N.
  • Melhor utilização das instâncias da máquina virtual: o processamento de SSL poderá consumir muita CPU se os códigos utilizados não forem eficientes para CPU. Para maximizar o desempenho da CPU, use certificados SSL ECDSA, TLS1.2 e prefira o conjunto de códigos ECDHE-ECDSA-AES128-GCM-SHA256 para SSL entre o balanceador de carga e as instâncias.
  • Gerenciamento de certificados: você só precisa atualizar o certificado voltado para o cliente em um único local quando precisar alternar certificados. Você também pode reduzir a sobrecarga de gerenciamento para as instâncias de máquina virtual usando certificados autoassinados em suas instâncias.
  • Patches de segurança: se aparecer vulnerabilidades na pilha SSL ou TCP, aplicaremos os patches ao balanceador de carga automaticamente para manter as instâncias seguras.
  • O proxy SSL é compatível com as seguintes portas: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883 e 5222.

Observações:

  • Embora escolher enviar o tráfego sobre TCP não criptografado entre a camada de balanceamento de carga global e instâncias permita que você descarregue o processamento de SSL das instâncias, isso também é acompanhado por segurança reduzida entre a camada de balanceamento de carga global e as instâncias e, portanto, não é recomendado.
  • O proxy SSL pode lidar com HTTPS, mas isso não é recomendado. Em vez disso, use o balanceamento de carga HTTP(S) para o tráfego HTTPS. Consulte as perguntas frequentes para ver detalhes.

Descrevemos agora como o proxy SSL funciona e orientamos você na configuração de um proxy SSL para o tráfego de balanceamento de carga para algumas instâncias.

Google Cloud Load Balancing com proxy SSL

Com o proxy SSL na camada de balanceamento de carga global, as conexões SSL são encerradas na camada global e, então, colocadas em proxy no grupo de instâncias disponíveis mais próximo.

Neste exemplo, o tráfego dos usuários em Iowa e Boston termina na camada de balanceamento de carga global e uma conexão separada é estabelecida com a instância de back-end selecionada.

Google Cloud Load Balancing com terminação SSL (clique para ampliar)
Google Cloud Load Balancing com terminação SSL (clique para ampliar)

Configuração de balanceamento de carga de SSL

Este exemplo demonstra a configuração de balanceamento de carga SSL global para um serviço simples que existe em duas regiões: us-central1 e us-east1. Vamos configurar o seguinte:

  1. quatro instâncias espalhadas por duas regiões
  2. grupos de instâncias para conter as instâncias
  3. componentes de back-end, que incluem o seguinte:
    • verificação de integridade: usada para monitorar a integridade da instância;
    • serviço de back-end: monitora grupos de instâncias e os impede de exceder o uso configurado;
    • back-ends: mantêm os grupos de instâncias.
  4. componentes de front-end, que incluem o seguinte:
    • um recurso de certificado SSL;
    • o próprio proxy SSL com o certificado SSL;
    • um endereço IPv4 estático e externo, além de uma regra de encaminhamento que envia o tráfego do usuário ao proxy;
    • um endereço IPv6 estático e externo, além de uma regra de encaminhamento que envia o tráfego do usuário ao proxy;
  5. uma regra de firewall que permite o tráfego do balanceador de carga e do verificador de integridade para as instâncias

Depois disso, vamos testar nossa configuração.

Configurar instâncias e grupos de instâncias

Esta seção mostra como criar instâncias e grupos de instâncias e, em seguida, adicioná-las a esses grupos. Um sistema de produção normalmente usa grupos de instâncias gerenciados com base nos modelos de instância. No entanto, esta configuração é mais rápida para os testes iniciais.

Criar instâncias

Para fins de teste, vamos instalar o Apache em quatro instâncias, duas em cada um dos dois grupos de instâncias. O normal seria você não usar o balanceamento de carga SSL para o tráfego HTTP, mas é comum usar o Apache por ser fácil de configurar para teste.

Essas instâncias são criadas com uma tag ssl-lb. Essa tag é usada mais tarde pela regra de firewall.

Console


Criar instâncias

  1. Acesse a página "Instâncias de VMs" no Google Cloud Platform Console.
    Acessar a página "Instâncias de VM"
  2. Clique em Criar instância.
  3. Defina o Nome como ig-us-central1-1.
  4. Defina a Zona como us-central1-b.
  5. Clique em Gerenciamento, disco, rede e chaves SSH para mostrar as configurações avançadas.
  6. Em Gerenciamento, preencha o campo Tags com ssl-lb.
  7. Defina o Script de inicialização como
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  8. Mantenha os valores padrão para os outros campos.
  9. Clique em Criar.
  10. Crie ig-us-central1-2 com as mesmas configurações, mas o Script de inicialização precisa estar definido como
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  11. Crie ig-us-east1-1 com as mesmas configurações, mas a Zona precisa estar definida como us-east1-b, e o Script de inicialização como
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  12. Crie ig-us-east1-2 com as mesmas configurações, mas a Zona precisa estar definida como us-east1-b, e o Script de inicialização como
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. Crie ig-us-central1-1 na zona us-central1-b

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US central 1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING

  2. Crie ig-us-central1-2 na zona us-central1-b

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-central1-b \
         --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
           echo '<!doctype html><html><body><h1>SSL load balanced instance - US central 2</h1></body></html>' | tee /var/www/html/index.html
           EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING

  3. Crie ig-us-east1-1 na zona us-east1-b

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US east 1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING

  4. Crie ig-us-east1-2 na zona us-east1-b

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US east 2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING

Criar um grupo de instâncias para cada zona e adicionar instâncias

Console


  1. Acesse a página "Grupos de instâncias" no Console do Google Cloud Platform.
    Acessar a página "Grupos de instâncias"
  2. Clique em Criar grupo de instâncias.
  3. Defina o Nome como us-ig1.
  4. Defina a Zona como us-central1-b.
  5. Clique em Especificar mapeamento de nomes de porta.
    1. Em Mapeamento de nomes de porta, clique em Adicionar item.
    2. Insira ssl-lb como Nome de porta e 443 como os Números de porta.
  6. Em Definição de instância, clique em Selecionar instâncias existentes.
  7. Em Instâncias de VM, selecione ig-us-central1-1 e ig-us-central1-2.
  8. Mantenha as outras configurações inalteradas.
  9. Clique em Criar.
  10. Repita as etapas, mas faça as seguintes configurações:
    • Nome: us-ig2;
    • Zona: us-east1-b;
    • Nome de porta como ssl-lb e Números de porta como 443;
    • Instâncias: ig-us-east1-1 e ig-us-east1-2.
  11. Verifique se você tem agora dois grupos de instâncias, cada um com duas instâncias.

gcloud


  1. Crie o grupo de instâncias us-ig1.

    gcloud compute instance-groups unmanaged create us-ig1 --zone us-central1-b
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME   ZONE          NETWORK MANAGED INSTANCES
    us-ig1 us-central1-b                 0

  2. Defina uma porta nomeada para o grupo de instâncias.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports ssl-lb:443 \
        --zone us-central1-b
    

  3. Adicione ig-us-central1-1 e ig-us-central1-2 a us-ig1.

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].

  4. Crie o grupo de instâncias us-ig2.

    gcloud compute instance-groups unmanaged create us-ig2 --zone us-east1-b
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME   ZONE       NETWORK MANAGED INSTANCES
    us-ig2 us-east1-b                 0

  5. Defina uma porta nomeada para o grupo de instâncias.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports ssl-lb:443 \
        --zone us-east1-b
    

  6. Adicione ig-us-east1-1 e ig-us-east1-2 a us-ig2.

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
         --instances ig-us-east1-1,ig-us-east1-2 \
         --zone us-east1-b
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

Agora você tem um grupo de instâncias em cada uma das duas regiões, cada uma com duas instâncias.

Configurar o balanceador de carga

Console


Criar o balanceador de carga e configurar um serviço de back-end

  1. Acesse a página "Balanceamento de carga" no Google Cloud Platform Console.
    Acessar a página "Balanceamento de carga"
  2. Clique em Criar balanceador de carga.
  3. Em Balanceamento de carga TCP, clique em Iniciar configuração.
  4. Em Somente voltado para a Internet ou interno, selecione Da Internet para minhas VMs.
  5. Em Fim da conexão, selecione Sim (proxy SSL).
  6. Clique em Continuar.
  7. Defina o Nome como my-ssl-lb.
  8. Clique em Configuração de back-end.
  9. O Nome do serviço de back-end aparece como my-ssl-lb.
  10. Defina o Protocolo como SSL.
  11. Em Novo back-end, selecione o grupo de instâncias us-ig1.
  12. Defina os Números de porta como 443.
  13. Não altere as outras configurações.
  14. Clique em Adicionar back-end.
  15. Selecione o grupo de instâncias us-ig2.
  16. Defina os Números de porta como 443.
  17. Em Verificação de integridade, selecione Criar verificação de integridade.
    1. Defina o Nome da verificação de integridade como my-ssl-health-check.
    2. Defina o Protocolo como SSL.
    3. Deixe as outras configurações inalteradas.
    4. Clique em Salvar e continuar.
  18. Verifique se há uma marca de seleção verde ao lado de Configuração de back-end no Google Cloud Platform Console. Se não houver, verifique se você concluiu todas as etapas acima.

Configurar serviços de front-end

  1. Clique em Configuração de front-end.
  2. Em Novo IP e nova porta de front-end, insira um Nome como my-ssl-lb-forwarding-rule.
  3. Em Endereço IP, selecione Criar endereço IP.
    1. Insira um Nome como ssl-lb-static-ip.
    2. Clique em Reservar.
  4. Em Certificado, selecione Criar um novo certificado.
    1. Insira um Nome como my-ssl-cert.
    2. Nos campos apropriados, faça upload do seguinte:
      • Certificado de chave pública (arquivo .crt)
      • Cadeia de certificados (arquivo .csr)
      • Chave privada (arquivo .key).
    3. Para adicionar outro certificado SSL, clique em Adicionar certificado. Depois, escolha essa opção no menu suspenso Certificados ou selecione Criar um novo certificado e siga as instruções acima.
    4. Ative o protocolo de proxy se desejar.
    5. Clique em Criar.
  5. Clique em Concluir.
  6. Clique em Adicionar IP e porta de front-end.
  7. Insira um Nome como my-ssl-lb-ipv6-forwarding-rule.
  8. Defina a Versão IP como IPv6.
  9. Em Endereço IP, selecione Criar endereço IP.
    1. Insira um Nome como ssl-lb-static-ipv6.
    2. Clique em Reservar.
  10. Em Certificado, selecione my-ssl-cert.
  11. Clique em Concluir.
  12. Verifique se há uma marca de seleção verde ao lado de Configuração de front-end no console do Google Cloud Platform. Se não houver, verifique se você concluiu todas as etapas acima.

Revisar e finalizar

  1. Clique em Revisar e finalizar.
  2. Verifique suas configurações.
  3. Clique em Criar.

gcloud


Criar verificação de integridade

gcloud compute health-checks create ssl my-ssl-health-check --port 443

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-ssl-health-check].
NAME                PROTOCOL
my-ssl-health-check SSL

Criar um serviço de back-end

gcloud compute backend-services create my-ssl-lb \
    --protocol SSL \
    --health-checks my-ssl-health-check \
    --timeout 5m \
    --global

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].
NAME      BACKENDS PROTOCOL
my-ssl-lb          SSL

Como alternativa, você pode configurar a comunicação não criptografada do balanceador de carga para as instâncias com --protocol TCP.

Adicionar grupos de instância ao serviço de back-end

gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global

Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].

gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global

Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].

Configurar recursos de certificado SSL

Provavelmente, você já tem pelo menos um certificado SSL para fazer upload. Se não tiver, consulte Certificados SSL. Ao usar vários certificados SSL, é necessário criá-los um de cada vez.

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

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/ssl-cert1].
NAME      CREATION_TIMESTAMP
ssl-cert1 2016-02-20T20:53:33.584-08:00

Configurar um proxy SSL de destino

O balanceamento de carga SSL é compatível com a criação de um proxy SSL de destino que tenha de um a 10 certificados SSL. Antes de executar este comando, é necessário criar um recurso de certificado SSL para cada certificado.

Se quiser usar o cabeçalho proxy, defina-o como PROXY_V1 em vez de none.

gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
    --backend-service my-ssl-lb \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...] \
    --proxy-header NONE

Criado [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy]. NAME PROXY_HEADER SERVICE SSL_CERTIFICATES my-ssl-lb-target-proxy NONE my-ssl-lb ssl-cert1

Reservar endereços IPv4 e IPv6 globais e estáticos

Esses endereços IP são os que seus clientes usarão para acessar o serviço de carga balanceada.

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

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ip].
NAME                 REGION ADDRESS               STATUS
ssl-lb-static-ip            [LB_STATIC_IP]        RESERVED

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

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ipv6].
NAME                 REGION ADDRESS                 STATUS
ssl-lb-static-ipv6          [LB_STATIC_IPV6]        RESERVED

Configurar regras de encaminhamento global

Crie regras de encaminhamento global associadas ao proxy de destino. Substitua [LB_STATIC_IP] e [LB_STATIC_IPV6] pelos endereços IP que você gerou em Reservar um endereço IP estático e global.

gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IP] \
    --ports 443

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].
NAME                         REGION IP_ADDRESS     IP_PROTOCOL TARGET
my-ssl-lb-forwarding-rule           [LB_STATIC_IP] SSL         my-ssl-lb-target-proxy

gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 443

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-ipv6-forwarding-rule].
NAME                           REGION    IP_ADDRESS       IP_PROTOCOL TARGET
my-ssl-lb-ipv6-forwarding-rule           [LB_STATIC_IPV6] SSL         my-ssl-lb-target-proxy

Criar uma regra de firewall para o balanceador de carga SSL

Configure o firewall para permitir o tráfego proveniente do balanceador de carga e do verificador de integridade para as instâncias.

Console


  1. Acesse a página "Regras de firewall" do Google Cloud Platform Console.
    Acessar a página "Regras de firewall"
  2. Clique em Criar regra de firewall.
  3. Insira um Nome como allow-ssl-lb-and-health.
  4. Selecione a Rede VPC como default.
  5. Defina o Filtro de origem como IP ranges.
  6. Defina os Intervalos de IPs de origem como 130.211.0.0/22 e 35.191.0.0/16.
  7. Defina as Portas e protocolos permitidos como tcp:443.
  8. Defina as Tags de destino como ssl-lb.
  9. Clique em Criar.

gcloud


gcloud compute firewall-rules create allow-ssl-lb-and-health \
     --source-ranges 130.211.0.0/22,35.191.0.0/16 \
     --target-tags ssl-lb \
     --allow tcp:443

Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-lb-and-health].
NAME                     NETWORK SRC_RANGES                  RULES   SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health default 130.211.0.0/22,35.191.0.0/16 tcp:443          ssl-lb

Testar o balanceador de carga

No navegador da Web, conecte-se ao endereço IP estático por HTTPS. Nesta configuração de teste, as instâncias estão usando certificados autoassinados. Portanto, você verá um aviso no navegador na primeira vez que acessar uma página. Clique no aviso para ver a página real. Substitua [IP_ADDRESS] pelo endereço IPv4 ou IPv6 que você criou anteriormente.

https://[IP_ADDRESS]

Você verá um dos hosts da região mais próxima de você. Recarregue a página até ver a outra instância nessa região. Para ver instâncias da outra região, interrompa as instâncias na região mais próxima.

Você também pode usar curl da linha de comando da sua máquina local. Se você estiver usando um certificado autoassinado no proxy SSL, também será necessário especificar -k. Com a opção curl -k, o curl funciona quando você tem um certificado autoassinado ou quando não tem nenhum. Se você tiver um certificado normal, remova esse parâmetro. Use o parâmetro -k somente para testar seu próprio site. Em circunstâncias normais, um certificado válido é uma medida de segurança importante. Não ignore os avisos de certificados.

Substitua [IP_ADDRESS] pelo endereço IPv4 ou IPv6 que você criou anteriormente.

curl -k https://[IP_ADDRESS]

Comandos adicionais de proxy SSL

Listar proxies SSL de destino

Console


Acesse a página "Lista de proxies de destino" no Google Cloud Platform Console.
Acessar a página "Lista de proxies de destino"

gcloud


gcloud compute target-ssl-proxies list

NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb ssl-cert1

Descrever proxies SSL de destino

Console


  1. Acesse a página "Lista de proxies de destino" no Google Cloud Platform Console.
    Acessar a página "Lista de proxies de destino"
  2. Clique no nome de seu proxy SSL de destino.

gcloud


gcloud compute target-ssl-proxies describe [PROXY_NAME]

creationTimestamp: '2016-02-20T20:55:17.633-08:00'
id: '9208913598676794842'
kind: compute#targetSslProxy
name: my-ssl-lb-target-proxy
proxyHeader: NONE
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy
service: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb
sslCertificates:
- https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/ssl-cert1

Excluir proxy SSL de destino

Para excluir um proxy de destino, primeiro é preciso excluir quaisquer regras de encaminhamento global que fazem referência a ele.

Console


  1. Acesse a página "Lista de regras de encaminhamento global" no Google Cloud Platform Console.
    Acessar a página "Lista de regras de encaminhamento global"
  2. Marque a caixa de seleção ao lado de sua regra de encaminhamento global.
  3. Clique em Excluir.
  4. Acesse a página "Lista de proxies de destino" no Google Cloud Platform Console.
    Acessar a página "Lista de proxies de destino"
  5. Marque a caixa de seleção ao lado de seu proxy SSL de destino.
  6. Clique em Excluir.

Como alternativa, você pode excluir todos os componentes do balanceador de carga fazendo o seguinte:

  1. Acesse a página "Balanceamento de carga" no Google Cloud Platform Console.
    Acessar a página "Balanceamento de carga"
  2. Clique no ícone de lixeira no lado direito da linha desejada.
  3. Clique em Excluir balanceador de carga para confirmar.

gcloud


  1. Exclua a regra de encaminhamento global.

    gcloud compute forwarding-rules delete my-ssl-lb-forwarding-rule \
        --global
    

    The following global forwarding rules will be deleted:
     - [my-ssl-lb-forwarding-rule]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].

  2. Exclua o proxy SSL.

    gcloud compute target-ssl-proxies delete my-ssl-lb-target-proxy
    

    The following target ssl proxies will be deleted:
     - [my-ssl-lb-target-proxy]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Atualizar um serviço de back-end para o proxy SSL de destino

Você pode usar o comando update para apontar o proxy SSL em um serviço de back-end diferente. Neste exemplo, vamos criar um novo serviço de back-end e indicar o proxy a ele. Depois, faremos uma atualização e indicaremos o proxy de volta ao serviço de back-end original.

Console


Use a ferramenta de linha de comando gcloud para esta etapa.

gcloud


  1. Crie um segundo serviço de back-end usando a mesma verificação de integridade.

    gcloud compute backend-services create my-other-backend-service \
        --protocol SSL \
        --health-checks my-ssl-health-check \
        --global
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-other-backend-service].
    NAME                     BACKENDS PROTOCOL
    my-other-backend-service          SSL

  2. Aponte o proxy SSL para o novo back-end.

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-other-backend-service
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

  3. Como o serviço de back-end não tem instâncias, se você tentar usar o proxy agora, não verá suas páginas da Web. Para continuar o teste da configuração original, aponte o proxy SSL para o primeiro serviço de back-end.

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-ssl-lb
    

    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Atualizar o recurso de certificado SSL para o proxy SSL de destino

Utilize este comando para substituir o certificado SSL no proxy SSL. Você precisa já ter criado qualquer outro recurso de certificado SSL necessário.

Console


  1. Acesse a página Balanceamento de carga no Console do Google Cloud Platform.
    Acessar a página "Balanceamento de carga"
  2. Clique em Editar ao lado de seu balanceador de carga.
  3. Clique em Configuração de front-end.
  4. No menu suspenso Certificado, selecione o novo certificado.
  5. Clique em Add certificate se precisar adicionar mais certificados.
  6. Clique em Concluir.

gcloud


Com até dez certificados SSL:

gcloud compute target-ssl-proxies set-ssl-certificates {PROXY_NAME] \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...]

Atualizado [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Parâmetros opcionais

Protocolo PROXY para manter informações de conexão do cliente

O Google Cloud Load Balancing com proxy SSL termina conexões SSL do cliente e cria conexões novas para as instâncias. Portanto, as informações originais de porta e IP do cliente não são mantidas por padrão.

Caso queira manter e enviar essas informações para suas instâncias, você precisará ativar o protocolo PROXY (versão 1), no qual um cabeçalho adicional que contém as informações de conexão original, incluindo endereço IP de origem, endereço IP de destino e números de porta, é adicionado e enviado à instância como uma parte da solicitação.

Você também pode definir esse parâmetro para verificações de integridade TCP e SSL.

O cabeçalho do protocolo PROXY costuma ser uma única linha de texto legível pelo usuário com o seguinte formato:

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

Veja abaixo um exemplo do protocolo PROXY:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

Onde o IP do cliente é 192.0.2.1, o IP do balanceamento de carga é 198.51.100.1, a porta do cliente é 15221 e a porta de destino é 443.

Nos casos em que o IP do cliente não é conhecido, o balanceador de carga vai gerar um cabeçalho de protocolo PROXY no seguinte formato:

PROXY UNKNOWN\r\n

Atualizar cabeçalho do protocolo PROXY para o proxy

Use este comando para alterar o cabeçalho do protocolo PROXY para um proxy SSL de destino existente.

Console


  1. Acesse a página Balanceamento de carga no Console do Google Cloud Platform.
    Acessar a página "Balanceamento de carga"
  2. Clique em Editar para seu balanceador de carga.
  3. Clique em Configuração de front-end.
  4. Altere o valor do campo Protocolo de proxy.
  5. Clique em Update to save your changes.

gcloud


gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
    --proxy-header [NONE | PROXY_V1]

Diminuição da conexão

Você pode ativar a diminuição da conexão em serviços de back-end para garantir interrupção mínima aos usuários quando uma instância que está veiculando tráfego é encerrada, removida manualmente ou removida por um autoescalador. Para saber mais sobre a diminuição da conexão, leia a documentação Ativação da diminuição da conexão.

Componentes do balanceador de carga

Verificação de integridade

As verificações de integridade determinam quais instâncias podem receber novas conexões. Configure uma verificação TCP, SSL, HTTP ou HTTPS para determinar a integridade das suas instâncias.

  • Se o serviço em execução nas instâncias de back-end for baseado em HTTP, use uma verificação de integridade de HTTP.
  • Se o serviço em execução nas instâncias de back-end for baseado em HTTPS, use uma verificação de integridade de HTTPS.
  • Se o serviço em execução nas instâncias de back-end usar SSL, use uma verificação de integridade de SSL.
  • A menos que você tenha uma razão explícita para utilizar um tipo diferente de verificação de integridade, use uma do tipo TCP.

Regras de firewall da verificação de integridade

As sondagens da verificação de integridade para as instâncias de carga balanceada vêm de endereços nos intervalos 130.211.0.0/22 e 35.191.0.0/16. É necessário que as regras de firewall permitam essas conexões na porta relevante.

A seção Criar uma regra de firewall para o balanceador de carga SSL aborda essa etapa.

Consulte a página das Verificações de integridade para saber mais sobre elas.

Serviço de back-end

Um serviço de back-end define a capacidade, a utilização máxima e a verificação de integridade dos grupos de instâncias contidos nele.

  • Os serviços de back-end direcionam o tráfego de entrada a um ou mais back-ends anexados (dependendo do modo de balanceamento de carga, discutido mais adiante). Cada back-end consiste em um grupo de instâncias e uma configuração adicional para equilibrar o tráfego entre as instâncias no grupo de instâncias. Cada grupo de instâncias é composto por uma ou mais instâncias.
  • Cada serviço de back-end também especifica quais verificações de integridade serão realizadas para as instâncias em todos os grupos de instância adicionados ao serviço de back-end.
  • A duração das conexões de proxy SSL ociosas por meio do balanceador de carga é limitada pelo tempo limite do serviço de back-end.

Quando você configura um serviço de back-end, é necessário adicionar grupos de instâncias e especificar um modo de balanceamento que determina quanto tráfego o balanceador de carga pode enviar às instâncias de cada grupo de instâncias. Depois que o limite é alcançado para um grupo de instâncias específico, as solicitações adicionais são enviadas ao grupo de instâncias mais próximo do usuário, desde que tenha capacidade.

O proxy SSL é compatível com os seguintes modos de balanceamento:

  • UTILIZATION (padrão): as instâncias podem aceitar tráfego desde que a utilização média atual da CPU do grupo de instâncias esteja abaixo de um valor especificado. Para definir esse valor, use o parâmetro --max-utilization e passe um valor entre 0.0 (0%) e 1.0 (100%). O padrão é 0.8 (80%).
  • CONNECTION: as instâncias podem aceitar tráfego desde que o número de conexões esteja abaixo de um valor especificado. Esse valor pode ser um dos seguintes:
    • --max-connections: número máximo de conexões em todas as instâncias de back-end no grupo de instâncias.
    • --max-connections-per-instance: número máximo de conexões com as quais uma única instância pode lidar. As solicitações são encaminhadas desde que a média do grupo não ultrapasse esse número.

Você pode especificar --max-connections ou --max-connections-per-instance mesmo se definir o modo de balanceamento para UTILIZATION. Se --max-utilization e um parâmetro de conexão forem especificados, o grupo será considerado em plena utilização quando qualquer limite for atingido.

Certificado SSL e chave

Se você não tiver uma chave privada e um certificado assinado, poderá criar e usar um certificado autoassinado para fins de teste ou conseguir um certificado real de uma autoridade. Veja certificados SSL para mais informações. Não use um certificado autoassinado no balanceador de carga para fins de produção.

Consulte Certificados SSL para mais informações.

Regra de encaminhamento global

Crie uma regra de encaminhamento global para encaminhar portas e IPs específicos para o proxy SSL de destino. Quando o tráfego do cliente chega ao endereço IP externo, essa regra de encaminhamento indica à rede para enviar esse tráfego ao seu proxy SSL.

Consulte Regras de encaminhamento global para mais informações.

Recomendações

  • Você deve configurar o balanceador de carga para preceder um cabeçalho de versão 1 do protocolo PROXY caso precise manter as informações de conexão do cliente.
  • Se o tráfego for HTTPS, é preciso usar Balanceamento de carga HTTPS e não proxy SSL para balanceamento de carga.

Solução de problemas

As páginas não são carregadas do IP de um balanceador de carga

Verificar a integridade das instâncias

Verifique se as instâncias são ÍNTEGRAS.

gcloud compute backend-services get-health my-ssl-lb
---
backend: https://www.googleapis.com/resourceviews/v1/projects/[PROJECT_ID]/zones/us-central1-b/resourceViews/us-ig1
status:
  kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2
status:
  kind: compute#backendServiceGroupHealth

Confirmar se sua regra de firewall está correta

  • Tanto o verificador de integridade quanto o balanceador de carga precisam que 130.211.0.0/22 e ,35.191.0.0/16 estejam abertos.
  • Se você está fazendo SSL entre o balanceador de carga e as instâncias, é preciso fazer uma verificação de integridade SSL. Nesse caso, tcp:443 precisa ser permitido pelo firewall de 130.211.0.0/22 e 35.191.0.0/16. Se você está fazendo TCP para as instâncias, faça uma verificação de integridade TCP e abra tcp:80 de 130.211.0.0/22 e 35.191.0.0/16.
  • Se você está aproveitando as tags da instância, verifique se a tag está listada como em TARGET_TAGS na regra de firewall e verifique se todas as suas instâncias têm essa tag. Neste exemplo, as instâncias são marcadas com ssl-lb.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                  RULES                        SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health  default 130.211.0.0/22,35.191.0.0/16 tcp:443                               ssl-lb

Tentar alcançar instâncias individuais

Defina temporariamente uma regra de firewall que permita acessar suas instâncias individualmente e depois tente carregar uma página a partir de uma instância específica.

  1. Abra o firewall para permitir o tráfego de qualquer origem para as instâncias marcadas.

    gcloud compute firewall-rules create allow-ssl-0-0-0-0   \
        --source-ranges 0.0.0.0/0   \
        --target-tags ssl-lb    \
        --allow tcp:443
    

    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].
    NAME              NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-ssl-0-0-0-0 default 0.0.0.0/0  tcp:443          ssl-lb

  2. Procure o endereço EXTERNAL_IP de uma das instâncias.

    gcloud compute instances list
    

    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING

  3. Em seguida, acesse uma ou mais das suas instâncias diretamente do navegador.

    https://[EXTERNAL_IP]
    
  4. Se não for possível acessar suas instâncias por este método, verifique se o software está funcionando corretamente. Se estiver, verifique se a sua regra de firewall do balanceador de carga está correta.

    gcloud compute firewall-rules describe allow-ssl-lb-and-health
    

    allowed:
    - IPProtocol: tcp
      ports:
      - '443'
    creationTimestamp: '2016-02-20T22:27:15.094-08:00'
    description: ''
    id: '5304629236729177644'
    kind: compute#firewall
    name: allow-130-211-0-0-22-ssl
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-lb-and-health
    sourceRanges:
    - 130.211.0.0/22,35.191.0.0/16
    targetTags:
    - ssl-lb

  5. Quando tiver certeza de que as instâncias estão funcionando, remova a regra de firewall "de qualquer lugar".

    gcloud compute firewall-rules delete allow-ssl-0-0-0-0
    

    The following firewalls will be deleted:
     - [allow-ssl-0-0-0-0]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].

Perguntas frequentes

Quando devo usar balanceamento de carga HTTPS em vez de balanceamento de carga de proxy SSL?

O proxy SSL pode lidar com tráfego HTTPS, porém, o balanceamento de carga HTTPS, com seus recursos adicionais, é a melhor escolha na maioria dos casos.

O balanceamento de carga HTTPS tem a seguinte funcionalidade adicional:

  • negocia HTTP/2 e SPDY/3.1
  • rejeita solicitações ou respostas HTTP inválidas
  • encaminha solicitações para diferentes grupos de instâncias com base no caminho e no host URL
  • integra-se ao Cloud CDN
  • espalha a carga de solicitação de maneira mais uniforme entre as instâncias, proporcionando melhor uso da instância. A carga HTTPS balanceia cada solicitação separadamente, ao passo que o proxy SSL envia todos os bytes da mesma conexão SSL ou TCP para a mesma instância.

O proxy SSL para o Google Cloud Load Balancing pode ser usado para outros protocolos que usam SSL, como Websockets e IMAP sobre SSL.

Posso visualizar o endereço IP original da conexão para a camada de balanceamento de carga global?

Sim. Você pode configurar o balanceador de carga para preceder um cabeçalho de versão 1 do protocolo PROXY para manter as informações originais de conexão do cliente. Consulte Atualizar cabeçalho do protocolo proxy para o proxy para saber mais.

Monitore seus recursos de onde você estiver

Instale o app do Google Cloud Console para ajudar você a gerenciar seus projetos.

Enviar comentários sobre…

Compute Engine Documentation