Como configurar o balanceamento de carga do proxy SSL

Neste documento, você vê instruções para configurar o balanceamento de carga do proxy SSL. Antes de começar, leia os Conceitos de balanceamento de carga do proxy SSL para mais informações sobre como ele funciona.

Como configurar o balanceamento de carga SSL

Veja neste exemplo como configurar o balanceamento de carga SSL global para um serviço simples em duas regiões: us-central1 e us-east1. Você fará a configuração do seguinte:

  1. Quatro instâncias espalhadas por duas regiões
  2. grupos de instâncias para conter as instâncias
  3. Os componentes de back-end a seguir:
    • 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. Os componentes de front-end a seguir:
    • Um recurso de certificado SSL. É possível usar um certificado autogerenciado, em que você fornece o próprio certificado SSL, ou um gerenciado pelo Google, em que o Google emite um certificado para seu domínio. Para mais informações, consulte Tipos de certificados 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.
  6. Opcional: uma política de SSL para controlar os recursos SSL que o balanceador de carga do proxy SSL negocia com clientes.

Depois disso, você testará a 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 gerenciadas com base em modelos de instância. No entanto, a configuração desta página é mais rápida para os testes iniciais.

Criar instâncias

Para fins de teste, instale o Apache em quatro instâncias, duas em cada um dos dois grupos de instâncias. Normalmente, não se usa o balanceamento de carga SSL no tráfego HTTP, mas o Apache é muito utilizado e fácil de configurar para testes.

Crie essas instâncias com a tag ssl-lb, que a regra de firewall usará posteriormente.

Console


Criar instâncias

  1. Acesse a página "Instâncias de VMs" no Console do Google Cloud Platform.
    Acessar a página "Instâncias de VMs"
  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, segurança, discos, rede, locatário único para ver 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 da porta e 443 como Números de porta.
  6. Em Definição de instância, clique em Selecionar instâncias atuais.
  7. Em Instâncias de VM, selecione ig-us-central1-1 e ig-us-central1-2.
  8. Não altere as outras configurações.
  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 ambas as regiões, cada um 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 Console do Google Cloud Platform.
    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 Várias regiões ou região única, selecione **Várias regiões (ou ainda não tenho certeza).
  6. Defina o Nome do balanceador de carga como my-ssl-lb.
  7. Clique em Configuração do back-end.
  8. Deixe o Protocolo definido como TCP ou, se preferir, selecione *SSL.
  9. Aceite os valores padrão de Porta nomeada e Tempo limite.
  10. Deixe o Tipo de back-end definido como Grupos de instâncias.
  11. Em Novo back-end, selecione o grupo de instâncias us-ig1.
  12. Defina Números de porta como 443.
  13. Não altere as outras configurações.
  14. Em Novo back-end, selecione o grupo de instâncias us-ig2.
  15. Defina Números de porta como 443.
  16. Não altere as outras configurações.
  17. Clique em Concluído.
  18. 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.
  19. Veja se há uma marca de seleção verde ao lado de Configuração do back-end no Console do Google Cloud Platform. Se não houver, verifique se você concluiu todas as etapas acima.

Configurar serviços de front-end

  1. Clique em Configuração do front-end.
  2. Em Novo IP e nova porta de front-end, insira my-ssl-lb-forwarding-rule como Nome.
  3. Defina o Protocolo como SSL.
  4. Em Endereço IP, selecione Criar endereço IP.
    1. Em Nome, insira ssl-lb-static-ip.
    2. Clique em Reservar.
  5. Em Certificado, selecione Criar um novo certificado.
  6. Em Nome, insira my-ssl-cert.
  7. Se você escolher Fazer upload do meu certificado, siga estas etapas:
    1. Nos campos apropriados, faça upload do seguinte:
      • Certificado de chave pública (arquivo .crt)
      • Cadeia de certificados (arquivo .csr)
      • Chave privada (arquivo .key)
    2. 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.
    3. Ative o Protocolo de proxy se quiser.
    4. Clique em Criar.
  8. Se você escolher Criar um certificado gerenciado pelo Google, insira um Domínio.
  9. Clique em Concluído.
  10. Clique em Adicionar IP e porta de front-end.
  11. Em Nome, insira my-ssl-lb-ipv6-forwarding-rule.
  12. Defina a Versão IP como IPv6.
  13. Em Endereço IP, selecione Criar endereço IP.
    1. Em Nome, insira ssl-lb-static-ipv6.
    2. Clique em Reservar.
  14. Em Certificado, selecione my-ssl-cert.
  15. Clique em Concluído.
  16. Para adicionar recursos de certificado além do certificado SSL principal:
    1. Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções acima.
  17. Clique em Concluído.
  18. Se preferir, crie uma política de SSL:
    1. Em Política de SSL, selecione Criar política.
    2. Preencha o campo Nome com my-ssl-policy.
    3. Selecione TLS 1.0 em Versão mínima de TLS.
    4. Selecione MODERNO em Perfil. Serão exibidos Recursos ativados e Recursos desativados.
    5. Clique em Criar.
  19. Veja se há uma marca de seleção verde ao lado de Configuração do 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

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

