Este guia faculta instruções para criar uma configuração de balanceador de carga de rede de encaminhamento externo com back-ends de grupos de destino. O exemplo pressupõe que tem vários servidores Web em instâncias do Compute Engine nos quais quer equilibrar o tráfego. Este cenário configura uma configuração de balanceamento de carga da camada 4 para distribuir o tráfego HTTP por instâncias em bom estado. As verificações de estado HTTP básicas estão configuradas para garantir que o tráfego é enviado apenas para instâncias em bom estado.
Este exemplo equilibra a carga do tráfego HTTP, mas pode usar balanceadores de carga de rede de encaminhamento externo baseados em conjunto de destino para equilibrar a carga do tráfego TCP, UDP e SSL. Antes de começar, leia a Vista geral do balanceador de carga de rede de encaminhamento externo para informações conceptuais sobre os balanceadores de carga de rede de encaminhamento externo.
Antes de começar
Instale a CLI do Google Cloud. Para uma vista geral completa da ferramenta,
consulte o guia da ferramenta gcloud. Pode encontrar comandos relacionados com o
equilíbrio de carga no grupo de comandos gcloud compute.
Também pode obter ajuda detalhada para qualquer comando gcloud através da flag --help:
gcloud compute http-health-checks create --help
Se não executou o Google Cloud CLI anteriormente, execute primeiro o comando
gcloud init para fazer a autenticação.
Além disso, tem de criar um endereço IP externo estático para o balanceador de carga. Se estiver a usar uma imagem fornecida pelo Compute Engine, as instâncias da máquina virtual (VM) são configuradas automaticamente para processar este endereço IP. Se estiver a usar qualquer outra imagem, tem de configurar este endereço como um alias em eth0 ou como um loopback em cada instância.
Este guia pressupõe que está familiarizado com o bash.
Configurar instâncias de VM do Compute Engine
Para este cenário de equilíbrio de carga, vai criar três instâncias de VM do Compute Engine e instalar o Apache nas mesmas. Adiciona uma regra de firewall que permite que o tráfego HTTP alcance as instâncias.
As instâncias que participam como VMs de back-end para equilibradores de carga de rede de encaminhamento direto externos têm de estar a executar o ambiente convidado do Linux, o ambiente convidado do Windows ou outros processos adequados que ofereçam uma funcionalidade equivalente.
Configurar as instâncias de back-end
Consola
- Na Google Cloud consola, aceda à página Instâncias de VM. 
- Clique em Criar instância. 
- Defina Nome como - www1.
- Defina a Região como us-central1. 
- Defina a Zona como us-central1-b. 
- Em Disco de arranque, a imagem do SO predefinida do Debian GNU/Linux 12 (bookworm) já está selecionada. 
- Clique em Opções avançadas. 
- Clique em Rede e configure o seguinte campo: - Para etiquetas de rede, introduza network-lb-tag.
 
- Para etiquetas de rede, introduza 
- Clique em Gestão. Introduza o seguinte script no campo Script de arranque. - #! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html - Clique em Criar.
 
