Como configurar o balanceamento de carga de HTTP(S) interno das VMs do Compute Engine

Neste documento, você aprenderá a configurar o balanceamento de carga HTTP(S) interno para seus serviços em execução nas VMs do Compute Engine.

Antes de começar

Antes de seguir as instruções deste guia, consulte os seguintes documentos:

Como configurar o balanceamento de carga HTTP(S) interno com um serviço baseado em VM

Nesta seção, você verá a configuração necessária para serviços executados em VMs do Compute Engine. As VMs cliente se conectam ao endereço IP e à porta que você configura na regra de encaminhamento. Quando seus aplicativos cliente enviam tráfego para esse endereço IP e porta, as solicitações são encaminhadas para suas máquinas virtuais (VMs, na sigla em inglês) de back-end, de acordo com o mapa de URL do seu balanceador de carga HTTP(S).

No exemplo desta página, é definido explicitamente um endereço IP interno reservado para a regra de encaminhamento do balanceador de carga HTTP(S) interno, em vez de um endereço IP interno temporário ser alocado. Como prática recomendada, reserve endereços IP para regras de encaminhamento.

Como criar um grupo de instâncias gerenciadas

Nesta seção, você verá como criar um modelo e um grupo de instâncias gerenciadas. O grupo de instâncias gerenciadas fornece instâncias de VM que executam os servidores de back-end de um exemplo de balanceador de carga HTTP(S) interno. Para esses servidores de back-end, é feito o balanceamento de carga do tráfego dos clientes. Para fins de demonstração, os back-ends veiculam nomes de host próprios.

Console

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

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

  2. Clique em Criar um grupo de instâncias.
  3. Escolha Novo grupo de instâncias gerenciadas à esquerda.
  4. Em Nome, insira l7-ilb-backend-example.
  5. Em Local, selecione Única zona.
  6. Em Região, selecione us-west1.
  7. Em Zona, selecione us-west1-a.
  8. Em Modelo de instância, selecione Criar outro modelo de instância.
  9. Em Nome, insira l7-ilb-backend-template.
  10. Certifique-se de que o disco de inicialização esteja configurado como uma imagem Debian. Por exemplo, Debian GNU/Linux 9 (stretch). Nestas instruções, são usados comandos 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
    systemctl restart apache2'
    
  12. Em Gerenciamento, segurança, discos, rede, locatário único, clique na guia Rede.

  13. Selecione lb-network em Rede e backend-subnet em Sub-rede.

  14. Adicione as tags de rede allow-ssh e load-balanced-backend.

  15. Clique em Salvar e continuar.

  16. Especifique o número de instâncias que você quer criar no grupo. Se preferir, na seção Escalonamento automático da IU, configure o grupo de instâncias para adicionar ou remover instâncias automaticamente com base no uso de CPU da instância.

  17. Clique em Criar para criar o novo grupo.

gcloud

  1. Crie um modelo de instância de VM com o servidor HTTP usando o comando gcloud compute instance-templates create.

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=lb-network \
    --subnet=backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --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 um grupo de instâncias gerenciadas na zona com o comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template
    

API

Crie o modelo de instância com o método instanceTemplates.insert, substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/instanceTemplates
{
  "name":"l7-ilb-backend-template",
  "properties":{
     "machineType":"n1-standard-1",
     "tags":{
        "items":[
           "allow-ssh",
           "load-balanced-backend"
        ]
     },
     "metadata":{
        "kind":"compute#metadata",
        "items":[
          {
              "key":"startup-script",
              "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
          }
        ]
     },
     "networkInterfaces":[
       {
           "kind":"compute#networkInterface",
           "network":"projects/[project-id]/global/networks/lb-network",
           "subnetwork":"regions/us-west1/subnetworks/backend-subnet",
           "accessConfigs":[
             {
                 "kind":"compute#accessConfig",
                 "type":"ONE_TO_ONE_NAT"
             }
           ]
       }
     ],
     "disks":[
       {
           "kind":"compute#attachedDisk",
           "index":0,
           "boot":true,
           "initializeParams":{
              "sourceImage":"projects/debian-cloud/global/images/family/debian-9"
           },
           "autoDelete":true
       }
     ]
  }
}

Crie um grupo de instâncias gerenciadas em cada zona com o método instanceGroupManagers.insert, substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/v1/projects/[project-id]/zones/{zone}/instanceGroupManagers
{
  "name": "l7-ilb-backend-example",
  "zone": "projects/[project-id]/zones/us-west1-a",
  "instanceTemplate": "projects/[project-id]/global/instanceTemplates/l7-ilb-backend-template",
  "baseInstanceName": "l7-ilb-vm",
  "targetSize": 2
}

