1. Introdução
Este é o codelab de otimizações avançadas de balanceamento de carga.
Neste codelab, você vai aprender a configurar opções avançadas de balanceamento de carga para o balanceador de carga de aplicativo externo global. Antes de começar, recomendamos que você confira o documento sobre o balanceamento de carga na nuvem ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

Figura 1. O fluxo de trabalho de escolha de um endpoint de destino com o balanceador de carga de aplicativo externo global.
Topologia e casos de uso do codelab

Figura 2. Topologia de roteamento do balanceador de carga HTTP
Neste codelab, você vai configurar dois grupos gerenciados de instâncias. Você vai criar um balanceador de carga HTTPS externo global. O balanceador de carga vai usar vários recursos da lista de recursos avançados compatíveis com o balanceador de carga baseado no Envoy. Depois da implantação, gere uma carga simulada e verifique se as configurações definidas estão funcionando corretamente.
O que você vai aprender
- Como configurar a ServiceLbPolicy para ajustar o balanceador de carga.
O que é necessário
- Conhecimento sobre o balanceamento de carga HTTPS externo. A primeira metade deste codelab é bastante semelhante ao codelab do LB HTTPs externo com gerenciamento avançado de tráfego (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Recomendamos que você faça isso primeiro.
2. Antes de começar
No Cloud Shell, verifique se o ID do projeto está configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
Ativar APIs
Ative todos os serviços necessários
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. criar a rede VPC
Crie uma rede VPC
No Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
Criar regras de firewall da VPC
Depois de criar a VPC, crie uma regra de firewall. A regra de firewall será usada para permitir que todos os IPs acessem o IP externo do site do aplicativo de teste na porta 80 para tráfego http.
No Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
Saída
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
Neste codelab, vamos ajustar a integridade das VMs. Por isso, também vamos criar regras de firewall para permitir o SSH.
No Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Saída
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. Configurar os grupos gerenciados de instâncias
Você precisa configurar grupos gerenciados de instâncias que incluem os padrões para recursos de back-end usados pelo balanceador de carga HTTP. Primeiro, vamos criar modelos de instância que definem a configuração das VMs a serem criadas em cada região. Em seguida, para um back-end em cada região, vamos criar um grupo gerenciado de instâncias que faz referência a um modelo de instância.
Os grupos gerenciados de instâncias podem ser zonais ou regionais no escopo. Neste exercício prático, vamos criar grupos gerenciados de instâncias zonais.
Nesta seção, você pode conferir um script de inicialização pré-criado que será referenciado na criação da instância. Esse script de inicialização instala e ativa recursos de servidor da Web que serão usados para simular um aplicativo da Web. Se quiser, analise o script.
Criar os modelos de instância
A primeira etapa é criar um modelo de instância.
No Cloud Shell
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--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'
Saída
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Agora, verifique se os modelos de instância foram criados com sucesso usando o seguinte comando gcloud:
No Cloud Shell
gcloud compute instance-templates list
Saída
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Criar os grupos de instâncias
Agora precisamos criar um grupo gerenciado de instâncias com base nos modelos de instância criados anteriormente.
No Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
No Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
Podemos verificar se os grupos de instâncias foram criados com sucesso usando o seguinte comando gcloud:
No Cloud Shell
gcloud compute instance-groups list
Saída
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
Verificar a funcionalidade do servidor da Web
Cada instância é configurada para executar um servidor da Web Apache com um script PHP simples que renderiza algo como:
Página veiculada de: us-east1-a-mig-ww2h
Para garantir que os servidores da Web estejam funcionando corretamente, navegue até Compute Engine -> Instâncias de VM. Verifique se as novas instâncias (por exemplo, us-east1-a-mig-xxx) foram criadas de acordo com as definições do grupo de instâncias.
Agora, faça uma solicitação da Web no navegador para garantir que o servidor da Web esteja em execução. Isso pode levar um minuto para iniciar. Na página "Instâncias de VM" do Compute Engine, selecione uma instância criada pelo grupo de instâncias e clique no IP externo (público) dela.
Ou, no navegador, acesse http://<IP_Address>
5. Configurar o balanceador de carga
Criar verificação de integridade
Primeiro, crie uma verificação de integridade básica para garantir que os serviços estejam funcionando corretamente. Vamos criar uma verificação de integridade básica. Há muitas outras personalizações avançadas disponíveis.
No Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Reservar endereço IP externo
Para esta etapa, é necessário reservar um endereço IP estático disponível globalmente que será anexado ao balanceador de carga mais tarde.
No Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Anote o endereço IP reservado.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Criar serviços de back-end
Agora precisamos criar um serviço de back-end para os grupos gerenciados de instâncias que criamos anteriormente.
No Cloud Shell
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
Adicionar MIGs aos serviços de back-end
Agora que criamos os serviços de back-end, precisamos adicionar os grupos gerenciados de instâncias criados anteriormente a cada serviço de back-end.
No Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
No Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Para verificar se os back-ends foram adicionados, execute o comando a seguir.
No Cloud Shell
gcloud compute backend-services list
Saída
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
Criar mapa de URL
Agora vamos criar um mapa de URLs.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
Criar front-end HTTP
A etapa final na criação do balanceador de carga é criar o front-end. Isso vai mapear o endereço IP reservado anteriormente para o mapa de URL do balanceador de carga criado.
No Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
Em seguida, crie uma regra de encaminhamento global que mapeie o endereço IP reservado anteriormente para o proxy HTTP.
No Cloud Shell
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
Neste ponto, você pode confirmar se o balanceador de carga está funcionando com o endereço IP que você anotou anteriormente.
6. Verificar se o balanceador de carga está funcionando
Para verificar se o recurso de balanceamento de carga está funcionando, gere alguma carga. Para isso, vamos criar uma nova VM para simular a carga.
Criar siege-vm
Agora você vai criar a siege-vm, que será usada para gerar carga.
No Cloud Shell
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
Saída
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
Em seguida, use o SSH na VM criada. Depois que ela for criada, clique em SSH para iniciar um terminal e se conectar.
Depois de se conectar, execute o comando a seguir para gerar carga. Use o endereço IP que você reservou anteriormente para o balanceador de carga HTTP externo.
No Cloud Shell
siege -c 20 http://$lb-ipv4-2
Saída
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Verificar a distribuição de carga
Agora que o Siege está em execução, é hora de verificar se o tráfego está sendo distribuído igualmente aos dois grupos gerenciados de instâncias.
Interromper o cerco
Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Para isso, volte ao terminal SSH da instância siege-vm e pressione CTRL+C para interromper a execução do siege.
7. Configurar política de LB de serviço
Criar uma política de LB de serviço
Agora que a configuração básica foi concluída, vamos criar uma política de balanceamento de carga de serviço e testar os recursos avançados. Por exemplo, vamos configurar o serviço para usar algumas configurações avançadas de balanceamento de carga. Neste exemplo, vamos criar uma política para testar o recurso de redução automática de capacidade. Mas fique à vontade para testar outros recursos.
No Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Podemos verificar se a política foi criada com sucesso usando o seguinte comando gcloud:
No Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Saída
NAME http-policy
Anexar política de balanceador de carga de serviço ao serviço de back-end
Agora vamos anexar a nova política ao serviço de back-end atual acima.
No Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Ajustar a integridade do back-end
Neste ponto, a nova política de balanceamento de carga de serviço foi aplicada ao seu serviço de back-end. Portanto, tecnicamente, você pode pular direto para a revisão dos dados. Mas, como parte do codelab, também vamos fazer alguns ajustes adicionais de produção para mostrar como a nova política funciona.
O recurso de diminuição automática da capacidade remove automaticamente um MIG de back-end do balanceador de carga quando o número total de back-ends íntegros cai abaixo de um determinado limite (25%). Para testar esse recurso, vamos acessar as VMs em us-east1-b-mig por SSH e deixá-las em estado não íntegro. Com o limite de 25%, você precisará usar SSH em quatro das VMs e desligar o servidor Apache.
Para isso, escolha quatro VMs e faça SSH nelas clicando em "SSH" para iniciar um terminal e se conectar. Em seguida, execute o comando abaixo.
sudo apachectl stop
Nesse momento, o recurso de redução automática da capacidade será acionado, e us-east1-b-mig não receberá novas solicitações.
9. Verificar se o recurso de redução automática de capacidade está funcionando
Reiniciar o Siege
Para verificar o novo recurso, vamos reutilizar a VM de cerco. Vamos usar SSH para acessar a VM criada na etapa anterior. Depois que ela for criada, clique em SSH para iniciar um terminal e se conectar.
Depois de se conectar, execute o comando a seguir para gerar carga. Use o endereço IP que você reservou anteriormente para o balanceador de carga HTTP externo.
No Cloud Shell
siege -c 20 http://$lb-ipv4-2
Saída
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Nesse ponto, você vai notar que todas as solicitações são enviadas para us-east1-a-mig.
Interromper o cerco
Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Para isso, volte ao terminal SSH da instância siege-vm e pressione CTRL+C para interromper a execução do siege.
10. Etapas de limpeza
Agora que terminamos de usar o ambiente do laboratório, é hora de desativá-lo. Execute os comandos a seguir para excluir o ambiente de teste.
No Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. Parabéns!
Parabéns por concluir o codelab.
O que vimos
- Como criar um balanceador de carga de aplicativo externo com uma política de balanceamento de carga de serviço.
- Configure o serviço de back-end com o recurso de diminuição automática de capacidade.
Próximas etapas
- Teste outros recursos fornecidos pela política de balanceamento de carga de serviço.