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
学习内容
- 如何创建网络连接
- 生产者如何使用网络连接创建 PSC 接口作为后端
- 如何使用 ILB 作为下一个跃点建立从生产者到使用方的通信
- 如何允许通过 VPC 对等互连从生产者虚拟机 (tiger) 访问使用方虚拟机 (cosmo)
所需条件
- Google Cloud 项目
- IAM 权限
- Compute Network 管理员 (roles/compute.networkAdmin)
- 计算实例管理员 (roles/compute.instanceAdmin)
- 计算安全管理员 (roles/compute.securityAdmin)
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 认为教程很棒!!
后续操作
请查看下面的一些教程...
- 使用 Private Service Connect 通过 GKE 发布和使用服务
- 使用 Private Service Connect 发布和使用服务
- 使用 Private Service Connect 和内部 TCP 代理负载平衡器,通过混合网络连接到本地服务