Como configurar o balanceador de carga

O exemplo demonstra as seguintes tarefas de configuração do balanceador de carga HTTP interno:

  • Definir a verificação de integridade de HTTP.
  • Definir o serviço de back-end.
  • Adicionar um grupo de instâncias gerenciadas ao serviço de back-end.
  • Criar um mapa de URLs.
    • Certifique-se de consultar um mapa regional de URLs se uma região for definida para o proxy HTTP(S) de destino. Um mapa regional de URLs encaminha solicitações para um serviço de back-end regional com base em regras definidas para o host e caminho de um URL recebido. Este tipo de mapa pode ser referenciado por uma regra de proxy de destino regional somente na mesma região.
  • Criar um proxy de destino.
  • Criar uma regra de encaminhamento.

Console

Selecionar um tipo de balanceador de carga

  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 HTTP(S), clique em Iniciar configuração.
  4. Selecione Apenas entre minhas VMs. Essa configuração implica que o balanceador de carga é interno.
  5. Clique em Continuar.

Preparar o balanceador de carga

  1. Para o Nome do balanceador de carga, insira l7-ilb-map.
  2. Certifique-se de que o Protocolo seja HTTP.
  3. Em Região, selecione us-west1.
  4. Em Rede VPC, selecione lb-network.
  5. Mantenha a janela aberta para continuar.

Reservar uma sub-rede somente proxy

Para balanceamento de carga de HTTP(S) interno, reserve uma sub-rede proxy:

  1. Clique em Reservar uma sub-rede.
  2. Em Nome, insira proxy-subnet.
  3. Em Rede, selecione lb-network.
  4. Em Região, selecione us-west1.
  5. Em Intervalo de endereços IP, insira 10.129.0.0/26.
  6. Clique em Adicionar.

Configurar o serviço de back-end

  1. Clique em Configuração do back-end.
  2. No menu Criar ou selecionar serviços de back-end, selecione Criar um serviço de back-end.
  3. Defina o Nome do serviço de back-end como l7-ilb-backend-service.
  4. Defina o Tipo de back-end para os grupos de instâncias.
  5. No cartão Novo back-end da seção Back-ends, siga estas etapas:
    1. Defina o Grupo de instâncias como l7-ilb-backend-example.
    2. Defina os Números de portas como 80.
    3. Defina o Modo de balanceamento como UTILIZATION.
    4. Clique em Concluído.
  6. Na seção Verificação de integridade, escolha Criar verificação de integridade com os seguintes parâmetros:
    1. Nome: l7-ilb-basic-check
    2. Protocolo: HTTP
    3. Porta: 80
    4. Clique em Salvar e continuar.
  7. Clique em Criar.

Configurar o mapa de URL

  1. Clique em Regras de host e de caminho. Certifique-se de que l7-ilb-backend-service seja o único serviço de back-end para qualquer host e qualquer caminho sem correspondência.

Configurar os componentes de front-end

  1. Clique em Configuração de front-end e edite a seção Novo IP e nova porta de front-end.
  2. Defina Nome como l7-ilb-forwarding-rule.
  3. Defina Protocolo como HTTP.
  4. Defina Sub-rede como backend-subnet.
  5. Escolha Reservar um endereço IP interno e estático no botão pop-up IP interno.
  6. No painel exibido, forneça os seguintes detalhes:
    1. Nome: l7-ilb-ip.
    2. Na seção Endereço IP estático, selecione Quero escolher.
    3. Na seção Endereço IP personalizado, insira 10.1.2.99.
    4. Clique em Reservar.
  7. Defina Porta como 80.
  8. Clique em Concluído.

Concluir a configuração

  1. Clique em Criar.

