Serviços gerenciados da interface do Private Service Connect

1. Introdução

A interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) do produtor inicie conexões com vários destinos em uma rede VPC do consumidor. As redes de produtores e consumidores podem estar em diferentes projetos e organizações.

Se um anexo de rede aceitar uma conexão de uma interface do Private Service Connect, o Google Cloud alocará um endereço IP de uma sub-rede do consumidor especificado pelo anexo de rede. As redes de consumidores e produtores estão conectadas e podem se comunicar por endereços IP internos.

Uma conexão entre um anexo de rede e uma interface do Private Service Connect é semelhante à conexão entre um endpoint do Private Service Connect e um anexo de serviço, mas há duas diferenças importantes:

  • Um anexo de rede permite que uma rede produtora inicie conexões com uma rede consumidora (saída de serviço gerenciada), enquanto um endpoint permite que uma rede consumidora inicie conexões com uma rede produtora (entrada de serviço gerenciada).
  • Uma conexão de interface do Private Service Connect é transitiva. Isso significa que uma rede do produtor pode se comunicar com outras que estão conectadas à rede do consumidor.

O que você vai criar

Você vai criar um único psc-network-attachment na VPC do consumidor, resultando em duas interfaces PSC como back-ends para o balanceador de carga interno L4. Na VPC do produtor, o Tiger vai enviar um curl para o Cosmo no back-end-vpc. Na VPC do produtor, você vai criar uma rota estática para o próximo salto de tráfego de destino 192.168.20.0/28 como o balanceador de carga interno que vai aproveitar o back-end e as interfaces PSC subsequentes para rotear o tráfego para o Cosmo. Consulte a Figura 1 para ter uma visão geral.

A mesma abordagem pode ser usada com os serviços gerenciados pelo Google que são VPCs pareadas com a VPC do cliente ao usar o Acesso a serviços particulares.

Figura 1.

36dbc7f825a21cbd.png

O que você vai aprender

  • Como criar um anexo de rede
  • Como um produtor pode usar um anexo de rede para criar uma interface de PSC como back-end
  • Como estabelecer a comunicação do produtor para o consumidor usando o ILB como próximo salto
  • Como permitir o acesso da VM produtora (tigre) à VM consumidora (cosmo) pelo peering da VPC

O que é necessário

2. Antes de começar

Atualizar o projeto para oferecer suporte ao tutorial

Este tutorial usa $variables para ajudar na implementação da configuração do gcloud no Cloud Shell.

No Cloud Shell, faça o seguinte:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Configuração do consumidor

Criar a VPC personalizada

No Cloud Shell, faça o seguinte:

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

Criar a sub-rede de anexo de rede do Private Service Connect

No Cloud Shell, faça o seguinte:

gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1

Criar a VPC de back-end

No Cloud Shell, faça o seguinte:

gcloud compute networks create backend-vpc --project=$projectid --subnet-mode=custom

Criar as sub-redes VPC de back-end

No Cloud Shell, faça o seguinte:

gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=backend-vpc --region=us-central1

Criar as regras de firewall de back-end-vpc

No Cloud Shell, crie uma regra de entrada para o tráfego da sub-rede psc-network-attachment para o Cosmo.

gcloud compute firewall-rules create allow-ingress-to-cosmo \
    --network=backend-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="192.168.20.0/28" \
    --enable-logging

Cloud Router e configuração NAT

O Cloud NAT é usado no tutorial para a instalação do pacote de software porque a instância de VM não tem um endereço IP público. O Cloud NAT permite que VMs com endereços IP particulares acessem a Internet.

No Cloud Shell, crie o roteador da nuvem.

gcloud compute routers create cloud-router-for-nat --network backend-vpc --region us-central1

No Cloud Shell, crie o gateway NAT.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. Ativar o IAP

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, crie a regra de firewall do IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network backend-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

5. Criar instâncias de VM do consumidor

No Cloud Shell, crie a instância de VM do consumidor, cosmo.

gcloud compute instances create cosmo \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=cosmo-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to cosmo's backend server !!' | tee /var/www/html/index.html
      EOF"

Consiga e armazene os endereços IP das instâncias:

No Cloud Shell, execute uma descrição das instâncias de VM do Cosmo.

gcloud compute instances describe cosmo --zone=us-central1-a | grep  networkIP:

6. Anexo de rede do Private Service Connect

