Private Service Connect 接口代管式服务

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

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 可访问的所有 VM 实例。
  • 允许来自 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

记下提供方在创建 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 和后端 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 可访问的所有 VM 实例。
  • 允许来自 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"

多 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

示例会生成默认网关 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 的静态路由,将下一个跃点设置为内部负载平衡器。创建后,任何发送到目标 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. 验证 tiger 到 cosmo 的成功连接

Curl 验证

我们来确认一下,提供方虚拟机实例 tiger 是否可以通过执行 curl 命令与使用方实例 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 命令验证了从 provider-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 虚拟机来桥接使用方和提供方通信。您了解了如何使用 PSC 接口通过 VPC 对等互连与第一方/第三方服务通信,方法是使用提供方的 VPC 中的内部负载平衡器和静态路由。

Cosmopup 认为教程很棒!

e6d3675ca7c6911f.jpeg

后续操作

查看下列教程…

深入阅读和视频

参考文档