Como usar um balanceador de carga híbrido HTTP(s) externo para alcançar um grupo de endpoints de rede

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 em nuvem para back-ends que residem no local e em outras nuvens, além de ser um capacitador importante para sua estratégia híbrida. Isso pode ser temporário 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.

3312e69c63b02f73.png

Neste laboratório, você vai aprender a criar um grupo de endpoints de rede (NEG) usando duas máquinas virtuais acessíveis por um balanceador de carga global HTTP(S) externo. Embora o NEG no laboratório esteja dentro do GCP, o mesmo procedimento é usado para se comunicar com recursos públicos ou locais com acessibilidade 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 as verificações de integridade associadas
  • Criar uma regra de firewall que permita 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 sobre balanceadores de carga

Configuração de ambiente autoguiada

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • O Nome do projeto é o identificador pessoal do projeto. Contanto 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 (não pode ser alterado depois de definido). O console do Cloud gera automaticamente uma string exclusiva. normalmente você não se importa com o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, que normalmente é identificado como PROJECT_ID. Se não gostar, gere outro ID aleatório ou faça um teste e veja se ele está disponível. Então está "congelado" depois que o projeto for criado.
  1. 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 teste sem custo financeiro.

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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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. Criar uma nova rede VPC de modo personalizado

Nesta tarefa, você vai criar uma nuvem privada virtual (VPC), 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 instância do Cloud NAT

Embora não seja um requisito para a rede híbrida, a instância de computação requer conectividade com a Internet para fazer o download de aplicativos e atualizações.

Nesta tarefa, você vai criar um Cloud Router e uma instância NAT que permite a conectividade de Internet com as 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 que executam o Apache. Mais adiante no laboratório,elas se tornarão um grupo de endpoints de rede (NEG,na sigla em inglês).

No Cloud Shell, crie a primeira instância no 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 no 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 no local

Primeiro, crie um NEG chamado on-prem-neg-1 e on-prem-neg-2. Você também especificará que o LB deve considerar que, para fins de roteamento e balanceamento de carga, esses endpoints estão na zona do GCP us-west1-a. 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 baseadas em proximidade usadas para 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. Também é possível especificar um endpoint no local ou na Internet como endpoint de rede

No Cloud Shell, identifique os endereços IP do GCE

gcloud compute instances list | grep -i on-prem

associar o grupo de endpoints da rede ao endereço IP da instância do GCE identificado na etapa anterior; para cada negativo, on-prem-neg-1 & on-prem-neg-2.

No Cloud Shell, associe on-prem-neg-1, 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, 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. Crie a verificação de integridade HTTP, o serviço de back-end e 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, do endpoint local).

No Cloud Shell

gcloud compute health-checks create http on-prem-health-check

Criar um serviço de back-end chamado on-prem-backend-service e associá-lo à 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 externo e o back-end HTTP(S) realizam verificações de integridade originadas das sub-redes 35.191.0.0/16 e 130.211.0.0/22. portanto, é necessária uma regra de firewall 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

Adicionar o NEG on-prem-neg-1 a este 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

Adicionar o NEG on-prem-neg-2 a este 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 seu 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 do console do Cloud.

8. Crie o balanceador de carga HTTP externo e associar o serviço de back-end

No console do Cloud, acesse "Balanceamento de carga" e selecione "Criar balanceador de carga"

Identifique o balanceamento de carga HTTP(S) e clique em "Iniciar configuração"

70ccd168957e89d9.png

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

a55cd31dbeadfecc.png

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 depois "ok" de acordo com a captura de tela fornecida

f1589df43bf9e3e8.png

Selecione "Configuração de front-end" e atualize o nome "xlb-fe". Depois disso, selecione o endereço IPv4 estático criado anteriormente e espelhe a captura de tela fornecida b47cd48c7c1ccfc3.png

Selecione "Analisar e finalizar" e depois fazer a correspondência com a captura de tela fornecida e selecione "Criar"

bfa39f7dc3ad91e1.png

Validação de integridade do back-end

No console do Cloud, verifique se o back-end "xlb" está íntegro, verde de acordo com a captura de tela fornecida

131bbfc955d6166c.png

9. Verificar se o NEG pode ser acessado pela Internet

Lembre-se de que o endereço IP estático externo usado ao criar o balanceador de carga agora é o IP de front-end dos endpoints da rede. Vamos validar o endereço IP antes de executar o 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 cloudshell

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

Com o endereço IP do front-end do balanceador de carga global, é possível acessar o back-end do endpoint da rede. No codelab, o endpoint é uma instância do GCE. No entanto, é possível usá-lo com endpoints no local, por exemplo.

Na estação de trabalho local, inicie 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 "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 L7 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 as verificações de integridade associadas
  • Criar uma regra de firewall que permita 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 "xlb" balanceador de carga e selecione "Excluir" em Serviços de rede → Balanceamento de carga. Depois de selecionar, marque "on-premise-backend service" (serviço de back-end local). &amp; ‘on-premise-health-check&#39; e selecione "Excluir"

53d7463fe354fe66.png

Na interface do console do Cloud, acesse Compute Engine → Grupos de endpoints da rede. Depois de selecionado, marque "on-prem-neg-1" &amp; ‘on-prem-neg-2&#39; e selecione "Excluir"

4d8f04264b44d03c.png

Exclua os componentes do laboratório no Cloud Shell

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