Os anexos de rede são recursos regionais que representam o lado do consumidor de uma interface do Private Service Connect. Você associa uma única sub-rede a um anexo de rede, e o produtor atribui IPs à interface do Private Service Connect a partir dessa sub-rede. A sub-rede precisa estar na mesma região do anexo de rede. Um anexo de rede precisa estar na mesma região do serviço do produtor.

Criar o anexo de rede

No Cloud Shell, crie o anexo de rede.

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_MANUAL \
    --producer-accept-list=$projectid \
    --subnets=intf-subnet

Listar os anexos de rede

No Cloud Shell, liste o anexo de rede.

gcloud compute network-attachments list

Descrever os anexos de rede

No Cloud Shell, descreva o anexo de rede.

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

Anote o URI psc-network-attachment que será usado pelo produtor ao criar as interfaces do Private Service Connect. Veja um exemplo a seguir:

user$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-07T11:27:33.116-07:00'
fingerprint: 8SDsvG6TfYQ=
id: '5014253525248340730'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet

7. Estabelecer peering de VPC entre o consumidor e a VPC de back-end

Você vai criar uma conexão de peering de VPC entre o consumidor e a VPC de back-end. Isso replica como o Google estabelece conectividade com as VPCs do cliente para serviços gerenciados, além do peering entre organizações para conectividade de rede. O peering da VPC precisa ser configurado em cada VPC.

VPC do consumidor para o peering de VPC de back-end

Criar uma conexão de peering de VPC do consumidor para a VPC de back-end

No Cloud Shell, faça o seguinte:

gcloud compute networks peerings create consumer-to-backend-vpc \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=backend-vpc \
    --stack-type=IPV4_ONLY

Criar uma conexão de peering de VPC do back-end para a VPC do consumidor

No Cloud Shell, faça o seguinte:

gcloud compute networks peerings create backend-to-consumer-vpc \
    --network=backend-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc \
    --stack-type=IPV4_ONLY

Validar os detalhes do estado do peering de VPC

No Cloud Shell, verifique se o peering da VPC está no estado "Ativo" e "Conectado".

gcloud compute networks peerings list

Exemplo:

user@cloudshell$ gcloud compute networks peerings list
NAME: backend-to-consumer-vpc
NETWORK: backend-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: consumer-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU: 
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.

NAME: consumer-to-backend-vpc
NETWORK: consumer-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: backend-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU: 
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.

8. Configuração do produtor

Criar a VPC do produtor

No Cloud Shell, faça o seguinte:

gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom

Criar as sub-redes do produtor

No Cloud Shell, crie a sub-rede usada para a vNIC0 das interfaces psc.

gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1

No Cloud Shell, crie a sub-rede usada para a instância tiger.

gcloud compute networks subnets create prod-subnet-2 --project=$projectid --range=10.30.1.0/28 --network=producer-vpc --region=us-central1

No Cloud Shell, crie a sub-rede usada para o balanceador de carga interno.

gcloud compute networks subnets create prod-subnet-3 --project=$projectid --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

Cloud Router e configuração NAT

O Cloud NAT é usado no tutorial para a instalação do pacote de software porque a instância de VM não tem um endereço IP público. O Cloud NAT permite que VMs com endereços IP particulares acessem a Internet.

No Cloud Shell, crie o roteador da nuvem.

gcloud compute routers create cloud-router-for-nat-producer --network producer-vpc --region us-central1

No Cloud Shell, crie o gateway NAT.

gcloud compute routers nats create cloud-nat-us-central1-producer --router=cloud-router-for-nat-producer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Ativar o IAP

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, crie a regra de firewall do IAP.

gcloud compute firewall-rules create ssh-iap-producer \
    --network producer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Criar instâncias de VM de produtor

No Cloud Shell, crie a instância de VM do consumidor, tiger.

gcloud compute instances create tiger \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=prod-subnet-2 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump"

9. Criar regras de firewall do produtor

Na VPC do produtor, crie uma regra de firewall de entrada que permita a comunicação da prod-subnet-2 para todas as instâncias na VPC do produtor.

No Cloud Shell, crie a regra de firewall do produtor.

gcloud compute --project=$projectid firewall-rules create allow-tiger-ingress --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=10.30.1.0/28 --enable-logging

10. Criar a interface do Private Service Connect

A interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) do produtor inicie conexões com vários destinos em uma rede VPC do consumidor. As redes de produtores e consumidores podem estar em diferentes projetos e organizações.

