透過 Private Service Connect 透過 GKE 發布及使用服務

1. 簡介

服務供應商可透過 Private Service Connect,以私密方式向服務消費者提供服務。Private Service Connect 具有下列優點:

  • 服務供應商虛擬私有雲網路可支援多個服務消費者。
  • 每個消費者都會連線至他們定義的內部 IP 位址。Private Service Connect 會執行網路位址轉譯 (NAT),將要求轉送至服務供應商。

45b90d50690dd111.png

圖 2. Private Service Connect 使用端點和服務連結,可讓服務使用者將消費者虛擬私有雲網路中的流量傳送至服務供應商的虛擬私有雲網路中的服務 (按一下即可放大)。

課程內容

  • Private Service Connect 的優點
  • 服務消費者適用的重要概念
  • 服務供應商的重要概念
  • 建立生產者環境
  • 透過服務連結公開服務 (生產端環境)
  • 建立消費者環境
  • 在消費者網路中建立轉送規則
  • 驗證消費者存取權
  • 啟用政策存取權控管
  • 使用傳出防火牆規則封鎖對取用者轉送規則的存取權

軟硬體需求

  • 瞭解如何部署 GKE 叢集和服務
  • 瞭解內部負載平衡器
  • 能夠在兩個專案中建立虛擬私有雲
  • 可建立 GKE 叢集

2. Private Service Connect 的優點

與使用 VPC 對等互連相比,使用 PSC 有多項優點:

進一步控管私人 IP 空間

  • 服務消費者可以控管用於連線至要存取的代管服務的私人 IP 位址。
  • 服務消費者不必擔心為虛擬私有雲中使用的後端服務預留私人 IP 位址範圍。您只需要從自己的子網路選擇 IP 位址,即可連線至生產者服務。
  • 身為服務生產端,您可以選擇部署多租戶模型,讓 VPC 包含可為多個消費者 VPC 提供服務的服務。消費者擁有重疊子網路範圍的問題已不復存在。
  • 服務供應商可以視需要將服務擴充至多個 VM 執行個體,不必為了取得更多 IP 位址而聯絡服務消費者。

提升安全性和隔離功能

  • 服務消費者只能主動與服務供應商通訊。這種單向連線大幅簡化了防火牆設定,同時也降低了服務供應商惡意流量帶來的風險。
  • 服務供應商不需要根據消費者 VPC 中的子網路範圍變更防火牆規則。您只要為服務設定的 NAT IP 位址範圍建立防火牆規則即可。

提升擴充性

  • PSC 支援數千名消費者,因此可實現高度可擴充的設計,並讓服務生產者提供高度可擴充的多租戶或單一租戶服務。
  • 身為使用 Private Service Connect 的服務消費者,您可以在虛擬私有雲中視需要建立資源。這項規模不會受到供應商虛擬私有雲中建立的這類資源數量影響。

3. 服務消費者的重要概念

您可以使用 Private Service Connect 端點,取用虛擬私有雲網路外部的服務。服務消費者會建立 Private Service Connect 端點,連線至目標服務。

端點

您可以使用 Private Service Connect 端點連線至目標服務。端點在虛擬私有雲網路中具有內部 IP 位址,且以轉送規則資源為基礎。

您將流量傳送至端點,端點會將流量轉送至虛擬私有雲網路外部的目標。

目標

Private Service Connect 端點具有目標,也就是您要連線的服務:

  • API 套裝組合
  • 所有 API:大多數 Google API
  • VPC-SC:VPC Service Controls 支援的 API
  • 其他虛擬私有雲網路中的已發布服務。這項服務可由貴機構或第三方管理。

已發布的服務

如要將端點連線至服務生產端的服務,您需要該服務的服務連結。服務連結 URI 的格式為:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. 服務生產者的重要概念

如要讓服務可供消費者使用,請建立一或多個專用子網路,用於消費者 IP 位址的網路位址轉譯 (NAT)。接著,您會建立參照這些子網路的服務附件

Private Service Connect 子網路

如要公開服務,服務供應商必須先建立一或多個子網路,並將用途設為 Private Service Connect。

從消費者虛擬私有雲網路傳送要求時,系統會使用來源 NAT (SNAT) 將消費者的來源 IP 位址轉換為從其中一個 Private Service Connect 子網路選取的 IP 位址。

如要保留消費者連線 IP 位址資訊,請參閱「查看消費者連線資訊」。

這些子網路無法用於 VM 執行個體或轉送規則等資源。子網路僅用於為傳入的消費者連線 SNAT 提供 IP 位址。