gcloud

  1. Defina a verificação de integridade HTTP com o comando gcloud compute health-checks create http.

    gcloud beta compute health-checks create http l7-ilb-basic-check \
    --region=us-west1 \
    --use-serving-port
    
  2. Defina o serviço de back-end com o comando gcloud compute backend-services create.

    gcloud beta compute backend-services create l7-ilb-backend-service \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --health-checks=l7-ilb-basic-check \
    --health-checks-region=us-west1 \
    --region=us-west1
    
  3. Adicione back-ends ao serviço de back-end com o comando gcloud compute backend-services add-backend.

    gcloud beta compute backend-services add-backend l7-ilb-backend-service \
    --balancing-mode=UTILIZATION \
    --instance-group=l7-ilb-backend-example \
    --instance-group-zone=us-west1-a \
    --region=us-west1
    
  4. Crie o mapa de URL com o comando gcloud compute url-maps create.

    gcloud beta compute url-maps create l7-ilb-map \
    --default-service=l7-ilb-backend-service \
    --region=us-west1
    
  5. Crie o proxy de destino com o comando gcloud compute target-http-proxies create.

    gcloud beta compute target-http-proxies create l7-ilb-proxy \
    --url-map=l7-ilb-map \
    --url-map-region=us-west1 \
    --region=us-west1
    
  6. Crie a regra de encaminhamento com o comando gcloud compute forwarding-rules create.

    Para redes personalizadas, referencie a sub-rede na regra de encaminhamento. Observe que esta é a sub-rede da VM, não a do proxy.

    gcloud beta compute forwarding-rules create l7-ilb-forwarding-rule \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --network=lb-network \
    --subnet=backend-subnet \
    --address=10.1.2.99 \
    --ports=80 \
    --region=us-west1 \
    --target-http-proxy=l7-ilb-proxy \
    --target-http-proxy-region=us-west1
    

API

Para criar a verificação de integridade, faça uma solicitação POST ao método healthChecks.insert substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/beta/projects/[project-id]/global/healthChecks
{
  "name": "l7-ilb-basic-check",
  "type": "HTTP",
  "httpHealthCheck": {
    "portSpecification": "USE_SERVING_PORT"
  }
}

Para criar o serviço de back-end regional, faça uma solicitação POST ao método regionBackendServices.insert substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/beta/projects/[project-id]/regions/us-west1/backendServices
{
  "name": "l7-ilb-backend-service",
  "backends": [
    {
      "group": "projects/[project-id]/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "UTILIZATION"
    }
  ],
  "healthChecks": [
    "projects/[project-id]/global/healthChecks/l7-ilb-basic-check"
  ],
  "loadBalancingScheme": "INTERNAL_MANAGED"
}

Para criar o mapa de URL, faça uma solicitação POST ao método urlMap.insert substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/beta/projects/[project-id]/global/urlMaps
{
  "name": "l7-ilb-map",
  "defaultService": "projects/[project-id]/regions/us-west1/backendServices/l7-ilb-backend-service"
}

Para criar o proxy HTTP de destino, faça uma solicitação POST ao método targetHttpProxies.insert substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/beta/projects/[project-id]/regions/us-west1/targetHttpProxy
{
  "name": "l7-ilb-proxy",
  "urlMap": "projects/[project-id]/global/urlMaps/l7-ilb-map",
  "region": "us-west1"
}

Para criar a regra de encaminhamento, faça uma solicitação POST ao método forwardingRules.insert substituindo [project-id] pelo ID do projeto.

POST https://www.googleapis.com/compute/beta/projects/[project-id]/regions/us-west1/forwardingRules
{
  "name": "l7-ilb-forwarding-rule",
  "IPAddress": "10.1.2.99",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/[project-id]/regions/us-west1/targetHttpProxies/l7-ilb-proxy",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "subnetwork": "projects/[project-id]/regions/us-west1/subnetworks/backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "networkTier": "PREMIUM",
}

Como testar

Como criar uma instância de VM para testar a conectividade

gcloud compute instances create l7-ilb-client-us-west1-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --network=lb-network \
    --subnet=backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh

Como testar o balanceador de carga

Faça login na instância recém-criada e teste se os serviços HTTP(S) nos back-ends são acessíveis por meio do endereço IP de regra de encaminhamento do balanceador de carga HTTP(S) interno. Verifique também se há o balanceamento de carga do tráfego nas instâncias de back-end.

Como conectar por SSH a cada instância de cliente

gcloud compute ssh l7-ilb-client-us-west1-a \
    --zone=us-west1-a

Como verificar a exibição do nome de host do IP

curl 10.1.2.99

Como executar 100 solicitações e confirmar de balanceamento de carga nelas

for LB_IP in 10.1.2.99; do
    RESULTS=
    for i in {1..100}; do RESULTS="$RESULTS:`curl 10.1.2.99`"; done >/dev/null 2>&1
    IFS=':'
    echo "***"
    echo "*** Results of load-balancing to 10.1.2.99: "
    echo "***"
    echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
    echo
done

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…