Se um anexo de rede aceitar uma conexão de uma interface do Private Service Connect, o Google Cloud alocará um endereço IP de uma sub-rede do consumidor especificado pelo anexo de rede. As redes de consumidores e produtores estão conectadas e podem se comunicar por endereços IP internos.

Neste tutorial, você vai criar duas instâncias com o anexo de rede do Private Service Connect, que será o back-end do balanceador de carga interno.

Na Cloud Shell, crie a interface do Private Service Connect (rabbit) e insira o URI psc-network-attachmentI identificado anteriormente na saída de descrição do anexo de rede.

gcloud compute instances create rabbit --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart"

Na Cloud Shell, crie a interface do Private Service Connect (fox) e insira o URI psc-network-attachmentI identificado anteriormente na saída de descrição do anexo de rede.

gcloud compute instances create fox --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart"

Validação de vários endereços NIC

Valide se a interface PSC está configurada com o endereço IP adequado. A vNIC0 vai usar a sub-rede de produção do produtor (10.20.1.0/28), e a vNIC1 vai usar a sub-rede intf do consumidor (192.168.10.0/28).

gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:

gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:

Exemplo:

user$ gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:
  networkIP: 10.20.1.2
  networkIP: 192.168.10.2

user$ gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:
  networkIP: 10.20.1.3
  networkIP: 192.168.10.3

11. Criar e adicionar "rabbit" e "fox" a um grupo de instâncias não gerenciadas

Na seção a seguir, você vai criar um grupo de instâncias não gerenciadas que consiste nas instâncias de interface do PSC rabbit e fox.

No Cloud Shell, crie o grupo de instâncias não gerenciadas.

gcloud compute instance-groups unmanaged create psc-interface-instances-ig --project=$projectid --zone=us-central1-a

No Cloud Shell, adicione as instâncias fox e rabbit ao grupo de instâncias.

gcloud compute instance-groups unmanaged add-instances psc-interface-instances-ig --project=$projectid --zone=us-central1-a --instances=fox,rabbit

12. Criar verificação de integridade TCP, serviços de back-end, regra de encaminhamento e firewall

No Cloud Shell, crie a verificação de integridade do back-end.

gcloud compute health-checks create http hc-http-80 --port=80

No Cloud Shell, crie o serviço de back-end

gcloud compute backend-services create psc-interface-backend --load-balancing-scheme=internal --protocol=tcp --region=us-central1 --health-checks=hc-http-80
gcloud compute backend-services add-backend psc-interface-backend --region=us-central1 --instance-group=psc-interface-instances-ig --instance-group-zone=us-central1-a

No Cloud Shell, crie a regra de encaminhamento

gcloud compute forwarding-rules create psc-ilb --region=us-central1 --load-balancing-scheme=internal --network=producer-vpc --subnet=prod-subnet-3 --address=172.16.10.10 --ip-protocol=TCP --ports=all --backend-service=psc-interface-backend --backend-service-region=us-central1

No Cloud Shell, crie uma regra de firewall para ativar as verificações de integridade do back-end

gcloud compute firewall-rules create ilb-health-checks --allow tcp:80,tcp:443 --network producer-vpc --source-ranges 130.211.0.0/22,35.191.0.0/16 

13. Criar tabelas de IP do Linux para as interfaces PSC: rabbit

Na instância da interface do PSC, configure as tabelas IP do Linux para permitir a comunicação do produtor com as sub-redes do consumidor.

Encontrar o nome do SO convidado da interface do Private Service Connect

Para configurar o roteamento, você precisa saber o nome do SO convidado da interface do Private Service Connect, que é diferente do nome da interface no Google Cloud.

Faça login na VM psc-interface, rabbit, usando o IAP no Cloud Shell.

gcloud compute ssh rabbit --project=$projectid --zone=us-central1-a --tunnel-through-iap

No Cloud Shell, obtenha o endereço IP da instância psc-interface.

ip a

Exemplo:

user@rabbit:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
       valid_lft 59396sec preferred_lft 59396sec
    inet6 fe80::4001:aff:fe14:102/64 scope link 
       valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
       valid_lft 66782sec preferred_lft 66782sec
    inet6 fe80::4001:c0ff:fea8:a02/64 scope link 
       valid_lft forever preferred_lft forever

