Como usar o Private Service Connect para publicar e consumir serviços

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.

45b90d50690dd111.png

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
  • Criar 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 da 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.

28b09284a99eb60b.png

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

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.

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

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 do 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 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 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" &amp; "www-02" e iniciar uma sessão SSH por instância.

6d0bb8c5cb115876.png

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

  1. No console do Cloud, identifique a geração de registros de operações → a Análise de registros
  2. 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")

  1. Os resultados da consulta mostram os itens a seguir por captura de tela fornecida

b573c878a8d6d01f.png

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

1b4f46b3e61f6f12.png

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:

  1. No console do Cloud, identifique a geração de registros de operações → a Análise de registros
  2. 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")

  1. Os resultados da consulta mostram os itens a seguir por captura de tela fornecida

8ce6b0d17d76ad6d.png

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

e157a7af8cb667e.png

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.

e9d1c49971b10ed0.png

Referência à documentação

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" &amp; "www-02" e iniciar uma sessão por instância.

6d0bb8c5cb115876.png

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

0d0a0d0a000d0a515549540a

Versão, protocolo e tamanho

21 11 0017

IP do Src

0a003c02

10.0.60.2

Dst IP

0a003c64

10.0.60.100

Porta Src

8138

33080

Porta Dst

0050

80

Tipo de TLV (PP2_TYPE_GCP)

e0

Comprimento do TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

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

e1d90d1563e10731.png

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

35cba9ac640594a2.png

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
  • Criar 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