1. Introdução
O Private Service Connect permite que um produtor de serviços ofereça serviços de maneira particular a um consumidor de serviços. O Private Service Connect oferece os seguintes benefícios:
- Uma rede VPC de produtor de serviços pode oferecer suporte a mais de um consumidor de serviço.
- Cada consumidor se conecta ao endereço IP interno definido por ele. O Private Service Connect realiza a conversão de endereços de rede (NAT) para encaminhar a solicitação ao produtor de serviços.
Figura 2. O Private Service Connect usa endpoints e anexos de serviço para permitir que os consumidores de serviços enviem tráfego da rede VPC do consumidor para serviços na rede VPC do produtor de serviços (clique para ampliar).
O que você vai aprender
- Benefícios do Private Service Connect
- Principais conceitos para consumidores de serviço
- Principais conceitos para produtores de serviços
- Criar um ambiente de produtor
- Expor o serviço (ambiente do produtor) por meio de um anexo de serviço
- Crie um ambiente do consumidor
- Criar uma regra de encaminhamento na rede do consumidor
- Validar o acesso do consumidor TCP
- Ativar & validar o protocolo de proxy
- Ativar o controle de acesso de políticas
O que é necessário
- Conhecimento sobre balanceadores de carga internos
- Capacidade de criar VPCs em dois projetos
2. Benefícios do Private Service Connect
Com o PSC, você tem vários benefícios em comparação com o peering de VPC:
Melhor controle do espaço IP privado
- Como consumidor de serviço, você pode controlar o endereço IP particular usado para se conectar ao serviço gerenciado que gostaria de acessar.
- Como consumidor de serviço, você não precisa se preocupar em reservar intervalos de endereços IP particulares para serviços de back-end que são consumidos na VPC. Você só precisa escolher um endereço IP da sua própria sub-rede para se conectar aos serviços do produtor.
- Como produtor de serviços, você pode implantar um modelo multilocatário, em que sua VPC contém serviços que atendem a várias VPCs de consumidor. Os consumidores com intervalos de sub-redes sobrepostos não são mais um problema.
- Como provedor de serviços, é possível escalonar seu serviço para quantas instâncias de VM forem necessárias, sem precisar entrar em contato com o consumidor para solicitar mais endereços IP.
Mais segurança e isolamento
- Como consumidor de serviço, somente você pode iniciar a comunicação com o produtor. Essa conectividade unidirecional simplifica consideravelmente a configuração do firewall, mas também reduz o risco do tráfego robusto do produtor de serviços.
- Como produtor de serviços, você não precisa alterar suas regras de firewall com base nos intervalos de sub-redes da VPC do consumidor. Basta criar regras de firewall para o intervalo de endereços IP do NAT configurado para seu serviço.
Melhor escalonabilidade
- O PSC permite um design altamente escalonável ao oferecer suporte a milhares de consumidores e permite que os produtores de serviços ofereçam serviços altamente escalonáveis de um ou vários locatários.
- Como consumidor de serviço usando o Private Service Connect, você pode criar recursos conforme necessário na sua VPC. A escala disso não é afetada pelo número de recursos criados na VPC do produtor.
3. Principais conceitos para consumidores de serviço
É possível usar os endpoints do Private Service Connect para consumir serviços que estão fora da sua rede VPC. Os consumidores de serviço criam endpoints do Private Service Connect que se conectam a um serviço de destino.
Endpoints
Use os endpoints do Private Service Connect para se conectar a um serviço de destino. Os endpoints têm um endereço IP interno na rede VPC e são baseados no recurso de regra de encaminhamento.
Você envia o tráfego para o endpoint, que o encaminha para destinos fora da rede VPC.
Metas
Os endpoints do Private Service Connect têm um destino, que é o serviço a que você quer se conectar:
- Um pacote de APIs:
- Todas as APIs: a maioria das APIs do Google
- VPC-SC: APIs compatíveis com VPC Service Controls
- Um serviço publicado em outra rede VPC. O serviço pode ser gerenciado pela organização ou por terceiros.
Serviço publicado
Para conectar seu endpoint a um serviço de um produtor de serviços, você precisa do anexo de serviço do serviço. O URI do anexo de serviço tem este formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
4. Principais conceitos para produtores de serviços
Para disponibilizar um serviço aos consumidores, crie uma ou mais sub-redes dedicadas para usar na conversão de endereços de rede (NAT) de endereços IP de consumidores. Em seguida, você cria um anexo de serviço que se refere a essas sub-redes.
Sub-redes do Private Service Connect
Para expor um serviço, o produtor de serviços primeiro cria uma ou mais sub-redes com a finalidade Private Service Connect.
Quando uma solicitação é enviada de uma rede VPC de consumidor, o endereço IP de origem do consumidor é convertido com NAT de origem (SNAT) para um endereço IP selecionado de uma das sub-redes do Private Service Connect.
Se você quiser manter as informações do endereço IP da conexão do consumidor, consulte Como visualizar as informações de conexão do consumidor.
Elas não podem ser usadas para recursos como instâncias de VM ou regras de encaminhamento. As sub-redes são usadas apenas para fornecer endereços IP para SNAT de conexões de entrada do consumidor.
A sub-rede do Private Service Connect precisa conter pelo menos um endereço IP para cada 63 VMs de consumidor. Assim,cada VM de consumidor recebe 1.024 tuplas de origem para conversão de endereços de rede.
O tamanho mínimo de uma sub-rede do Private Service Connect é /24.
Anexos de serviço
Os produtores de serviços expõem o serviço deles utilizando um anexo.
- Para expor um serviço, um produtor de serviços cria um anexo de serviço que se refere à regra de encaminhamento do balanceador de carga do serviço.
- Para acessar um serviço, o consumidor de serviço cria um endpoint que se refere ao anexo de serviço.
Preferências de conexão
Ao criar um serviço, você escolhe como disponibilizá-lo. Existem duas opções:
- Aceitar automaticamente conexões para todos os projetos: qualquer consumidor de serviço pode configurar um endpoint e se conectar ao serviço automaticamente.
- Aceitar conexões para os projetos selecionados: os consumidores de serviço configuram um endpoint para se conectar ao serviço, e o produtor de serviços aceita ou rejeita as solicitações de conexão.
5. Ambiente de teste
A rede do consumidor consiste em um endereço IP estático TCP usado para originar solicitações ao produtor de serviços, além do anexo de serviço de destino, que é mapeado para o anexo de serviço do produtor (serviço publicado).
Agora vamos conhecer a rede de produtores. A rede dos produtores não tem um mapeamento para a rede dos consumidores. Em vez disso, ela contém um anexo de serviço (serviço publicado) que o consumidor usa para serviços. O anexo de serviço do produtor em nosso laboratório é um balanceador de carga interno de camada 4 (producer-forwarding-rule) para um serviço de back-end que oferece suporte a um aplicativo TCP.
A sub-rede NAT e as regras de firewall associadas permitem a comunicação com o aplicativo do produtor.
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.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
- 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.
6. Antes de começar
O codelab requer dois projetos, embora não seja um requisito para o PSC. Observe as referências para dar suporte a um ou vários projetos.
Projeto único: atualizar o projeto para oferecer suporte às redes do produtor e do consumidor
No Cloud Shell, verifique se o ID do projeto está configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME consumerproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Vários projetos: atualize o projeto para auxiliar a rede do produtor
No Cloud Shell, verifique se o ID do projeto está configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
7. Criar rede VPC de produtores
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
Rede VPC
No Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Criar sub-rede
No Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2
Criar instância do Cloud NAT
O Cloud NAT não é o mesmo NAT usado para o PSC. O Cloud NAT é usado explicitamente no acesso à Internet para fazer o download de pacotes de aplicativos.
Criar Cloud Router
No Cloud Shell
gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2
Criar o Cloud NAT
No Cloud Shell
gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
8. Criar instâncias de computação
No Cloud Shell, crie a instância www-01
gcloud compute instances create www-01 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y 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 iperf3 -s -p 5050'
No Cloud Shell, crie a instância www-02
gcloud compute instances create www-02 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y 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 iperf3 -s -p 5050'
9. Criar grupo de instâncias não gerenciadas
Crie um grupo não gerenciado de instâncias que consiste em www-01 e www-02
No Cloud Shell
gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02 gcloud compute health-checks create http hc-http-80 --port=80
10. Criar serviços de back-end TCP, regra de encaminhamento e firewall
No Cloud Shell, crie o serviço de back-end
gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80 gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a
No Cloud Shell, crie a regra de encaminhamento
gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2
No Cloud Shell, crie uma regra de firewall para ativar as verificações de integridade de back-end
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging
Para permitir que o IAP se conecte às instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias de VM que você quer disponibilizar usando o IAP.
- Permite tráfego de entrada no intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para encaminhamento de TCP.
No Cloud Shell
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
11. Criar sub-rede TCP NAT
No Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect
12. Criar regras de firewall e anexo de serviço TCP
No Cloud Shell, crie o anexo de serviço TCP
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp
Valide o anexo de serviço TCP
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2
No Cloud Shell, crie a regra de firewall que permite o acesso da sub-rede TCP NAT ao back-end do ILB
gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging
13. Criar a rede VPC dos consumidores
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
Na seção a seguir, a VPC do consumidor é configurada em um projeto separado. A comunicação entre as redes do consumidor e do produtor é realizada por meio do anexo de serviço definido na rede dos consumidores.
Rede VPC
O codelab requer dois projetos, embora não seja um requisito para o PSC. Observe as referências para dar suporte a um ou vários projetos.
Projeto único: atualizar o projeto para oferecer suporte às redes do produtor e do consumidor
No Cloud Shell, verifique se o ID do projeto está configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME prodproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Vários projetos: atualize o projeto para oferecer suporte ao consumidor de uma rede
No Cloud Shell, verifique se o ID do projeto está configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME echo $consumerproject
No Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
Criar sub-rede para PSC
No Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2
Criar um endereço IP estático para aplicativos TCP
No Cloud Shell
gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100
Criar regras de firewall
Para permitir que o IAP se conecte às instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias de VM que você quer disponibilizar usando o IAP.
- Permite tráfego de entrada no intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para encaminhamento de TCP.
No Cloud Shell
gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Embora não seja necessário para o PSC, crie uma regra de firewall de saída para monitorar o tráfego PSC do consumidor para o anexo de serviço dos produtores
gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging
Criar instância do Cloud NAT
O Cloud NAT não é o mesmo NAT usado para o PSC. O Cloud NAT é usado explicitamente para acesso à Internet para fazer o download de pacotes de aplicativos
Criar Cloud Router
No Cloud Shell
gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2
Criar o Cloud NAT
No Cloud Shell
gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
14. Criar VM da instância de teste
No Cloud Shell
gcloud compute instances create test-instance-1 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=consumer-subnet --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install iperf3 -y apt-get install tcpdump -y'
15. Criar anexo de serviço TCP
No Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
16. Validação
Usaremos CURL, TCPDUMP e registros de firewall para validar a comunicação do consumidor e do produtor.
No projeto do consumidor, os endereços IP estáticos são usados para originar a comunicação com o produtor. Esse mapeamento do endereço IP estático para a regra de encaminhamento do consumidor é validado executando a seguinte sintaxe.
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
Nas VPCs de consumidor, identifique a regra de encaminhamento de TCP e o IP estático
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2
Saída:
IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T13:34:23.359-07:00' id: '2768158450402915488' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp <snip>
17. Validação de TCP
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
No Projeto de produtor,identifique "www-01" & "www-02" e iniciar uma sessão SSH por instância.
De "www-01" executar TCPDUMP para monitorar o NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
De "www-02" executar TCPDUMP para monitorar o NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
Em Consumer Project,identifique "test-instance-1" e lançar duas sessões.
De "test-instance-1" sessão 1 realiza TCPDUMP para monitorar
sudo tcpdump -i any host 10.0.60.100 -n
De "test-instance-1" a sessão 2 realiza a validação de TCP
curl -v 10.0.60.100
18. Observações - Consumidor
De "test-instance-1" o CURL da sessão 2 é bem-sucedido e gera 200 OK.
@test-instance-1:~$ curl -v 10.0.60.100 * Rebuilt URL to: 10.0.60.100/ * Trying 10.0.60.100... * TCP_NODELAY set * Connected to 10.0.60.100 (10.0.60.100) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.60.100 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 14 Jul 2021 21:20:22 GMT < Server: Apache/2.4.25 (Debian) < Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT < ETag: "1d-5c71aed5edabd" < Accept-Ranges: bytes < Content-Length: 29 < Content-Type: text/html < Page on www-01 in us-west2-a * Curl_http_done: called premature == 0 * Connection #0 to host 10.0.60.100 left intact
De "test-instance-1" sessão 1 TCPDUMP identifica instância de VM → comunicação e resposta de IP estático TCP
21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
Geração de registros de firewall
Como usar a Análise de registros valida a regra de firewall "vpc-consumner-psc" captura o fluxo entre a instância de VM e o IP estático
- No console do Cloud, identifique a geração de registros de operações → a Análise de registros
- No campo "Consulta", atualize a entrada abaixo com "yourconsumerproject" e selecione "Executar consulta".
logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- Os resultados da consulta mostram os seguintes dados por captura de tela fornecida
- Expanda o registro e identifique a saída fornecida abaixo. Anote o dest_ip: 10.0.60.100 é o IP TCP STATIC e src_ip: 10.0.60.2 é o endereço IP da instância de VM.
19. Observações: produtor
Da instância de back-end "www-01" ou "www-02" a seguinte comunicação entre a sub-rede TCP NAT e o TCP ILB é observada.
21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
20. Geração de registros de firewall
Como usar a Análise de registros para validar a regra de firewall "vpc-demo-allowpsc-tcp" é capturar o TCP NAT e Fluxo do TCP ILB realizando as seguintes etapas:
- No console do Cloud, identifique a geração de registros de operações → a Análise de registros
- No campo Query, atualize a entrada abaixo com yourprodproject e selecione "Run Query"
logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")
- Os resultados da consulta mostram os seguintes dados por captura de tela fornecida
- Expanda o registro e identifique a saída fornecida abaixo. Anote o TCP ILB dest_ip: 10.0.2.10 e o NAT TCP source_range (192.168.0.0/24) e o respectivo src_ip: 192.168.0.2.
21. Ativar protocolo de proxy
Por padrão, o Private Service Connect converte o endereço IP de origem do consumidor em um endereço em uma das sub-redes do Private Service Connect na rede VPC do produtor de serviços. Para ver o endereço IP de origem original do cliente, você pode ativar o protocolo PROXY. Se o protocolo PROXY estiver ativado, será possível consultar o endereço IP de origem do consumidor e o ID da conexão PSC no cabeçalho do protocolo PROXY.
Excluir os serviços publicados pelos produtores
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
No Cloud Shell, exclua os anexos do serviço TCP
gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet
No Cloud Shell, os anexos de serviço de validação são excluídos (0 itens listados)
gcloud compute service-attachments list
Criar anexo de serviço TCP com o protocolo de proxy ativado
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \ --producer-forwarding-rule=vpc-demo-www-ilb-tcp \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=vpc-demo-us-west2-psc-tcp \ --enable-proxy-protocol
No Cloud Shell, os anexos de serviço de validação são criados com o protocolo de proxy ativado (verdadeiro)
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
No Cloud Shell, exclua as regras de encaminhamento de TCP
gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet
Recrie as regras de encaminhamento de TCP para associar ao anexo de serviço (produtor) criado anteriormente
No Cloud Shell, crie a regra de encaminhamento de TCP
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \ --region=us-west2 --network=vpc-demo-consumer \ --address=vpc-consumer-psc-tcp \ --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
Validação do protocolo de proxy
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
No Projeto de produtor,identifique "www-01" & "www-02" e iniciar uma sessão por instância.
De "www-01" executar TCPDUMP para monitorar o NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
De "www-02" executar TCPDUMP para monitorar o NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
Em Consumer Project,identifique "test-instance-1" e iniciar uma única sessão
De "test-instance-1" curl
curl 10.0.60.100
Observações - Consumidor
Observe que, se o protocolo PROXY v2 estiver ativado, mas o aplicativo não estiver configurado para ser compatível, uma mensagem de erro será exibida se a conexão for feita a partir do cliente, conforme o exemplo abaixo. As atualizações do Apache são necessárias para acomodar o cabeçalho proxy v2 adicional e não abordados no codelab.
De "test-instance-1" O CURL da sessão produzirá 400 solicitações inválidas esperadas, embora a consulta de back-end tenha êxito.
@test-instance-1:~$ curl 10.0.60.100 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>
Observações - Consumidor
Da instância de back-end "www-01" ou "www-02" a comunicação a seguir entre a sub-rede TCP NAT e o ILB TCP são observadas com o protocolo de proxy incorporado na captura.
Na maioria dos casos, o terceiro pacote do tcpdump contém os elementos de informações do protocolo de proxy (IE, na sigla em inglês) relevantes. Opcionalmente, identifique o pacote com 39 bytes que contém o protocolo de proxy IE.
192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP 0x0000: 4500 004f 0000 4000 4006 6df4 c0a8 0003 E..O..@.@.m..... 0x0010: 0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b .......P..+<N%.. 0x0020: 5018 6e00 b617 0000 0d0a 0d0a 000d 0a51 P.n............Q 0x0030: 5549 540a 2111 0017 0a00 3c02 0a00 3c64 UIT.!.....<...<d 0x0040: 8138 0050 e000 0800 9b34 d70a 003c 64 .8.P.....4...<d
Identifique a assinatura do protocolo PROXY: 0d0a0d0a000d0a515549540a na captura do pacote
Identificando a assinatura do protocolo PROXY, é possível quebrá-la e decodificar os campos conforme abaixo:
Assinatura do protocolo PROXY: 0d0a0d0a000d0a515549540a
Outros campos do protocolo PROXY: 21 11 00 17
IPs e portas: 0a003c02 0a003c64 8138 0050
Tipo de TLV: e0
Comprimento do TLV: 00 08
ID de pscConnection: 009b34d70a003c64
Hexadecimal | Decimal / IP | ||
Assinatura do protocolo PROXY |
| ||
Versão, protocolo e tamanho |
| ||
IP do Src |
|
| |
Dst IP |
|
| |
Porta Src |
|
| |
Porta Dst |
|
| |
Tipo de TLV (PP2_TYPE_GCP) |
| ||
Comprimento do TLV |
| ||
pscConnectionId |
|
|
O pscConnectionId também pode ser validado descrevendo a regra de encaminhamento do consumidor conforme abaixo e verificando se corresponde:
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
No Cloud Shell, descrever as regras de encaminhamento de TCP
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
Saída que descreve o pscConnectionID
$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2 IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T16:50:31.766-07:00' id: '4443494505307621032' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '43686719580552292' pscConnectionStatus: ACCEPTED
22. Política de conexão
É possível alternar entre a aceitação de projeto automática e explícita para um serviço publicado.
A mudança da aceitação automática para a aceitação explícita não afeta os endpoints do consumidor que se conectaram ao serviço antes dessa alteração. Os endpoints do consumidor existentes podem se conectar ao serviço publicado até que o anexo de serviço seja excluído. Novos endpoints do consumidor precisam ser aceitos antes que possam se conectar ao serviço. Consulte Como gerenciar solicitações de acesso a um serviço publicado para mais informações.
Nesta seção do laboratório, você modificará a política de conexão do produtor para aprovar explicitamente o anexo de serviço do consumidor.
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
No Cloud Shell do serviço de produtores, atualize a política de preferência de conexão de "Aceitar automaticamente" para Aceitar manualmente
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL
Identifique o status do endpoint navegando até Serviços de rede → Private Service Connect → Serviços publicados → vpc-demo-psc-west2-tcp → Projetos conectados
Aviso: o projeto do consumidor foi alterado para "Pendente" em "Projetos conectados".
Para aceitar o projeto dos consumidores, execute o seguinte no Cloud Shell e atualize com o nome adequado do projeto
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20
Identifique o status do endpoint navegando até Serviços de rede → Private Service Connect → Serviços publicados → vpc-demo-psc-west2-tcp → Projetos conectados
Aviso: o projeto do consumidor foi alterado para "Aceito" em "Projetos conectados".
23. Etapas de limpeza
Etapas de limpeza da rede do produtor
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém o serviço do produtor.
Exclua os componentes do laboratório em um único Cloud Shell no terminal do projeto do Producer
gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet gcloud compute routers delete crnatprod --region=us-west2 --quiet gcloud compute instances delete www-01 --zone=us-west2-a --quiet gcloud compute instances delete www-02 --zone=us-west2-a --quiet gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet gcloud compute health-checks delete hc-http-80 --quiet gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet gcloud compute firewall-rules delete vpc-demo-health-checks --quiet gcloud compute firewall-rules delete psclab-iap-prod --quiet gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet gcloud compute networks delete vpc-demo-producer --quiet
Observação: na seção a seguir, execute atualizações de configuração no projeto que contém seu serviço do consumidor
Etapas de limpeza da rede do consumidor
Exclua os componentes do laboratório em um único Cloud Shell no terminal do projeto do Producer
gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet gcloud compute routers delete crnatconsumer --region=us-west2 --quiet gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute networks delete vpc-demo-consumer --quiet
24. Parabéns!
Parabéns por concluir o codelab.
O que vimos
- Benefícios do Private Service Connect
- Principais conceitos para consumidores de serviço
- Principais conceitos para produtores de serviços
- Criar um ambiente de produtor
- Expor o serviço (ambiente do produtor) por meio de um anexo de serviço
- Crie um ambiente do consumidor
- Criar uma regra de encaminhamento na rede do consumidor
- Validar o acesso do consumidor TCP
- Ativar & validar o protocolo de proxy
- Ativar o controle de acesso de políticas