Private Service Connect 接口代管式服务

1. 简介

Private Service Connect 接口是一项资源,可供提供方虚拟私有云 (VPC) 网络发起与使用方 VPC 网络中各个目标的连接。提供方网络与使用方网络可以位于不同的项目和组织中。

如果某个网络连接接受来自 Private Service Connect 接口的连接,则 Google Cloud 会从该网络连接指定的使用方子网中为该接口分配一个 IP 地址。使用方和提供方网络已连接,可以使用内部 IP 地址进行通信。

网络连接与 Private Service Connect 接口之间的连接类似于 Private Service Connect 端点与服务连接之间的连接,但有以下两个关键区别:

  • 通过网络连接,提供方网络可启动与使用方网络的连接(托管式服务出站流量),而端点可让使用方网络启动与提供方网络的连接(托管式服务入站流量)。
  • Private Service Connect 接口连接具有传递性。这意味着生产者网络可以与连接到使用者网络的其他网络进行通信。

构建内容

您将在使用方 VPC 中创建单个 psc-network-连接,从而生成两个 PSC 接口作为 L4 内部负载平衡器的后端。从提供方 VPC Tiger 将 curl 发送到 backend-vpc 中的 Cosmo。在生产者的 VPC 中,您将创建一个指向目标流量 192.168.20.0/28 下一个跃点的静态路由作为内部负载平衡器,该负载平衡器将利用后端和后续 PSC 接口将流量路由到 Cosmo。有关概览,请参见图 1。

使用专用服务访问通道时,您可以为通过 VPC 对等互连到客户 VPC 的 Google 代管式服务使用这种方法。

图 1

36dbc7f825a21cbd.png

学习内容

  • 如何创建网络连接
  • 生产者如何使用网络连接创建 PSC 接口作为后端
  • 如何使用 ILB 作为下一个跃点建立从生产者到使用方的通信
  • 如何允许通过 VPC 对等互连从生产者虚拟机 (tiger) 访问使用方虚拟机 (cosmo)

所需条件

2. 准备工作

更新项目以支持本教程

本教程利用 $variables 辅助在 Cloud Shell 中实现 gcloud 配置。

在 Cloud Shell 中,执行以下操作:

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

3. 消费者设置

创建使用方 VPC

在 Cloud Shell 中,执行以下操作:

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

创建 Private Service Connect 网络连接子网

在 Cloud Shell 中,执行以下操作:

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

创建后端 VPC

在 Cloud Shell 中,执行以下操作:

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

创建后端 VPC 子网

在 Cloud Shell 中,执行以下操作:

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

创建 backend-vpc 防火墙规则

在 Cloud Shell 中,为从 psc-network-attachment 子网到 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 和 NAT 配置

本教程中使用 Cloud NAT 安装软件包,因为虚拟机实例没有公共 IP 地址。Cloud NAT 使具有专用 IP 地址的虚拟机能够访问互联网。

在 Cloud Shell 中,创建 Cloud Router 路由器。

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

在 Cloud Shell 中,创建 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. 启用 IAP

要允许 IAP 连接到您的虚拟机实例,请创建以下防火墙规则:

  • 适用于您希望可以使用 IAP 访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

在 Cloud Shell 中,创建 IAP 防火墙规则。

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

5. 创建使用方虚拟机实例

在 Cloud Shell 中,创建使用方虚拟机实例 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"

获取并存储实例的 IP 地址:

在 Cloud Shell 中,对 Cosmo 虚拟机实例执行描述。

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

6. Private Service Connect 网络连接

网络连接是代表 Private Service Connect 接口的使用方端的区域级资源。您可以将单个子网与网络连接相关联,然后提供方会从该子网将 IP 分配给 Private Service Connect 接口。子网必须与网络连接位于同一区域。网络连接必须与提供方服务位于同一区域。

创建网络连接

在 Cloud Shell 中,创建网络连接。

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

列出网络连接

在 Cloud Shell 中,列出网络连接。

gcloud compute network-attachments list

描述网络连接

在 Cloud Shell 中,描述网络连接。

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

记下创建 Private Service Connect 接口时生产者将使用的 psc-network-attachment URI。示例如下:

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. 在使用方和后端 VPC 之间建立 VPC 对等互连

您将在使用方和后端 VPC 之间创建 VPC 对等互连连接。除了为网络连接提供跨组织对等互连之外,这复制了 Google 如何为代管式服务与客户 VPC 建立连接。必须从每个 VPC 配置 VPC 对等互连。

使用方 VPC 到后端 VPC 对等互连

