1. 簡介
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
課程內容
- 如何建立網路連結
- 生產端如何透過網路連結建立 PSC 介面做為後端
- 如何使用 ILB 做為下一個躍點,建立生產者與消費者的通訊
- 如何允許透過虛擬私有雲對等互連從生產端 VM (tiger) 存取用戶端 VM (Como)
軟硬體需求
- Google Cloud 專案
- 身分與存取權管理權限
- Compute 網路管理員 (roles/compute.networkAdmin)
- Compute 執行個體管理員 (roles/compute.instanceAdmin)
- Compute 安全管理員 (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. 消費者設定
建立用戶端虛擬私有雲
在 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 認為教學課程非常精彩!
後續步驟
快來看看一些教學課程...
- 透過 Private Service Connect 透過 GKE 發布及使用服務
- 使用 Private Service Connect 發布及使用服務
- 使用 Private Service Connect 和內部 TCP Proxy 負載平衡器,透過混合型網路連線至地端部署服務