- Crie uma instância denominada - www2com as mesmas definições, exceto com o seguinte script inserido no campo Automatização, Script de arranque.- #! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html 
- Crie uma instância denominada - www3com as mesmas definições, exceto com o seguinte script inserido no campo Automatização, Script de arranque.- #! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
Os comandos abaixo são todos executados no seu sistema local e pressupõem um pedido de comando bash.
Para ver os nomes, os atributos e o estado das imagens do SO, use o comando gcloud compute images list.
- Crie três novas máquinas virtuais numa determinada zona e atribua-lhes todas a mesma etiqueta. Este exemplo define a zona como us-central1-b. A definição do campo - tagspermite-lhe fazer referência a todas estas instâncias de uma só vez, como com uma regra de firewall. Estes comandos também instalam o Apache em cada instância e atribuem a cada instância uma página inicial única.- gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"- gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"- gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
api
Crie a instância www1 na zona us-central1-b com o
  instances.insert
  método
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances
{
  "canIpForward": false,
  "deletionProtection": false,
  "disks": [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "autoDelete": true,
      "deviceName": "www1",
      "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719",
        "diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard",
        "diskSizeGb": "10"
      }
    }
  ],
  "machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
  "metadata": {
    "items": [
      {
        "key": "startup-script",
        "value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
      }
    ]
  },
  "name": "www1",
  "networkInterfaces": [
    {
      "network": "projects/[PROJECT_ID]/global/networks/default",
      "subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default"
    }
  ],
  "tags": {
    "items": [
      "network-lb-tag"
    ]
  }
}
Crie instâncias com os nomes www2 e www3 com as mesmas definições, exceto
substitua www1 nos campos deviceName, value e name.
Criar uma regra de firewall para permitir tráfego externo para estas instâncias de VM
Consola
- Na Google Cloud consola, aceda à página Políticas de firewall. 
- Clique em Criar regra de firewall. 
- Introduza um Nome de - www-firewall-network-lb.
- Selecione a Rede à qual a regra de firewall se aplica (Predefinição). 
- Em Segmentações, selecione Etiquetas de segmentação especificadas. 
- No campo Etiquetas alvo, introduza - network-lb-tag.
- Defina o Filtro de origem como Intervalos IPv4. 
- Defina os Intervalos IPv4 de origem como - 0.0.0.0/0, o que permite tráfego de qualquer origem.
- Em Protocolos e portas especificados, selecione a caixa de verificação TCP e introduza - 80.
- Clique em Criar. Pode demorar algum tempo até que a consola apresente a nova regra de firewall ou pode ter de clicar em Atualizar para ver a regra. 
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \
    --target-tags network-lb-tag --allow tcp:80
api
Crie uma regra de firewall que permita todo o tráfego na sub-rede com o método
  firewalls.insert
  **
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls
{
  "name": "www-firewall-network-lb",
  "direction": "INGRESS",
  "priority": 1000,
  "targetTags": [
    "network-lb-tag"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    }
  ],
  "sourceRanges": [
    "0.0.0.0/0"
  ]
}
Obter os endereços IP externos das suas instâncias e verificar se estão em execução
Consola
- Na Google Cloud consola, aceda à página Instâncias de VM. 
- Veja os endereços das suas instâncias na coluna IP externo. 
- Verifique se as suas instâncias estão em execução procurando uma marca de verificação verde à esquerda do nome da instância. Se não vir uma marca de verificação verde, consulte a página de resolução de problemas gerais para instâncias. 
gcloud
- Liste as suas instâncias para obter os respetivos endereços IP na coluna - EXTERNAL_IP.- gcloud compute instances list 
- Verifique se cada instância está em execução. - Na linha de comandos, execute - curlusando o endereço IP externo de cada instância para confirmar que todas as instâncias respondem.- curl http://[IP_ADDRESS] 
api
Obtenha informações sobre a instância www1 com o método
  instances.get
  