Private Service Connect 子網路每 63 個用戶端 VM 至少須包含一個 IP 位址,這樣每個用戶端 VM 就能分配到 1,024 個網路位址轉譯來源元組。

Private Service Connect 子網路的最小大小為 /24。

服務附件

服務供應商會透過服務連結公開服務。

  • 如要公開服務,服務生產者會建立服務連結,參照服務的負載平衡器轉送規則。
  • 如要存取服務,服務消費者會建立參照服務連結的端點。

連線偏好設定

建立服務時,您可以選擇服務的提供方式。系統提供以下兩個選項:

  • 自動接受所有專案的連線:任何服務消費者都可以設定端點,並自動連線至服務。
  • 接受所選專案的連線:服務使用者設定端點以連線至服務,服務供應商則接受或拒絕連線要求。

規定和限制

  • 適用 Private Service Connect 的限制。
  • 您可以在 GKE 1.21.4-gke.300 以上版本中建立服務附件
  • 您無法在多個服務附件設定中使用相同的子網路。
  • 您必須建立使用內部 TCP/UDP 負載平衡器的 GKE 服務。

5. 測試環境

除了對應至生產端服務附件 (已發布服務) 的目標服務附件外,消費者網路還包含用於發出服務生產端要求的靜態 IP 位址。

1ce5607c0c56d77d.jpeg

現在來看看製作人網路。請注意,生產者網路沒有對應至消費者網路,而是包含消費者用於服務的服務附件 (已發布的服務)。生產者的服務附件會由 GKE 輸入 L4 ILB (發布的服務) 公開,以便與 GKE Pod 和相關聯的應用程式通訊。

從消費者虛擬私有雲網路傳送要求時,系統會使用 NAT 子網路,並透過來源 NAT (SNAT) 將消費者的來源 IP 位址轉換為從其中一個 Private Service Connect 子網路選取的 IP 位址。

這些子網路無法用於 VM 執行個體或轉送規則等資源。子網路僅用於為傳入的消費者連線 SNAT 提供 IP 位址。

如要進一步瞭解 GKE Private Service Connect 的 L4ILB,並直接存取用於製作本實驗室參考資料的內容,請參閱 下列內容。

自修實驗室環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串,您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中不得重複,且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為 PROJECT_ID),因此如果您不喜歡該字串,可以產生另一個隨機字串,或是嘗試使用自己的字串,看看是否可用。專案建立後,系統就會「凍結」該值。
  • 還有第三個值,也就是部分 API 使用的「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要停用資源,避免在本教學課程結束後繼續產生帳單費用,請按照程式碼研究室結尾的「清除」操作說明操作。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

啟動 Cloud Shell

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

在 GCP 主控台,按一下右上角工具列的 Cloud Shell 圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的內容:

f6ef2b5f13479f3a.png

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本實驗室的所有工作都可在瀏覽器上完成。

6. 事前準備

程式碼研究室需要兩個專案,但 PSC 並無此要求。請注意,這些參照支援單一或多個專案。

單一專案 - 更新專案以支援生產者和消費者網路

在 Cloud Shell 中,確認專案 ID 已設定完畢

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

多個專案 - 更新專案以支援製作人網路

在 Cloud Shell 中,確認專案 ID 已設定完畢

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

請注意下列著色程式碼慣例:

f251ebb137e37136.png

7. 建立生產者虛擬私有雲網路

afe738fc869f0d6e.png

虛擬私人雲端網路

透過 Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

建立 GKE 叢集子網路

透過 Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

建立 GKE 叢集

透過 Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

建立 Private Service Connect 的子網路 (NAT 子網路)

您必須建立一或多個專屬子網路,才能搭配 Private Service Connect 使用。如果您使用 Google Cloud 控制台發布服務,可以在該程序中建立子網路。

如要瞭解 Private Service Connect 子網路,請參閱「Private Service Connect 子網路」。

透過 Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. 部署工作負載和服務

下列資訊清單說明執行範例網路應用程式容器映像檔的部署。從 Cloud Shell 將資訊清單儲存為 my-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

從 Cloud Shell 將資訊清單套用至叢集

kubectl apply -f my-deployment.yaml

建立服務

下列資訊清單說明一項服務,該服務會在 TCP 連接埠 8080 上建立內部 TCP/UDP 負載平衡器。將資訊清單儲存為 Cloud Shell 中的 my-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

從 Cloud Shell 將資訊清單套用至叢集

kubectl apply -f my-service.yaml

建立 ServiceAttachment

下列資訊清單說明 ServiceAttachment,可向服務消費者公開您建立的服務。從 Cloud Shell 將資訊清單儲存為 my-psc.yaml

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