创建从使用方到后端 VPC 的 VPC 对等互连连接

在 Cloud Shell 中,执行以下操作:

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

创建从后端到使用方 VPC 的 VPC 对等互连连接

在 Cloud Shell 中,执行以下操作:

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

验证 VPC 对等互连状态详情

在 Cloud Shell 中,验证 VPC 对等互连是否处于“活跃”状态和“已连接”状态。

gcloud compute networks peerings list

示例:

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. Producer 设置

创建提供方 VPC

在 Cloud Shell 中,执行以下操作:

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

创建提供方子网

在 Cloud Shell 中,创建用于 psc 接口的 vNIC0 的子网

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

在 Cloud Shell 中,创建用于实例 Tiger 的子网。

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

在 Cloud Shell 中,创建用于内部负载平衡器的子网。

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

Cloud Router 和 NAT 配置

本教程中使用 Cloud NAT 安装软件包,因为虚拟机实例没有公共 IP 地址。Cloud NAT 使具有专用 IP 地址的虚拟机能够访问互联网。

在 Cloud Shell 中,创建 Cloud Router 路由器。

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

在 Cloud Shell 中,创建 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

启用 IAP

要允许 IAP 连接到您的虚拟机实例,请创建以下防火墙规则:

  • 适用于您希望可以使用 IAP 访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

在 Cloud Shell 中,创建 IAP 防火墙规则。

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

创建提供方虚拟机实例

在 Cloud Shell 中,创建使用方虚拟机实例 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. 创建提供方防火墙规则

在提供方 VPC 中,创建一条入站防火墙规则,允许从 prod-subnet-2 到 Producer-vpc 中的所有实例。

在 Cloud Shell 中,创建提供方防火墙规则。

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. 创建 Private Service Connect 接口

Private Service Connect 接口是一项资源,可供提供方虚拟私有云 (VPC) 网络发起与使用方 VPC 网络中各个目标的连接。提供方网络与使用方网络可以位于不同的项目和组织中。

如果某个网络连接接受来自 Private Service Connect 接口的连接,则 Google Cloud 会从该网络连接指定的使用方子网中为该接口分配一个 IP 地址。使用方和提供方网络已连接,可以使用内部 IP 地址进行通信。

在本教程中,您将使用专用服务连接网络连接创建两个实例,该连接将成为内部负载平衡器的后端。

在 Cloud Shell 中,创建 Private Service Connect 接口 (rabbit),并插入之前从网络连接描述输出中标识的 psc-network-attachment URI

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"

在 Cloud Shell 中,创建 Private Service Connect 接口 (fox),并插入之前从网络连接描述输出中标识的 psc-network-attachment URI

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"

多 NIC 验证