Certifique-se de que o campo status indica RUNNING e procure o endereço IP externo no campo natIP.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1
{
 "kind": "compute#instance",
 "id": "6734015273571474749",
 "creationTimestamp": "2018-11-09T11:45:23.487-08:00",
 "name": "www1",
 "description": "",
 "tags": {
  "items": [
   "network-lb-tag"
  ],
  "fingerprint": "9GVlO4gPawg="
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
 "status": "RUNNING",
 "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b",
 "canIpForward": false,
 "networkInterfaces": [
  {
   "kind": "compute#networkInterface",
   "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
   "subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default",
   "networkIP": "10.128.0.2",
   "name": "nic0",
   "accessConfigs": [
    {
     "kind": "compute#accessConfig",
     "type": "ONE_TO_ONE_NAT",
     "name": "External NAT",
     "natIP": "35.192.37.233",
     "networkTier": "PREMIUM"
    }
   ],
   "fingerprint": "lxD5f5ua_sw="
  }
 ],
 "disks": [
  {
   "kind": "compute#attachedDisk",
   "type": "PERSISTENT",
   "mode": "READ_WRITE",
   "source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1",
   "deviceName": "www1",
   "index": 0,
   "boot": true,
   "autoDelete": true,
   "licenses": [
    "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster"
   ],
   "interface": "SCSI",
   "guestOsFeatures": [
    {
     "type": "VIRTIO_SCSI_MULTIQUEUE"
    }
   ]
  }
 ],
 "metadata": {
  "kind": "compute#metadata",
  "fingerprint": "IyHRmHoJx6E=",
  "items": [
   {
    "key": "startup-script",
    "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html"
   }
  ]
 },
 "serviceAccounts": [
  {
   "email": "674259759219-compute@developer.gserviceaccount.com",
   "scopes": [
    "https://www.googleapis.com/auth/devstorage.read_only",
    "https://www.googleapis.com/auth/logging.write",
    "https://www.googleapis.com/auth/monitoring.write",
    "https://www.googleapis.com/auth/servicecontrol",
    "https://www.googleapis.com/auth/service.management.readonly",
    "https://www.googleapis.com/auth/trace.append"
   ]
  }
 ],
 "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1",
 "scheduling": {
  "onHostMaintenance": "MIGRATE",
  "automaticRestart": true,
  "preemptible": false
 },
 "cpuPlatform": "Intel Haswell",
 "labelFingerprint": "42WmSpB8rSM=",
 "startRestricted": false,
 "deletionProtection": false
}
Repita esta chamada API para www2 e www3.
Configurar o serviço de balanceamento de carga
Em seguida, configure o serviço de balanceamento de carga.
Quando configura o serviço de equilíbrio de carga, as suas instâncias de máquinas virtuais recebem pacotes destinados ao endereço IP externo estático que configura. Se estiver a usar uma imagem fornecida pelo Compute Engine, as suas instâncias são configuradas automaticamente para processar este endereço IP. Se estiver a usar outra imagem, tem de configurar este endereço como um alias em eth0 ou como um loopback em cada instância.
Consola
Não pode usar a Google Cloud consola para criar equilibradores de carga de rede de encaminhamento externo baseados em conjunto de destinos. Em alternativa, use o gcloud ou a API REST.
gcloud
- Crie um endereço IP externo estático para o balanceador de carga - gcloud compute addresses create network-lb-ip-1 \ --region us-central1
- Adicione um recurso de verificação de funcionamento de HTTP antigo - Este exemplo usa as predefinições do mecanismo de verificação de funcionamento, mas também pode personalizar a verificação de funcionamento por si. - gcloud compute http-health-checks create basic-check 
- Adicione um grupo de destino - Adicione um conjunto de destino na mesma região que as instâncias da máquina virtual. Use a verificação de funcionamento criada no passo anterior para este conjunto de destino. Os conjuntos de destino requerem um serviço de verificação de estado para funcionar. - gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-check
- Adicione as suas instâncias ao grupo de destino - gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-b- As instâncias num conjunto de destino têm de pertencer à mesma região, mas podem estar distribuídas por diferentes zonas na mesma região. Por exemplo, pode ter instâncias na zona - us-central1-fe instâncias na zona- us-central1-bnum único conjunto de destino porque estão na mesma região,- us-central1.
- Adicione uma regra de encaminhamento - Adicione uma regra de encaminhamento que sirva em nome de um intervalo de portas e de endereços IP externos que apontam para o seu conjunto de destino. Para o campo - --address, use o endereço IP numérico ou o respetivo nome totalmente qualificado.- gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
api
- Crie um endereço IP externo estático para o balanceador de carga - POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }
- Adicione uma verificação de funcionamento de HTTP antiga - Este exemplo usa as predefinições do mecanismo de verificação do estado de funcionamento, mas também pode personalizá-lo. - POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }
- Adicione um grupo de destinos - Adicione um conjunto de destino na mesma região que as instâncias da máquina virtual. Use a verificação de funcionamento criada no passo anterior para este conjunto de destino. Os conjuntos de destino requerem um serviço de verificação de estado para funcionar. - POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }
- Adicione as suas instâncias ao grupo de destino - POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }- Repita esta chamada API para as instâncias - www2e- www3.- As instâncias num conjunto de destino têm de pertencer à mesma região, mas podem estar distribuídas por diferentes zonas na mesma região. Por exemplo, pode ter instâncias na zona - us-central1-fe instâncias na zona- us-central1-bnum único conjunto de destino porque estão na mesma região,- us-central1.
- Adicione uma regra de encaminhamento - POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Enviar tráfego para as suas instâncias
Agora que o serviço de balanceamento de carga está configurado, pode começar a enviar tráfego para a regra de encaminhamento e ver o tráfego disperso para diferentes instâncias.
Procurar o endereço IP externo da regra de encaminhamento
Consola
- Aceda ao separador Regras de encaminhamento na página de balanceamento de carga Avançado
na Google Cloud consola. 
 Aceda ao separador Regras de encaminhamento