Encontrar o IP do gateway da interface do PSC

Na lista de interfaces de rede, encontre e armazene o nome da interface associada ao endereço IP da interface do Private Service Connect, por exemplo, ens5 (vNIC1).

Para configurar o roteamento, você precisa saber o endereço IP do gateway padrão da interface do Private Service Connect.

No Cloud Shell, vamos usar 1, já que a interface PSC está associada à vNIC1.

curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo

O exemplo produz o gateway padrão 192.168.10.1

user@rabbit:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1

Adicionar rotas para sub-redes de consumidores

É necessário adicionar uma rota ao gateway padrão da interface do Private Service Connect para cada sub-rede do consumidor que se conecta à interface do Private Service Connect. Isso garante que o tráfego vinculado à rede do consumidor saia da interface do Private Service Connect.

Validar a tabela de rotas

No Cloud Shell, valide as rotas atuais.

ip route show

Exemplo:

user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 

No Cloud Shell, adicione a rota à cosmo-subnet-1.

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5

Validar a tabela de rotas

No Cloud Shell, valide as rotas adicionadas atualizadas.

ip route show

Exemplo:

user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 
192.168.20.0/28 via 192.168.10.1 dev ens5 

Criar regras de tabelas de IP

No Cloud Shell, valide as tabelas de IP atuais.

sudo iptables -t nat -L -n -v

Exemplo:

user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination  

Atualizar tabelas de IP no Cloud Shell

sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1

No Cloud Shell, valide as tabelas de IP atualizadas.

sudo iptables -t nat -L -n -v

Exemplo:

user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      ens5    0.0.0.0/0            0.0.0.0/0

14. Criar tabelas de IP do Linux para as interfaces PSC: fox

Na instância da interface do PSC, configure as tabelas IP do Linux para permitir a comunicação do produtor com as sub-redes do consumidor.

Encontrar o nome do SO convidado da interface do Private Service Connect

Para configurar o roteamento, você precisa saber o nome do SO convidado da interface do Private Service Connect, que é diferente do nome da interface no Google Cloud.

Abra uma nova guia do Cloud Shell e atualize as configurações do projeto.

No Cloud Shell, faça o seguinte:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Faça login na VM psc-interface, fox, usando o IAP no Cloud Shell.

gcloud compute ssh fox --project=$projectid --zone=us-central1-a --tunnel-through-iap

No Cloud Shell, obtenha o endereço IP da instância psc-interface.

ip a

Exemplo:

user@fox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:0a:14:01:03 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.20.1.3/32 brd 10.20.1.3 scope global dynamic ens4
       valid_lft 65601sec preferred_lft 65601sec
    inet6 fe80::4001:aff:fe14:103/64 scope link 
       valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:c0:a8:0a:03 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 192.168.10.3/32 brd 192.168.10.3 scope global dynamic ens5
       valid_lft 63910sec preferred_lft 63910sec
    inet6 fe80::4001:c0ff:fea8:a03/64 scope link 
       valid_lft forever preferred_lft forever

Encontrar o IP do gateway da interface do PSC

Na lista de interfaces de rede, encontre e armazene o nome da interface associada ao endereço IP da interface do Private Service Connect, por exemplo, ens5 (vNIC1).

Para configurar o roteamento, você precisa saber o endereço IP do gateway padrão da interface do Private Service Connect.

No Cloud Shell, vamos usar 1, já que a interface PSC está associada à vNIC1.

curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo

O exemplo produz o gateway padrão 192.168.10.1

user@fox:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1

Adicionar rotas para sub-redes de consumidores

É necessário adicionar uma rota ao gateway padrão da interface do Private Service Connect para cada sub-rede do consumidor que se conecta à interface do Private Service Connect. Isso garante que o tráfego vinculado à rede do consumidor saia da interface do Private Service Connect.

Validar a tabela de rotas

No Cloud Shell, valide as rotas atuais.

ip route show

Exemplo:

user@fox:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 

No Cloud Shell, adicione a rota à cosmo-subnet-1.

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5

Validar a tabela de rotas

No Cloud Shell, valide as rotas adicionadas atualizadas.

ip route show

Exemplo:

user@fox:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 
192.168.20.0/28 via 192.168.10.1 dev ens5

Criar regras de tabelas de IP

No Cloud Shell, valide as tabelas de IP atuais.

sudo iptables -t nat -L -n -v

Exemplo:

