透過 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 的優點

相較於使用虛擬私有雲對等互連,PSC 具備以下優點:

更妥善地控管私人 IP 空間

  • 身為服務用戶,您可以控管用於連線至您要存取的代管服務的私人 IP 位址。
  • 身為服務用戶,您無須擔心為虛擬私有雲中所用的後端服務保留私人 IP 位址範圍。您只需要從自有子網路選擇 IP 位址,即可連線至供應商服務。
  • 身為服務供應商,您可以選擇部署多用戶群模型,您的虛擬私有雲含有為多個消費者虛擬私有雲提供服務的服務。子網路範圍重疊的取用者不會再造成問題。
  • 身為服務供應商,您可根據需求將服務擴充至所需的 VM 執行個體數量,無須向消費者提供更多 IP 位址。

提升安全性和隔離效能

  • 身為服務用戶,只有您可以與服務供應商進行通訊。這種單向連線可大幅簡化防火牆設定,但也可降低來自服務供應商流量的惡意流量風險。
  • 身為服務供應商,您不需要根據消費者虛擬私有雲中的子網路範圍來變更防火牆規則。您只需針對服務設定的 NAT IP 位址範圍,建立防火牆規則即可。

提升擴充性

  • PSC 支援數千個消費者,實現擴充性高的設計,同時可讓服務生產端提供高擴充性的多用戶群或單一用戶群服務。
  • 如果您是使用私人服務連線的服務用戶,您可以視需要在虛擬私有雲中建立資源。規模不會受到在生產端虛擬私有雲中建立的這類資源數量影響。

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 執行個體或轉送規則等資源。子網路只會用於為傳入的消費者連線提供 IP 位址,以供 SNAT 使用。

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 位址,以及對應至生產端服務連結 (已發布的服務) 的 target-service-連結。

1ce5607c0c56d77d.jpeg

接著來看看生產端網路。請注意,生產者網路無法對應消費者網路,而是由供應商網路包含取用端服務使用的服務連結 (已發布的服務)。GKE Ingress L4 ILB (已發布的服務) 會公開生產端的服務連結,以便與 GKE Pod 通訊,相關聯的應用程式

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

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

如要進一步瞭解 GKE Private Service Connect 適用的 L4ILB,並取得這項研究室所用內容的直接存取權,請參考 以下內容

自修環境設定

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

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

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:

f6ef2b5f13479f3a.png

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 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. 部署工作負載和服務

下列資訊清單說明執行範例網頁應用程式容器映像檔的 Deployment。從 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:可連線至 consumerAllowList: 的消費端專案清單。只有在 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 控制台中,依序前往「網路服務」→「Private Service Connect」→「已發布的服務」

請透過研究室 gke-producer-l4-vpc, 中使用的網路找出服務,雖然 Service 和目標值可能不同

5a00836ee514b918.png

點選將您導向下方畫面的服務名稱,並記下「基本資訊」中顯示的服務連結詳細資料。另請注意「已連結的專案」是空白的,因為消費者尚未註冊服務。接受REJECT 仍會顯示為灰色,因為「連線偏好設定」已設為 "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 位址是用來向生產者發出通訊。以下語法驗證將靜態 IP 位址對應至消費者轉送規則。

1f3c90f1e139e906.png

在消費者虛擬私有雲中,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

查看已連結的服務

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

206bc00297aaa260.png

登入 consumer-instance-1 並測試 Producer Published Service 的存取權

在 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 Published Service 的存取權

在 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 控制台中辨識作業記錄 → 記錄檔探索工具
  2. 在「Query」(查詢) 欄位中,將下列項目更新為 yourconsumerproject,然後選取 [Run Query] (執行查詢)。

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 是用於存取生產端服務的 STATIC TCP IP,src_ip: 10.0.70.10 或 10.0.70.20 則是 VM 執行個體 IP 位址。允許處置。

2669743fd1f1cb0d.png

15. 驗證 - 生產者

afe738fc869f0d6e.png

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

89ded87a63888f60.png

按一下服務會顯示已連結的消費者專案和狀態,如下圖所示

15966d47423ebc5f.png

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

1f3c90f1e139e906.png

到目前為止,我們已確認這兩個執行個體都能存取已發布的服務,接下來請建立輸出防火牆規則,拒絕「consumer-instance-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 控制台中辨識作業記錄 → 記錄檔探索工具
  2. 在「Query」欄位中,將下列項目更新為您的 consumerproject,並選取 [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 是 STATIC TCP IP,src_ip: 10.0.70.10 或 10.0.70.20 是 VM 執行個體 IP 位址。拒絕處理。

a344f75f67590655.png

17. 清除步驟

生產端網路清除步驟

afe738fc869f0d6e.png

透過生產端專案終端機中的單一 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

清除消費者網路的步驟

透過消費者專案終端機中的單一 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 的優點
  • 給服務消費者的重要概念
  • 服務供應商的重要概念
  • 建立生產端環境
  • 透過服務連結公開服務 (生產端環境)
  • 建立消費者環境
  • 在消費者網路中建立轉送規則
  • 驗證客戶存取權
  • 啟用政策存取權控管
  • 使用輸出防火牆規則禁止存取用戶轉送規則