验证 PSC 接口配置了正确的 IP 地址。vNIC0 将使用提供方 prod-subnet (10.20.1.0/28),vNIC1 将使用使用方 intf-subnet (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:

示例:

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. 创建 rabbit 和 fox 并将其添加到非代管实例组

在下一部分,您将创建一个非托管式实例组,其中包含 PSC 接口实例 rabbit 和 fox。

在 Cloud Shell 中,创建非代管实例组。

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

在 Cloud Shell 中,将实例 fox 和 rabbit 添加到实例组。

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

12. 创建 TCP 健康检查、后端服务、转发规则以及防火墙

在 Cloud Shell 中,创建后端健康检查。

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

在 Cloud Shell 中创建后端服务

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

在 Cloud Shell 中创建转发规则

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

在 Cloud Shell 中,创建防火墙规则以启用后端健康检查

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. 为 PSC 接口创建 Linux IP 表 - rabbit

通过 PSC 接口实例,配置 Linux IP 表以允许提供方与使用方子网通信。

查找 Private Service Connect 接口的客机操作系统名称

如需配置路由,您需要知道 Private Service Connect 接口的客机操作系统名称,该名称与 Google Cloud 中接口的名称不同。

在 Cloud Shell 中使用 IAP 登录 psc-interface 虚拟机 rabbit。

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

在 Cloud Shell 中,获取 psc-interface 实例的 IP 地址

ip a

示例:

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

查找 PSC 接口的网关 IP

在网络接口列表中,查找并存储与 Private Service Connect 接口的 IP 地址关联的接口名称,例如 ens5 (vNIC1)

如需配置路由,您需要知道 Private Service Connect 接口的默认网关的 IP 地址

在 Cloud Shell 中,我们将使用 1,因为 PSC 接口与 vNIC1 相关联。

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

示例生成默认 gw 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

为使用方子网添加路由

您必须为连接到您的 Private Service Connect 接口的每个使用方子网添加指向 Private Service Connect 接口默认网关的路由。这可确保从 Private Service Connect 接口发送到使用方网络出站流量的流量。

验证路由表

在 Cloud Shell 中验证当前路由。

ip route show

Example.

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 

在 Cloud Shell 中,将路由添加到 cosmo-subnet-1

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5

验证路由表

在 Cloud Shell 中,验证更新后的添加的路由。

ip route show

Example.

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 

创建 IP 表规则

在 Cloud Shell 中验证当前的 IP 表。

sudo iptables -t nat -L -n -v

示例:

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  

在 Cloud Shell 中更新 IP 表

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

在 Cloud Shell 中验证更新后的 IP 表。

sudo iptables -t nat -L -n -v

示例:

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. 为 PSC 接口创建 Linux IP 表 - fox

通过 PSC 接口实例,配置 Linux IP 表以允许提供方与使用方子网通信。

查找 Private Service Connect 接口的客机操作系统名称

如需配置路由,您需要知道 Private Service Connect 接口的客机操作系统名称,该名称与 Google Cloud 中接口的名称不同。

打开新的 Cloud Shell 标签页并更新您的项目设置。

在 Cloud Shell 中,执行以下操作:

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

在 Cloud Shell 中使用 IAP 登录 psc-interface 虚拟机 fox。

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

在 Cloud Shell 中,获取 psc-interface 实例的 IP 地址

ip a

示例:

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

查找 PSC 接口的网关 IP

在网络接口列表中,查找并存储与 Private Service Connect 接口的 IP 地址关联的接口名称,例如 ens5 (vNIC1)

如需配置路由,您需要知道 Private Service Connect 接口的默认网关的 IP 地址

在 Cloud Shell 中,我们将使用 1,因为 PSC 接口与 vNIC1 相关联。

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

示例生成默认 gw 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

为使用方子网添加路由

您必须为连接到您的 Private Service Connect 接口的每个使用方子网添加指向 Private Service Connect 接口默认网关的路由。这可确保从 Private Service Connect 接口发送到使用方网络出站流量的流量。

验证路由表

在 Cloud Shell 中验证当前路由。

ip route show

Example.

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 

在 Cloud Shell 中,将路由添加到 cosmo-subnet-1

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5

验证路由表

在 Cloud Shell 中,验证更新后的添加的路由。

ip route show

Example.

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

创建 IP 表规则

在 Cloud Shell 中验证当前的 IP 表。

sudo iptables -t nat -L -n -v

示例:

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         

在 Cloud Shell 中更新 IP 表。

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

在 Cloud Shell 中验证更新后的 IP 表。

sudo iptables -t nat -L -n -v

示例:

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. 更新路由表

在 Producer-vpc 中,创建通向使用方子网 192.168.20.0/28 的静态路由,下一个跃点用作内部负载平衡器。创建完成后,发往目标 192.168.20.0/28 的任何数据包(位于 Producer-vpc 内)都将被定向到内部负载平衡器。

打开新的 Cloud Shell 标签页并更新您的项目设置。

在 Cloud Shell 中,执行以下操作:

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

在 Cloud Shell 中,使用静态路由更新 Producer-vpc 路由表。

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. 验证从老虎到宇宙的成功连接

卷曲验证

我们通过执行 curl 来确认生产者虚拟机实例 tiger 可以与使用方实例 cosmo 通信。

打开新的 Cloud Shell 标签页并更新您的项目设置。

在 Cloud Shell 中,执行以下操作:

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

在 Cloud Shell 中使用 IAP 登录 Tiger 实例。

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

对本教程前面从老虎实例中标识的 Cosmo IP 地址执行 curl。

curl -v <cosmo's IP Address>

示例:

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

恭喜!您已经通过执行 curl 命令成功验证了从 Producer-vpc 到 backend-vpc 的连接。

17. 清理

从 Cloud Shell 中删除教程组件。

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

恭喜,您已成功配置并验证 Private Service Connect 接口,并通过 VPC 对等互连验证了使用方和提供方连接。

您创建了使用方基础架构,并添加了一个网络连接,以允许提供方创建多 NIC 虚拟机来连接使用方和提供方的通信。您学习了如何使用生产者 VPC 中的内部负载平衡器和静态路由,通过 VPC 对等互连使用 PSC 接口与第一方/第三方服务进行通信。

Cosmopup 认为教程很棒!!

e6d3675ca7c6911f.jpeg

后续操作

请查看下面的一些教程...

补充阅读材料和视频

参考文档