Se você usa certificados SSL autogerenciados e não tem uma chave privada e um certificado assinado, crie e utilize um certificado autoassinado (em inglês) para fins de teste.

Para criar um recurso de certificado SSL autogerenciado:

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/my-ssl-cert].
NAME      CREATION_TIMESTAMP
my-ssl-cert 2016-02-20T20:53:33.584-08:00

Para criar um recurso de certificado SSL gerenciado pelo Google:

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]

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.

Defina o cabeçalho do proxy como PROXY_V1 em vez de none se quiser ativá-lo. Se quiser, anexe uma política de SSL ao proxy de destino. Primeiro, crie a política.

gcloud compute ssl-policies create my-ssl-policy \
    --profile MODERN --min-tls-version 1.0

Depois, anexe a política ao proxy de destino.

gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
    --backend-service my-ssl-lb \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...] \
    --ssl-policy my-ssl-policy \
    --proxy-header NONE
Created [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 my-ssl-cert

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

Os clientes usam esses endereços IP para acessar seu serviço com 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 globais

Crie regras de encaminhamento global associadas ao proxy de destino. Substitua [LB_STATIC_IP] e [LB_STATIC_IPV6] pelos endereços IP gerados 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 Console do Google Cloud Platform.
    Acessar a página "Regras de firewall"
  2. Clique em Criar regra de firewall.
  3. Em Nome, insira allow-ssl-lb-and-health.
  4. Em Rede, selecione default.
  5. Em Destinos, selecione Tags de destino especificadas.
  6. Defina Tags de destino como ssl-lb.
  7. Defina Filtro de origem como IP ranges.
  8. Defina Intervalos de IP de origem como 130.211.0.0/22 e 35.191.0.0/16.
  9. Defina Portas e protocolos permitidos como tcp:443.
  10. 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

Se você usa um certificado gerenciado pelo Google, confirme se o status do recurso do certificado é "ATIVO". Para mais informações, consulte Status do recurso de certificado SSL gerenciado pelo Google.

gcloud beta compute ssl-certificates list

Testar o balanceador de carga

No navegador da Web, conecte-se ao endereço IP estático usando o HTTPS. Nesta configuração de teste, as instâncias usam 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 Console do Google Cloud Platform.
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 my-ssl-cert

Descrever proxies SSL de destino

Console


  1. Acesse a página "Lista de proxies de destino" no Console do Google Cloud Platform.
    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/my-ssl-cert

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 Console do Google Cloud Platform.
    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 Console do Google Cloud Platform.
    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 Console do Google Cloud Platform.
    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

Use o comando update para apontar o proxy SSL em um serviço de back-end diferente. Neste exemplo, você cria um novo serviço de back-end e aponta o proxy para ele. Depois, você faz uma atualização e aponta o proxy de volta para o 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á as 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ê já terá criado outros recursos de certificado SSL necessários.

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 o proxy SSL encerra as conexões SSL do cliente e cria novas para as instâncias. Portanto, as informações originais de porta e IP do cliente não são mantidas por padrão.

Para manter e enviar as informações originais de conexão para suas instâncias, ative o protocolo PROXY (versão 1) [em inglês]. Esse protocolo envia à instância como parte da solicitação um cabeçalho extra que contém os endereços IP de origem e de destino e os números de porta.

Também é possível definir o protocolo PROXY das verificações de integridade SSL e TCP.

Normalmente, o cabeçalho do protocolo PROXY é uma linha de texto legível no formato a seguir:

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

Neste exemplo, o endereço IP do cliente é 192.0.2.1, o endereço IP do balanceamento de carga é 198.51.100.1, a porta do cliente é 15221, e a porta de destino é 443:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

Quando o endereço IP do cliente não é conhecido, o balanceador de carga gera um cabeçalho do protocolo PROXY no formato a seguir:

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

Ative a diminuição de conexão em serviços de back-end para garantir o mínimo de interrupção aos usuários quando uma instância que está fornecendo tráfego é encerrada, removida manualmente ou eliminada por um autoescalador. Para saber mais sobre a diminuição de conexão, consulte a documentação de Como ativar a diminuição de 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 de integridade TCP, SSL, HTTP ou HTTPS para determinar a integridade das 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 HTTP.
  • Se o serviço em execução nas instâncias de back-end for baseado em HTTPS, use uma verificação de integridade HTTPS.
  • Se o serviço em execução nas instâncias de back-end usar SSL, utilize uma verificação de integridade SSL.
  • A menos que você tenha uma razão explícita para utilizar um tipo diferente de verificação de integridade, use uma verificação de integridade TCP.

Regras de firewall da verificação de integridade

As sondagens da verificação de integridade nas instâncias 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. Para mais instruções, consulte Criar uma regra de firewall para o balanceador de carga SSL.

Consulte Verificações de integridade para mais informações sobre elas.

Serviço de back-end

Um recurso de serviço de back-end fornece informações de configuração ao balanceador de carga, incluindo as seguintes.

  • 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, abordado mais adiante. Cada back-end consiste em um grupo de instâncias e uma configuração extra para balancear 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 são realizadas nas instâncias dos grupos de instâncias adicionados ao serviço de back-end.
  • A duração das conexões de proxy SSL inativas por meio do balanceador de carga é limitada pelo tempo limite do serviço de back-end.

Ao configurar um serviço de back-end, você precisa adicionar instâncias e especificar um modo de balanceamento que determine a quantidade de tráfego que o balanceador de carga pode enviar às instâncias. Quando o limite é alcançado, solicitações extras são enviadas para a instância que está mais próxima do usuário, se tiver capacidade.

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

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

É possível especificar --max-connections ou --max-connections-per-instance mesmo se você definir o modo de balanceamento como 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 alcançado.

Para mais informações sobre o recurso de serviço de back-end, consulte esta página.

Certificados SSL

Para usar o balanceamento de carga SSL, você precisa criar pelo menos um certificado SSL que possa ser usado pelo proxy de destino do balanceador de carga. É possível configurar o proxy de destino com até 15 certificados SSL.

Esses certificados podem ser gerenciados por você ou pelo Google.

Se você usa certificados SSL autogerenciados e não tem uma chave privada e um certificado assinado, crie e utilize um certificado autoassinado (em inglês) para fins de teste. Para mais informações, consulte Certificados SSL. Não use um certificado autoassinado para fins de produção. Se você usa vários certificados SSL, é necessário criar um recurso de certificado SSL para cada certificado.

Regra de encaminhamento

Crie uma regra de encaminhamento para enviar portas e endereços IP 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 para mais informações.

Recomendações

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

Como fazer monitoramento

Para mais informações sobre como monitorar o balanceamento de carga do proxy SSL, consulte Como monitorar o proxy TCP/SSL.

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 a regra de firewall está correta

  • O verificador de integridade e o balanceador de carga exigem estes endereços IP para permitir o tráfego: 130.211.0.0/22 e 35.191.0.0/16.
  • Se você usa SSL entre o balanceador de carga e as instâncias, utilize as verificações de integridade SSL. Verifique se a regra de firewall permite o tcp:443 dos intervalos de endereços IP de origem 130.211.0.0/22 e 35.191.0.0/16.
  • Se você usa TCP entre o balanceador de carga e as instâncias, utilize as verificações de integridade TCP. Verifique se a regra de firewall permite o tcp:80 dos intervalos de IP de origem 130.211.0.0/22 e 35.191.0.0/16.
  • Se você usa tags de instância, verifique se a tag está listada em TARGET_TAGS na regra de firewall e se ela está aplicada a todas as instâncias. 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 as instâncias por este método, verifique se o software está funcionando corretamente. Se estiver, veja se a 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 "from anywhere".

    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].

A seguir

  • Para mais informações sobre como o balanceamento de carga de proxy SSL funciona, consulte esta página.
  • Para mais informações sobre como o monitoramento do balanceador de carga de proxy SSL funciona, consulte esta página.
  • Para mais informações sobre como as políticas de SSL funcionam, consulte esta página.
  • Para mais informações sobre como configurar políticas de SSL, consulte esta página.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…