- Localize www-rule, a regra de encaminhamento usada pelo balanceador de carga.
- Na coluna Endereço IP para www-rule, tome nota do endereço IP externo indicado.
gcloud
Introduza o seguinte comando para ver o endereço IP externo da www-rule
regra de encaminhamento usada pelo balanceador de carga.
gcloud compute forwarding-rules describe www-rule --region us-central1
api
Veja o endereço IP externo da regra de encaminhamento www-rulecom o
  forwardingRules.get
  método
Na saída, procure o campo IPAddress.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule
{
  "kind": "compute#forwardingRule",
  "id": "5133886346582800002",
  "creationTimestamp": "2018-11-09T14:21:33.574-08:00",
  "name": "www-rule",
  "description": "",
  "region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1",
  "IPAddress": "35.232.228.9",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule",
  "loadBalancingScheme": "EXTERNAL",
  "networkTier": "PREMIUM"
}O ICMP não é suportado para instâncias de back-end
Os balanceadores de carga de rede de encaminhamento externo não enviam pacotes ICMP para instâncias de back-end. Se enviar um pacote ICMP, por exemplo, com ping ou traceroute, a resposta não é proveniente das instâncias de back-end do balanceador de carga.
Google Cloud A infraestrutura pode enviar uma resposta ICMP, mesmo que tenha regras de firewall que proíbam o tráfego ICMP nas instâncias de back-end do balanceador de carga. Não é possível alterar este comportamento.
Usar o comando curl para aceder ao endereço IP externo
A resposta ao comando curl alterna aleatoriamente entre as três instâncias.
Se a sua resposta não tiver êxito inicialmente, pode ter de aguardar aproximadamente
30 segundos para que a configuração seja totalmente carregada e as suas instâncias sejam
marcadas como em bom estado antes de tentar novamente:
$ while true; do curl -m1 IP_ADDRESS; done
O que se segue?
- Para saber como os balanceadores de carga de rede de encaminhamento externo funcionam com pools de destino, consulte a vista geral do balanceador de carga de rede de encaminhamento externo baseado em pools de destino.
- Para saber como os equilibradores de carga de rede de encaminhamento externo funcionam com serviços de back-end regionais em vez de conjuntos de destino, consulte o seguinte:
- Para configurar a proteção avançada contra DDoS de rede para um Network Load Balancer de passagem externo através do Cloud Armor, consulte o artigo Configure a proteção avançada contra DDoS de rede.
- Para saber mais sobre problemas e soluções alternativas quando usa um balanceador de carga de rede de encaminhamento externo para tráfego UDP, consulte o artigo Use UDP with external passthrough Network Load Balancers (Use o UDP com balanceadores de carga de rede de encaminhamento externo).
- Para eliminar recursos para que não lhe sejam faturados, consulte o artigo Limpe uma configuração de equilíbrio de carga.