1. Introdução
Uma estratégia híbrida é uma solução pragmática para você se adaptar às demandas do mercado em constante mudança e modernizar gradualmente seus aplicativos. O suporte híbrido para balanceadores de carga HTTP(S) externos e internos do Google Cloud estende o balanceamento de carga na nuvem para back-ends locais e em outras nuvens, sendo um fator essencial para sua estratégia híbrida. Essa pode ser uma implantação híbrida temporária para permitir a migração para uma solução moderna baseada na nuvem ou uma instalação permanente da infraestrutura de TI da sua organização.

Neste laboratório, você vai aprender a criar um grupo de endpoints de rede (NEG) usando duas máquinas virtuais acessíveis de um balanceador de carga global HTTP(s) externo. Embora a NEG no laboratório esteja no GCP, o mesmo procedimento é usado para se comunicar com recursos públicos ou locais com capacidade de alcance de IP.
O que você vai aprender
- Criar uma VPC personalizada
- Criar duas máquinas virtuais (VMs) usadas como um grupo de endpoints de rede (NEG)
- Criar um balanceador de carga híbrido, um serviço de back-end e verificações de integridade associadas
- Criar uma regra de firewall que permita o acesso ao balanceador de carga
- O Cloud Router e o NAT serão criados para permitir atualizações de pacotes da Internet.
- Validar a acessibilidade do grupo de endpoints de rede
O que é necessário
- Conhecimento de balanceadores de carga
Configuração de ambiente autoguiada
- Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.



- O nome do projeto é seu identificador pessoal para ele. Desde que você siga as convenções de nomenclatura, é possível usar o que quiser e atualizar a qualquer momento.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como
PROJECT_ID. Se você não gostar dele, crie outro aleatório ou tente usar um próprio para ver se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.
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-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
3. Crie uma rede VPC de modo personalizado.
Nesta tarefa, você vai criar uma nuvem privada virtual (VPC), que é a base da rede.
Rede VPC
No Cloud Shell
gcloud compute networks create hybrid-network-lb --subnet-mode custom
Criar sub-rede
No Cloud Shell
gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1
Criar uma instância do Cloud NAT
Embora não seja um requisito para redes híbridas, a instância de computação precisa de conectividade com a Internet para baixar aplicativos e atualizações.
Nesta tarefa, você vai criar uma instância do Cloud Router e do NAT que permite a conectividade com a Internet para instâncias de VM.
Criar Cloud Router
No Cloud Shell
gcloud compute routers create crnat --network hybrid-network-lb --region us-west1
Criar o Cloud NAT
No Cloud Shell
gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1
4. Criar duas instâncias de VM
Nesta tarefa, você vai criar duas instâncias de VM executando o Apache. Mais tarde no laboratório, essas instâncias de VM vão se tornar um grupo de endpoints de rede (NEG).
No Cloud Shell, crie a primeira instância local, on-prem-neg-1
gcloud compute instances create on-prem-neg-1 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
No Cloud Shell, crie a primeira instância local, on-prem-neg-2
gcloud compute instances create on-prem-neg-2 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
5. Criar um NEG que contenha seu endpoint local
Primeiro, crie NEGs chamados on-prem-neg-1 e on-prem-neg-2. Você também vai especificar que o LB deve considerar que, para fins de roteamento e balanceamento de carga, esses endpoints estão na zona us-west1-a do GCP. Recomendamos que a zona configurada corresponda a qualquer zona associada à região do anexo de interconexão/gateway de VPN para medições de balanceamento de carga com base na proximidade usadas para o balanceamento de carga.
No Cloud Shell, crie on-prem-neg-1
gcloud compute network-endpoint-groups create on-prem-neg-1 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
No Cloud Shell, crie on-prem-neg-2
gcloud compute network-endpoint-groups create on-prem-neg-2 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
No codelab, o grupo de endpoints de rede é uma instância do GCE que executa o Apache no GCP. Como alternativa, especifique um endpoint local ou da Internet como seu endpoint de rede.
No Cloud Shell, identifique os endereços IP do GCE.
gcloud compute instances list | grep -i on-prem
Associe o grupo de endpoints de rede ao endereço IP da instância do GCE identificado na etapa anterior. Para cada NEG, on-prem-neg-1 & on-prem-neg-2.
No Cloud Shell, associe on-prem-neg-1 e atualize x.x.x.x com o IP identificado.
gcloud compute network-endpoint-groups update on-prem-neg-1 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
No Cloud Shell, associe on-prem-neg-2 e atualize x.x.x.x com o IP identificado.
gcloud compute network-endpoint-groups update on-prem-neg-2 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
6. Criar a verificação de integridade HTTP, o serviço de back-end e o firewall
Nesta etapa, você vai criar um serviço de back-end global chamado "on-prem-backend-service". Esse serviço de back-end define como o plano de dados vai enviar tráfego para o NEG.
Primeiro, crie uma verificação de integridade chamada on-prem-health-check para monitorar a integridade de todos os endpoints pertencentes a esse NEG (ou seja, seu endpoint no local).
No Cloud Shell
gcloud compute health-checks create http on-prem-health-check
Crie um serviço de back-end chamado on-prem-backend-service e associe-o à verificação de integridade.
No Cloud Shell
gcloud compute backend-services create on-prem-backend-service \
--global \
--load-balancing-scheme=EXTERNAL \
--health-checks on-prem-health-check
O balanceador de carga HTTP(S) externo e o back-end realizam verificações de integridade originadas das sub-redes 35.191.0.0/16 e 130.211.0.0/22. Portanto, uma regra de firewall é necessária para permitir o roteamento do balanceador de carga para o back-end.
No Cloud Shell
gcloud compute firewall-rules create fw-allow-health-check \
--network=hybrid-network-lb \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80
7. Associar o NEG e o serviço de back-end
Adicione o NEG no local on-prem-neg-1 a esse serviço de back-end.
No Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-1 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Adicione o NEG no local on-prem-neg-2 a esse serviço de back-end.
No Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-2 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Reserve um endereço IP estático IPv4 usado para acessar o endpoint de rede
No Cloud Shell
gcloud compute addresses create hybrid-lb-ip --project=$projectid --global
Concluímos a configuração da CLI. Vamos concluir a configuração no console do Cloud.
8. Criar o balanceador de carga HTTP externo e associar o serviço de back-end
No console do Cloud, navegue até "Balanceamento de carga" e selecione "Criar balanceador de carga".
Identifique o balanceamento de carga HTTP(S) e clique em "Iniciar configuração".

