1. 简介
Private Service Connect 接口是一种资源,允许提供方 Virtual Private Cloud (VPC) 网络发起与使用方 VPC 网络中的各种目的地的连接。提供方网络与使用方网络可以位于不同的项目和组织中。
如果网络连接接受来自 Private Service Connect 接口的连接,Google Cloud 会为该接口分配由网络连接指定的使用方子网的 IP 地址。使用方和提供方网络已连接,可以使用内部 IP 地址进行通信。
网络连接与 Private Service Connect 接口之间的连接与 Private Service Connect 端点与服务连接之间的连接类似,但存在以下两个主要区别:
- 网络连接允许提供方网络发起与使用方网络的连接(托管式服务出站流量),而端点则允许使用方网络发起与提供方网络的连接(托管式服务入站流量)。
- Private Service Connect 接口连接具有传递性。这意味着提供方网络可以与连接到使用方网络的其他网络通信。
构建内容
您将在使用方 VPC 中创建一个 psc-network-attachment,从而生成两个 PSC 接口作为 L4 内部负载平衡器的后端。提供方 VPC tiger 将向后端 VPC 中的 cosmo 发送 curl。在生产者的 VPC 中,您将创建一个静态路由,将目的地流量 192.168.20.0/28 的下一个跃点设置为内部负载平衡器,该负载平衡器将利用后端和后续 PSC 接口将流量路由到 cosmo。如需查看概览,请参阅图 1。
如果使用专用服务访问通道,则可以将相同的方法用于与客户 VPC 进行 VPC 对等互连的 Google 管理的服务。
图 1

学习内容
- 如何创建网络连接
- 提供方如何使用网络连接来创建 PSC 接口作为后端
- 如何使用 ILB 作为下一个跃点来建立从生产者到消费者的通信
- 如何通过 VPC 对等互连允许从提供方虚拟机 (tiger) 访问使用方虚拟机 (cosmo)
所需条件
- Google Cloud 项目
- IAM 权限
- Compute Network Admin (roles/compute.networkAdmin)
- Compute Instance Admin (roles/compute.instanceAdmin)
- Compute Security Admin (roles/compute.securityAdmin)
2. 准备工作
更新项目以支持教程
本教程使用 $变量来帮助在 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
创建后端 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 虚拟机实例执行 describe 操作。
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
记下 psc-network-attachment URI,提供方在创建 Private Service Connect 接口时会使用该 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 与后端 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. 提供方设置
创建提供方 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 接口是一种资源,允许提供方 Virtual Private Cloud (VPC) 网络发起与使用方 VPC 网络中的各种目的地的连接。提供方网络与使用方网络可以位于不同的项目和组织中。
如果网络连接接受来自 Private Service Connect 接口的连接,Google Cloud 会为该接口分配由网络连接指定的使用方子网的 IP 地址。使用方和提供方网络已连接,可以使用内部 IP 地址进行通信。
在本教程中,您将创建两个具有 Private Service Connect 网络连接的实例,这两个实例将作为内部负载平衡器的后端。
在 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"
多网卡验证
验证 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
示例生成默认网关 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
示例生成默认网关 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 的静态路由,并将下一个跃点设置为内部负载平衡器。创建后,任何从生产者 VPC 发往目标 192.168.20.0/28 的数据包都将定向到内部负载平衡器。
打开新的 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. 验证从 tiger 到 cosmo 的连接是否成功
Curl 验证
我们来执行 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
从 tiger 实例对本教程前面确定的 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 对等互连的连接。
您创建了使用方基础设施,并添加了网络连接,以允许提供方创建多网卡虚拟机来桥接使用方和提供方之间的通信。您已了解如何使用 PSC 接口,通过 VPC 对等互连并使用提供方 VPC 中的内部负载平衡器和静态路由与第一方/第三方服务进行通信。
Cosmopup 认为教程很棒!

后续操作
查看下列教程…
- 使用 Private Service Connect 通过 GKE 发布和使用服务
- 使用 Private Service Connect 发布和使用服务
- 使用 Private Service Connect 和内部 TCP 代理负载平衡器,通过混合网络连接到本地服务