Private Service Connect 介面代管服務

程式碼研究室簡介
schedule73 分鐘
subject上次更新時間:2023年6月9日
account_circle作者:Deepak Michael, Nick De Cristofaro

Private Service Connect 介面可讓生產端虛擬私有雲 (VPC) 網路,為消費者虛擬私有雲網路中的多個目的地啟動連線。生產端和消費者網路可以分屬於不同的專案和機構。

如果網路連結接受來自 Private Service Connect 介面的連線,Google Cloud 會從網路連結所指定的用戶子網路中分配 IP 位址。取用端和生產端網路彼此相連,並使用內部 IP 位址進行通訊。

網路連結和 Private Service Connect 介面之間的連線類似於 Private Service Connect 端點與服務連結之間的連線,但有以下兩點主要差異:

  • 網路連結可讓生產端網路啟動至消費者網路的連線 (代管服務輸出),而端點則可讓消費者網路啟動連至供應商網路 (代管服務輸入) 的連線。
  • Private Service Connect 介面是遞移性質,也就是說,生產端網路可以與其他連線至消費者網路的網路通訊。

建構項目

您會在消費者虛擬私有雲中建立單一 psc-network-連結,進而產生兩個 PSC 介面做為 L4 內部負載平衡器的後端。從生產端虛擬私有雲老虎將 curl 傳送至 boot-vpc 中的 curl。在生產端的 VPC 中,您將建立指向目的地流量 192.168.20.0/28 的下一個躍點的靜態路徑,該負載平衡器將利用後端和後續 PSC 介面,將流量轉送至 Cosmo 介面。請參閱圖 1 簡介。

使用私人服務存取權時,您也可以搭配虛擬私有雲對等互連的 Google 代管服務使用。這類服務會在虛擬私有雲對等互連。

圖 1

36dbc7f825a21cbd.png

課程內容

  • 如何建立網路連結
  • 生產端如何透過網路連結建立 PSC 介面做為後端
  • 如何使用 ILB 做為下一個躍點,建立生產者與消費者的通訊
  • 如何允許透過虛擬私有雲對等互連從生產端 VM (tiger) 存取用戶端 VM (Como)

軟硬體需求

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. 消費者設定

建立用戶端虛擬私有雲

在 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

建立後端虛擬私有雲

在 Cloud Shell 中執行以下操作:

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

建立後端虛擬私有雲子網路

在 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 會用於軟體套件安裝教學課程,因為 VM 執行個體沒有公開 IP 位址。Cloud NAT 可讓具有私人 IP 位址的 VM 存取網際網路。

在 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 連線至您的 VM 執行個體,請建立下列防火牆規則:

  • 適用於您要透過 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. 建立用戶 VM 執行個體

在 Cloud Shell 中建立用戶 VM 執行個體,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 VM 執行個體執行描述。

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. 在用戶端和後端虛擬私有雲之間建立虛擬私有雲對等互連

您會在用戶端和後端虛擬私有雲之間建立虛擬私有雲對等互連連線。這也會複製了 Google 為代管服務建立連線的客戶虛擬私有雲,以及跨機構對等互連以建立連線的方式。您必須透過各個虛擬私有雲設定虛擬私有雲對等互連。

用戶端虛擬私有雲到後端虛擬私有雲對等互連

建立從用戶端到後端虛擬私有雲的虛擬私有雲對等互連連線

在 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

建立從後端到用戶虛擬私有雲的虛擬私有雲對等互連連線

在 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

驗證虛擬私有雲對等互連狀態詳細資料

在 Cloud Shell 中,確認虛擬私有雲對等互連處於「運作中」狀態和「已連線」時間。

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. 生產端設定

建立生產端虛擬私有雲

在 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 中,建立用於執行個體老虎的子網路。

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 會用於軟體套件安裝教學課程,因為 VM 執行個體沒有公開 IP 位址。Cloud NAT 可讓具有私人 IP 位址的 VM 存取網際網路。

在 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 連線至您的 VM 執行個體,請建立下列防火牆規則:

  • 適用於您要透過 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

建立生產端 VM 執行個體

在 Cloud Shell 中,建立用戶 VM 執行個體,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. 建立生產端防火牆規則

在生產端虛擬私有雲中,建立輸入防火牆規則,允許從 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) 網路,為消費者虛擬私有雲網路中的多個目的地啟動連線。生產端和消費者網路可以分屬於不同的專案和機構。

如果網路連結接受來自 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 介面的訪客 OS 名稱

如要設定轉送功能,您必須知道 Private Service Connect 介面的訪客 OS 名稱,這個名稱與 Google Cloud 中的介面名稱不同。

在 Cloud Shell 中使用 IAP,登入 psc-interface vm 的 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 介面的訪客 OS 名稱

如要設定轉送功能,您必須知道 Private Service Connect 介面的訪客 OS 名稱,這個名稱與 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 vm 的 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 的封包都會導向至內部負載平衡器。

開啟新的 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. 驗證老虎與 Como 之間的連線成功

Curl 驗證

讓我們確認生產端 VM 執行個體「老虎」能執行 curl 來與用戶執行個體通訊。

開啟新的 Cloud Shell 分頁並更新專案設定。

在 Cloud Shell 中執行以下操作:

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

請在 Cloud Shell 中使用 IAP 登入老虎執行個體。

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 連至後端 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 介面,並透過虛擬私有雲對等互連來驗證用戶端和生產端連線能力。

您建立了用戶基礎架構,還新增了網路連結,允許生產端建立多 nic VM,用來橋接消費端和生產端的通訊。您已瞭解如何使用內部負載平衡器和生產端 vpc 中的靜態路徑,透過虛擬私有雲對等互連使用 PSC 介面與第一方/第三方服務進行通訊。

Cosmopup 認為教學課程非常精彩!

e6d3675ca7c6911f.jpeg

後續步驟

快來看看一些教學課程...

其他資訊與影片

參考文件