user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

No Cloud Shell, atualize as tabelas de IP.

sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1

No Cloud Shell, valide as tabelas de IP atualizadas.

sudo iptables -t nat -L -n -v

Exemplo:

user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      ens5    0.0.0.0/0            0.0.0.0/0  

15. Atualizar tabela de rotas

Na VPC do produtor, crie uma rota estática para a sub-rede de consumidores 192.168.20.0/28, com o próximo salto como o balanceador de carga interno. Depois de criado, qualquer pacote (dentro do produtor-vpc) para o destino 192.168.20.0/28 será direcionado ao balanceador de carga interno.

Abra uma nova guia do Cloud Shell e atualize as configurações do projeto.

No Cloud Shell, faça o seguinte:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

No Cloud Shell, atualize a tabela de rotas do produtor-vpc com uma rota estática.

gcloud beta compute routes create producer-to-cosmo-subnet-1 --project=$projectid --network=producer-vpc --priority=1000 --destination-range=192.168.20.0/28 --next-hop-ilb=psc-ilb --next-hop-ilb-region=us-central1

16. Validar a conectividade bem-sucedida do Tiger para o Cosmo

Validação de curl

Vamos confirmar que a instância de VM do produtor, tiger, pode se comunicar com a instância do consumidor, cosmo, executando um curl.

Abra uma nova guia do Cloud Shell e atualize as configurações do projeto.

No Cloud Shell, faça o seguinte:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Faça login na instância tiger usando o IAP no Cloud Shell.

gcloud compute ssh tiger --project=$projectid --zone=us-central1-a --tunnel-through-iap

Execute um curl no endereço IP do Cosmo identificado anteriormente no tutorial da instância do Tiger.

curl -v <cosmo's IP Address>

Exemplo:

user@tiger:~$ curl -v 192.168.20.2
*   Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 09 Jun 2023 03:49:42 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Fri, 09 Jun 2023 03:28:37 GMT
< ETag: "27-5fda9f6ea060e"
< Accept-Ranges: bytes
< Content-Length: 39
< Content-Type: text/html
< 
Welcome to cosmo's backend server !!

Parabéns! Você validou a conectividade da VPC do produtor para a VPC de back-end executando um comando curl.

17. Limpar

No Cloud Shell, exclua os componentes do tutorial.

gcloud compute instances delete cosmo --zone=us-central1-a --quiet

gcloud compute instances delete rabbit --zone=us-central1-a --quiet

gcloud compute instances delete fox --zone=us-central1-a --quiet

gcloud compute instances delete tiger --zone=us-central1-a --quiet

gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet

gcloud compute firewall-rules delete allow-ingress-to-cosmo allow-tiger-ingress ilb-health-checks ssh-iap-consumer   ssh-iap-producer --quiet

gcloud beta compute routes delete producer-to-cosmo-subnet-1 --quiet 

gcloud compute forwarding-rules delete psc-ilb --region=us-central1 --quiet
gcloud compute backend-services delete psc-interface-backend --region=us-central1 --quiet
gcloud compute instance-groups unmanaged delete psc-interface-instances-ig --zone=us-central1-a --quiet
gcloud compute health-checks delete hc-http-80 --quiet
gcloud compute networks subnets delete cosmo-subnet-1 prod-subnet prod-subnet-2 prod-subnet-3 intf-subnet --region=us-central1 --quiet

gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet

gcloud compute routers delete cloud-router-for-nat-producer --region=us-central1 --quiet

gcloud compute networks delete consumer-vpc --quiet

gcloud compute networks delete producer-vpc --quiet

gcloud compute networks delete backend-vpc --quiet

18. Parabéns

Parabéns! Você configurou e validou uma interface do Private Service Connect e validou a conectividade do consumidor e do produtor pelo peering da VPC.

Você criou a infraestrutura do consumidor e adicionou um anexo de rede que permitiu ao produtor criar uma VM de várias NICs para conectar a comunicação entre consumidor e produtor. Você aprendeu como a interface do PSC pode ser usada para se comunicar com serviços de 1P/3P pelo peering de VPC usando um balanceador de carga interno e uma rota estática na VPC do produtor.

Cosmopup acha que os tutoriais são incríveis!

e6d3675ca7c6911f.jpeg

Qual é a próxima etapa?

Confira alguns desses tutoriais:

Leituras e vídeos complementares

Documentos de referência