Selecione "Da Internet para minhas VMs", conforme a captura de tela abaixo, que permite o acesso público à sua VM.

Forneça "xlb" como o nome do balanceador de carga e selecione o serviço de back-end criado anteriormente "on-prem-backend-service" e "ok", conforme a captura de tela fornecida.

Selecione "Configuração de front-end", atualize o nome "xlb-fe" e selecione o endereço IPv4 estático criado anteriormente. Verifique se a captura de tela fornecida
está espelhada.
Selecione "Revisar e finalizar" para corresponder à captura de tela fornecida e selecione "Criar".

Validação de integridade do back-end
No console do Cloud, verifique se o back-end "xlb" está íntegro e verde, conforme a captura de tela fornecida.

9. Validar se o NEG pode ser acessado pela Internet
O endereço IP estático externo usado ao criar o balanceador de carga agora é o IP de front-end dos endpoints de rede. Vamos fazer uma validação do endereço IP antes de executar nosso teste final.
No Cloud Shell
gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
Saída (seu endereço IP será diferente)
Saída do Cloud Shell
$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress: IPAddress: 34.96.103.132
Usando o endereço IP de front-end do balanceador de carga global, é possível acessar o back-end do endpoint de rede. No codelab, o endpoint é uma instância do GCE, mas você pode usar isso com endpoints locais, por exemplo.
Na estação de trabalho local, abra um terminal e execute um curl no endereço IP do balanceador de carga.
Na estação de trabalho, execute um curl no endereço IP do front-end. Observe o 200 OK e os detalhes da página, que consistem no nome e na região da instância neg.
myworkstation$ curl -v 34.96.103.132
* Trying 34.96.103.132...
* TCP_NODELAY set
* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)
> GET / HTTP/1.1
> Host: 34.96.103.132
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 10 Aug 2021 01:21:54 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT
< ETag: "24-5c929ae7384f4"
< Accept-Ranges: bytes
< Content-Length: 36
< Content-Type: text/html
< Via: 1.1 google
<
Page on on-prem-neg-2 in us-west1-a
* Connection #0 to host 34.96.103.132 left intact
* Closing connection 0
Parabéns! Você implantou um balanceador de carga híbrido de camada 7 com NEGs.
Parabéns por concluir o codelab!
O que vimos
- Criar uma VPC personalizada
- Criar duas máquinas virtuais (VMs) usadas como um grupo de endpoints de rede (NEG)
- Criar um balanceador de carga híbrido, um serviço de back-end e verificações de integridade associadas
- Criar uma regra de firewall que permita o acesso ao balanceador de carga
- Validar a acessibilidade do grupo de endpoints de rede
10. Etapas de limpeza
Na interface do Console do Cloud, identifique e marque o balanceador de carga "xlb" e selecione "Excluir" em Serviços de rede → Balanceamento de carga. Depois de selecionar, marque "on-premise-backend service" e "on-premise-health-check" e clique em "Excluir".

Na interface do console do Cloud, acesse Compute Engine → Grupos de endpoints da rede. Depois de selecionar, marque "on-prem-neg-1" e "on-prem-neg-2" e clique em "Excluir".

No Cloud Shell, exclua os componentes do laboratório
gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet gcloud compute routers delete crnat --region us-west1 --quiet gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet gcloud compute firewall-rules delete fw-allow-health-check --quiet gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet gcloud compute networks delete hybrid-network-lb --quiet gcloud compute addresses delete hybrid-lb-ip --global --quiet