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

3312e69c63b02f73.png

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

  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 é 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.
  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 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:

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

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 "ok", conforme a captura de tela fornecida.

f1589df43bf9e3e8.png

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 b47cd48c7c1ccfc3.png está espelhada.

Selecione "Revisar e finalizar" para corresponder à 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 e verde, conforme a captura de tela fornecida.

131bbfc955d6166c.png

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

53d7463fe354fe66.png

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

4d8f04264b44d03c.png

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