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.
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
- 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 é 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.
- 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:
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. 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"
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 depois "ok" de acordo com a captura de tela fornecida
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
Selecione "Analisar e finalizar" e depois fazer a correspondência com a 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, verde de acordo com a captura de tela fornecida
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). & ‘on-premise-health-check' e selecione "Excluir"
Na interface do console do Cloud, acesse Compute Engine → Grupos de endpoints da rede. Depois de selecionado, marque "on-prem-neg-1" & ‘on-prem-neg-2' e selecione "Excluir"
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