從 Cloud Shell 將資訊清單套用至叢集

kubectl apply -f my-psc.yaml

ServiceAttachment 具有下列欄位:

  • connectionPreference:連線偏好設定,決定客戶連線至服務的方式。您可以使用 ACCEPT_AUTOMATIC 自動核准專案,也可以使用 ACCEPT_MANUAL 明確核准專案。詳情請參閱「使用 Private Service Connect 發布服務」。
  • natSubnets:要用於服務連結的子網路資源名稱清單。
  • proxyProtocol:設為 true 時,要求中會提供消費者來源 IP 和 Private Service Connect 連線 ID。這是選填欄位,如未提供,預設值為 false。
  • consumerAllowList:允許連線至 ServiceAttachment 的消費者專案清單。只有在 connectionPreferenceACCEPT_MANUAL 時,才能使用這個欄位。如要進一步瞭解這個欄位和其他選項,請參閱「使用 Private Service Connect 發布服務」。

製作人驗證

查看服務附件詳細資料

您可以使用 Cloud Shell 中的下列指令,查看 ServiceAttachment 的詳細資料

kubectl describe serviceattachment emoji-sa

查看 GKE L4 ILB

在 Cloud 控制台中,依序前往「網路服務」→「負載平衡」→「前端」

找出與先前定義的節點子網路 192.168.10.0/24 對齊的前端 IP 位址 (請參閱下方的螢幕截圖,您的 IP 位址可能不同)。

ed7a25ed4774977b.png

查看已發布的服務

在 Cloud Console 中,依序前往「網路服務」→「Private Service Connect」→「已發布的服務」

找出實驗室使用的網路服務 (gke-producer-l4-vpc,),請參閱下方的螢幕截圖,但您的服務和目標值可能不同

5a00836ee514b918.png

按一下服務名稱,畫面前進至下圖所示畫面,並記下「基本資訊」中填入的服務附件詳細資料。此外,請注意「已連結的專案」為空白,因為消費者尚未向服務註冊。由於「連線偏好設定」設為「ACCEPT_AUTOMATICALLY」,因此「接受」和「拒絕」會維持灰色狀態。您隨時可以修改服務連結 YAML (my-psc.yaml),將這個選項變更為「ACCEPT_MANUAL」

497f5f43920018c0.png

e246063a23771273.png

9. 建立消費者虛擬私有雲網路

1f3c90f1e139e906.png

在下節中,我們會在獨立專案中設定消費者虛擬私有雲。消費者和生產者網路之間的通訊,是透過消費者網路中定義的服務連結完成。

程式碼研究室需要兩個專案,但 PSC 並非必要。請注意,這些參照支援單一或多個專案。

單一專案 - 更新專案以支援生產者和消費者網路

在 Cloud Shell 中,確認專案 ID 已設定完畢

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

多個專案 - 更新專案以支援消費者網路

在 Cloud Shell 中,確認專案 ID 已設定完畢

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

虛擬私人雲端網路

透過 Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

為 PSC 建立子網路

透過 Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1

為 VM 執行個體建立子網路

透過 Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

建立靜態 IP 位址,存取已發布的服務

透過 Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100

建立防火牆規則

如要允許 IAP 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:

  • 套用至所有您希望能透過 IAP 存取的 VM 執行個體。
  • 允許來自 IP 範圍 35.235.240.0/20 的輸入流量。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址

透過 Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

雖然 PSC 不需要輸出防火牆規則,但建議您建立這類規則,監控消費者 PSC 流量流向生產者服務連結

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

10. 建立消費者測試執行個體 1

透過 Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. 建立消費者測試執行個體 2

透過 Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. 建立服務連結

在上一個步驟中,您已將 Producer Service Attachment 字串複製到安全位置,現在請將儲存的值插入「target-service-attachment」欄位。

7abaccc4e24f1ef7.png

透過 Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. 驗證 - 消費者

我們會使用 CURL 和防火牆記錄,驗證消費者和生產者之間的通訊。

在 Consumer 的專案中,靜態 IP 位址用於發起與 Producer 的通訊。執行下列語法,即可驗證靜態 IP 位址與 Consumer 轉送規則的對應關係。

1f3c90f1e139e906.png

從 Consumer VPCs Cloud 使用殼層識別轉送規則和靜態 IP

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

輸出內容如下,我們會在後續步驟中使用 10.0.60.100 連線至製作人

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

查看已連結的服務

在雲端控制台中,依序前往「網路服務」→「Private Service Connect」→「已連線的端點」,然後查看新建立的端點

206bc00297aaa260.png

