1. Introdução
Com o Private Service Connect, os produtores de serviços podem expor serviços em um ambiente de VPC usando um anexo de serviço e permitir que consumidores em outro ambiente de VPC acessem esses serviços por um endpoint do Private Service Connect. Às vezes, esses serviços de produtor são projetados como clusters de VMs, com cada VM expondo os mesmos serviços em números de porta idênticos. Antes, esses designs de serviço exigiam a implantação de vários endpoints do Private Service Connect no lado do consumidor ou o uso do encaminhamento de IP no lado do produtor para garantir que a VM do produtor correta fosse direcionada.
Agora, o Private Service Connect pode segmentar o destino correto de forma nativa usando o mapeamento de portas. Neste laboratório, você vai aprender sobre os casos de uso em que esse recurso é necessário e como implantar um NEG de mapeamento de portas em uma carga de trabalho do Private Service Connect.
O que você vai aprender
- Casos de uso do mapeamento de portas do Private Service Connect
- Principais benefícios do mapeamento de portas do PSC
- Requisitos de rede
- Crie um serviço de produtor do Private Service Connect usando o mapeamento de portas.
- Criar um endpoint do Private Service Connect
- Fazer chamadas por um endpoint do Private Service Connect para um serviço de produtor
O que é necessário
- Projeto do Google Cloud com permissões de proprietário
2. Casos de uso do mapeamento de portas do Private Service Connect
O recurso de mapeamento de portas usa um NEG (grupo de endpoints de rede) de mapeamento de portas específico para casos de uso do PSC.
Os tipos mais comuns de produtores que podem se beneficiar do uso do mapeamento de portas são os produtores de bancos de dados NoSQL e os produtores do Kafka. No entanto, qualquer produtor que precise de um cluster de VMs que exiba os mesmos serviços em portas idênticas com requisitos específicos de mapeamento de VM pode usar esse recurso.
O produtor define o mapeamento entre uma porta do cliente e uma VM de produtor + porta de destino. O produtor precisa compartilhar essas informações com o consumidor. O consumidor usa as portas predefinidas para identificar exclusivamente qual VM de produtor + porta de destino ele precisa alcançar. A porta usada pelo consumidor é diferente da usada pelo produtor.
Principais benefícios do mapeamento de portas do PSC
- Simples: os produtores implantam componentes do PSC com um mapeamento de portas, e os consumidores implantam um endpoint do PSC. O PSC processa a conversão de endereços de rede automaticamente.
- Econômico:não requer recursos adicionais de PSC nem ciclos de CPU da VM do produtor. O preço é o mesmo de outros tipos de implantações do PSC.
- Alto desempenho:o mapeamento de portas oferece a mesma capacidade de processamento de taxa de linha e baixa latência que outros modos de PSC.
- Escalabilidade e eficiência de IP:um endereço IP da VPC do consumidor pode acessar até 1.000 VMs de produtores e 1.000 mapeamentos de porta
3. Requisitos de rede
- O mapeamento de portas exige o uso de um balanceador de carga de passagem de rede interno como o balanceador de carga do produtor.
- Somente endpoints PSC podem ser usados com o mapeamento de portas, não back-ends PSC nem a interface PSC.
- Os NEGs de mapeamento de portas são construções regionais.
- Os NEGs de mapeamento de portas só podem ser usados em uma conexão PSC. Elas não vão funcionar se a VM cliente chamar a regra de encaminhamento do balanceador de carga do produtor diretamente. Isso é refletido na forma como o serviço de produtor é testado neste codelab.
- O endpoint do PSC e a pilha de serviços do produtor precisam estar em VPCs diferentes.
4. Topologia do codelab
Na VPC do produtor, duas VMs serão criadas para executar dois servidores da Web, um na porta 1000 e outro na porta 2000. Vamos testar cada serviço antes de configurar o NEG do Portmap, o balanceador de carga de passagem de rede interna e a vinculação de serviço.
Na VPC do consumidor, vamos configurar um endpoint do PSC e testar a conectividade com o serviço do produtor em uma VM cliente.
5. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Google 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 nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado 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 do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. 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 Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:
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. Neste codelab, todo o trabalho pode ser feito com um navegador. Você não precisa instalar nada.
6. Antes de começar
Ativar APIs
No Cloud Shell, verifique se o ID do projeto está configurado:
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
Ativar todos os serviços necessários
gcloud services enable compute.googleapis.com
7. Criar rede VPC do produtor
Rede VPC
No Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Criar sub-redes
No Cloud Shell
gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
A sub-rede do PSC será associada ao anexo de serviço PSC para fins de conversão de endereços de rede. Para casos de uso de produção, essa sub-rede precisa ter um tamanho adequado para suportar a quantidade de tráfego de entrada de todos os endpoints PSC conectados. Consulte a documentação de dimensionamento de sub-redes PSC NAT para mais informações.
Criar políticas e regras de firewall de rede
No Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy producer-vpc-policy --network producer-vpc --name network-producer-vpc --global-firewall-policy
Para permitir que o IAP se conecte às suas instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias da VM que você quer que sejam acessíveis usando o IAP.
- Permite o tráfego de entrada do intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para o encaminhamento de TCP.
No Cloud Shell
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy producer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
A regra de firewall a seguir permite o tráfego nas portas TCP 1000-2000 da sub-rede PSC para todas as instâncias na rede. Em um ambiente de produção, essa regra de firewall precisa ser limitada apenas às instâncias associadas ao serviço de produtor específico.
No Cloud Shell
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
A regra de firewall a seguir permite todo o tráfego na sub-rede de serviços nas portas TCP 1000-2000. Essa regra será usada para testar se o serviço de produtor está funcionando adequadamente.
No Cloud Shell
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Criar e configurar VMs de produtor
Criar VMs
No Cloud Shell
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
Na seção a seguir, inicie o servidor HTTP na porta 1000 e 2000 em cada VM do produtor.
Configurar VMs
No Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
No Cloud Shell, na sessão portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
Abrir uma nova janela do Cloud Shell
Comece redefinindo as variáveis. No Cloud Shell, faça o seguinte:
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
No Cloud Shell, na sessão portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. Serviço de produtor de testes
Primeiro, precisamos conseguir os endereços IP das instâncias do portmap. Anote os dois endereços IP.
Abrir uma nova janela do Cloud Shell
Comece redefinindo as variáveis. No Cloud Shell, faça o seguinte:
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
Faça login na instância de teste. No Cloud Shell, faça o seguinte:
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Resultado esperado
portmap-vm1 1000
No Cloud Shell, faça o seguinte:
curl [portmap-vm1 IP]:2000
Resultado esperado
portmap-vm1 2000
No Cloud Shell, faça o seguinte:
curl [portmap-vm2 IP]:1000
Resultado esperado
portmap-vm2 1000
No Cloud Shell, faça o seguinte:
curl [portmap-vm2 IP]:2000
Resultado esperado
portmap-vm2 2000
Sair da test-client-vm
9. Criar um serviço de produtor com NEG do Portmap
Criar componentes do balanceador de carga
No Cloud Shell
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Adicione endpoints ao NEG de mapeamento de portas para criar o mapeamento da porta do cliente para a porta do produtor. O produtor cria esse mapeamento e terá o próprio método para comunicar essas informações aos consumidores. O mapeamento de portas específico não é compartilhado pelo PSC.
No Cloud Shell, faça o seguinte:
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
Conclua a criação do balanceador de carga.
No Cloud Shell, faça o seguinte:
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
Criar anexo de serviço
No Cloud Shell
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
Em seguida, extraia e anote o URI do anexo de serviço para configurar o endpoint do PSC no ambiente do consumidor.
No Cloud Shell, faça o seguinte:
gcloud compute service-attachments describe portmap-service-attachment --region=$region
Exemplo de resultado esperado
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
10. Criar uma rede VPC do consumidor
Rede VPC
No Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Criar sub-rede
No Cloud Shell
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
Criar políticas e regras de firewall de rede
No Cloud Shell
gcloud compute network-firewall-policies create consumer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
Somente o SSH do acesso ao IAP é necessário para a rede do consumidor.
11. Criar VM, endpoint do PSC e testar a conectividade
Neste ponto, três janelas do Cloud Shell devem estar abertas. Uma sessão aberta com portmap-vm1. Uma deve ter uma sessão aberta com portmap-vm2 e a outra deve ser a sessão de trabalho.
Criar uma VM de teste
No Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
Criar endpoint do PSC
No Cloud Shell
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
Testar a conectividade
No Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
Resposta esperada
portmap-vm1 1000
No Cloud Shell
curl 10.0.0.10:1002
Resposta esperada
portmap-vm1 2000
No Cloud Shell
curl 10.0.0.10:1003
Resposta esperada
portmap-vm2 1000
No Cloud Shell
curl 10.0.0.10:1004
Resposta esperada
portmap-vm2 2000
12. Etapas de limpeza
Sair da instância de VM (todas as janelas)
exit
Excluir componentes do laboratório em um único terminal do Cloud Shell
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy --name=network-consumer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q gcloud compute networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. Parabéns!
Parabéns por concluir o codelab.
O que vimos
- Casos de uso do mapeamento de portas do Private Service Connect
- Principais benefícios do mapeamento de portas do PSC
- Requisitos de rede
- Crie um serviço de produtor do Private Service Connect usando o mapeamento de portas.
- Criar um endpoint do Private Service Connect
- Fazer chamadas por um endpoint do Private Service Connect para um serviço de produtor