登入 consumer-instance-1,測試存取 Producer 發布的服務

在 Cloud Shell 中點選「+」開啟新分頁

81f3210b29faebd3.png

在 Cloud Shell 中執行下列操作:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

登入 consumer-instance-1 執行個體後,對轉送規則 IP 位址 10.0.60.100 執行 curl

在 Cloud Shell 中執行下列操作:

user@consumer-instance-1:~$ curl 10.0.60.100

輸出範例

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

登入 consumer-instance-2,測試存取 Producer 發布的服務

在 Cloud Shell 中點選「+」開啟新分頁

81f3210b29faebd3.png

在 Cloud Shell 中執行下列操作:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

在 Cloud Shell 中執行下列操作:

user@consumer-instance-2:~$ curl 10.0.60.100

輸出範例

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. 防火牆記錄 - 已分配驗證

使用記錄檔總管驗證防火牆規則「vpc-consumner-psc」是否擷取 VM 執行個體與靜態 IP 之間的流程

  1. 在 Cloud 控制台中,依序前往「Operations Logging」→「Log Explorer」
  2. 在「查詢」欄位中,將下方項目更新為 yourconsumerproject,然後選取「執行查詢」

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. 查詢結果會提供以下資訊 (如螢幕截圖所示)

23e427b3060473.png

  1. 展開記錄 (jsonPayload → Connection),並找出下列輸出內容。請注意 dest_ip:10.0.60.100 是用來存取 Producer Service 的靜態 TCP IP,而 src_ip:10.0.70.10 或 10.0.70.20 則是 VM 執行個體 IP 位址。處置方式為「允許」。

2669743fd1f1cb0d.png

15. 驗證 - 製作人

afe738fc869f0d6e.png

在 Producer 專案中,確認服務連結已成功連線。依序前往「網路服務」→「Private Service Connect」→「已發布的服務」

89ded87a63888f60.png

按一下服務,即可查看已連結的消費者專案和狀態,如下圖所示

15966d47423ebc5f.png

16. 限制已發布服務的存取權

1f3c90f1e139e906.png

到目前為止,我們已確認兩個執行個體都能存取已發布的服務,現在要建立輸出防火牆規則,拒絕使用端執行個體 2 存取已發布的服務。

根據預設,GCP 允許所有輸出流量,但拒絕所有輸入流量。在下列步驟中,我們會根據先前定義的網路標記「google2」建立防火牆規則,在建立 consumer-instance-2 時,拒絕存取已發布的服務。

7fa2cda1dfec33a.png

點選「+」開啟新的 Cloud Shell 分頁,並在 Cloud Shell 中執行下列防火牆規則

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

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

現在,讓我們測試 consumer-instance-2 是否可以存取已發布的服務。如果工作階段逾時,您需要開啟新的 Cloud Shell +,並登入 VM,詳情請見下文。

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

在 Cloud Shell 中執行下列操作:

user@consumer-instance-2:~$ curl 10.0.60.100

輸出範例

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

防火牆記錄 - 驗證遭拒

使用記錄檔總管驗證防火牆規則「psc-endpoint-deny-egress」是否擷取 VM 執行個體與靜態 IP 之間的流程

  1. 在 Cloud 控制台中,依序前往「Operations Logging」→「Log Explorer」
  2. 在「Query」欄位中,將下方項目更新為您的消費者專案,然後選取「Run Query」。

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

  1. 查詢結果會提供以下資訊 (如螢幕截圖所示)

83b4fc7348ac93cd.png

  1. 展開記錄並找出下列輸出內容。請記下 dest_ip:10.0.60.100 是靜態 TCP IP,而 src_ip:10.0.70.10 或 10.0.70.20 則是 VM 執行個體 IP 位址。處置結果為「已拒絕」。

a344f75f67590655.png

17. 清除步驟

清除生產者網路的步驟

afe738fc869f0d6e.png

從 Producer 專案終端機的單一 Cloud Shell 刪除實驗室元件

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

消費者網路清理步驟

從 Consumer 專案終端機中的單一 Cloud Shell 刪除實驗室元件

gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet

gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18. 恭喜!

恭喜您完成本程式碼研究室。

涵蓋內容

  • Private Service Connect 的優點
  • 服務消費者適用的重要概念
  • 服務供應商的重要概念
  • 建立生產者環境
  • 透過服務連結公開服務 (生產端環境)
  • 建立消費者環境
  • 在消費者網路中建立轉送規則
  • 驗證消費者存取權
  • 啟用政策存取權控管
  • 使用輸出防火牆規則封鎖對取用者轉送規則的存取權