1. 簡介
在本程式碼研究室中,您將透過 H-VPN 執行南向連線,連至地端部署的 Postgres 資料庫,並使用從 Looker PSC 叫用的內部 TCP Proxy 負載平衡器和混合式網路端點群組,做為服務用戶。
Private Service Connect 是 Google Cloud 網路功能,可讓消費者從虛擬私有雲網路內,以私密方式存取代管服務。同樣地,代管服務生產端也能在自己的獨立虛擬私有雲網路中代管這些服務,並為消費者提供私人連線。舉例來說,如果您使用 Private Service Connect 存取 Looker,您就是服務用戶,而 Google 則是服務供應商,如圖 1 所示。
圖 1.

南向存取 (又稱反向 PSC) 可讓消費者以供應商身分建立已發布的服務,允許 Looker 存取地端部署、虛擬私有雲、代管服務和混合式環境中的端點。無論 Looker PSC 部署在哪個區域,您都可以在任何區域部署南向連線,如圖 2 所示。
圖 2.

課程內容
- 網路需求
- 建立 Private Service Connect 生產端服務
- 在 Looker 中建立 Private Service Connect 端點
- 使用「測試連線」從 Looker 建立與地端部署 Postgres 資料庫的連線
軟硬體需求
- 具備「擁有者」權限的 Google Cloud 專案
- 現有的 Looker PSC 執行個體

2. 建構項目
您將建立供應端網路 looker-psc-demo,部署內部 TCP Proxy 負載平衡器和混合式 NEG,並透過 Private Service Connect (PSC) 發布為服務。為展示地端資料庫,您將部署地端部署示範虛擬私有雲,並使用高可用性 VPN 連線至 looker-psc-demo 虛擬私有雲。
您將執行下列動作,驗證對 Producer 服務的存取權:
- 在 Looker 中建立與生產者服務連結相關聯的 PSC 端點
- 使用 Looker 控制台對地端部署 Postgres 資料庫執行連線驗證
3. 網路需求
以下是供應商網路的網路需求細目,本程式碼研究室中的消費者是 Looker PSC 執行個體。
元件 | 說明 |
虛擬私有雲 (looker-psc-demo) | 自訂模式虛擬私有雲 |
虛擬私有雲 (地端部署示範) | 自訂模式虛擬私有雲 |
PSC NAT 子網路 | 來自用戶端虛擬私有雲網路的封包會使用來源 NAT (SNAT) 進行轉譯,因此原始來源 IP 位址會轉換為供應商虛擬私有雲網路中 NAT 子網路的來源 IP 位址。 |
PSC 轉送規則子網路 | 用於為區域內部 TCP Proxy 負載平衡器分配 IP 位址 |
PSC NEG 子網路 | 用於為網路端點群組分配 IP 位址 |
僅限 Proxy 子網路 | 系統會指派一個內部 IP 位址給每個負載平衡器的Proxy 。從 Proxy 傳送到後端 VM 或端點的封包,其來源 IP 位址來自僅限 Proxy 的子網路。 |
混合型 NEG | 地端部署和其他雲端服務的處理方式,與其他 Cloud Load Balancing 後端相同。主要差異在於您使用混合式連線 NEG 設定這些後端的端點。端點必須是有效的 IP 位址和通訊埠組合,負載平衡器可透過混合式連線產品 (例如 Cloud VPN 或 Cloud Interconnect) 連線至這些端點。 |
後端服務 | 後端服務是負載平衡器與後端資源之間的橋樑。在本教學課程中,後端服務會與混合式 NEG 建立關聯。 |
Cloud Router |
|
高可用性 VPN | Google Cloud 虛擬私有雲網路之間的高可用性 VPN。在這個拓撲中,您可以在每個網路中使用高可用性 VPN 閘道,將兩個 Google Cloud 虛擬私有雲網路互相連線。虛擬私有雲網路可以位於相同或多個區域。 |
Cloud NAT | 地端部署示範虛擬私有雲用於網際網路輸出流量 |
4. 程式碼研究室拓撲

5. 設定和需求
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試使用自己的名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間會維持不變。 - 請注意,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟動 Cloud Shell
雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
在 Google Cloud 控制台中,點選右上工具列的 Cloud Shell 圖示:

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

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有作業。您不需要安裝任何軟體。
6. 事前準備
啟用 API
在 Cloud Shell 中,確認專案 ID 已設定完畢:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region
啟用所有必要服務:
gcloud services enable compute.googleapis.com
7. 建立供應商虛擬私有雲網路
虛擬私有雲網路
在 Cloud Shell 中執行下列操作:
gcloud compute networks create looker-psc-demo --subnet-mode custom
建立子網路
PSC 子網路會與 PSC 服務連結建立關聯,以進行網路位址轉譯。
在 Cloud Shell 中,建立 PSC NAT 子網路:
gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT
在 Cloud Shell 中,建立生產者轉送規則子網路:
gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
在 Cloud Shell 中,建立生產者區域專屬的僅限 Proxy 子網路:
gcloud compute networks subnets create $region-proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=looker-psc-demo \
--range=10.10.10.0/24
保留負載平衡器的 IP 位址
在 Cloud Shell 中,為負載平衡器保留內部 IP 位址:
gcloud compute addresses create hybrid-neg-lb-ip \
--region=$region \
--subnet=producer-psc-fr-subnet
在 Cloud Shell 中,查看保留的 IP 位址。
gcloud compute addresses describe hybrid-neg-lb-ip \
--region=$region | grep -i address:
輸出內容範例:
gcloud compute addresses describe hybrid-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
設定混合式 NEG
建立混合式 NEG,並將 –network-endpoint-type 設為 NON_GCP_PRIVATE_IP_PORT
在 Cloud Shell 中,建立用於存取地端部署資料庫的混合式 NEG:
gcloud compute network-endpoint-groups create on-prem-hybrid-neg \
--network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
--network=looker-psc-demo \
--zone=$zone
在 Cloud Shell 中,使用本教學課程稍後步驟產生的地端部署資料庫 IP:Port (192.168.10.4 和通訊埠 5432),更新 Hybrid NEG:
gcloud compute network-endpoint-groups update on-prem-hybrid-neg \
--add-endpoint=ip=192.168.10.4,port=5432 \
--zone=$zone
建立區域健康狀態檢查
在 Cloud Shell 中,建立探測地端部署資料庫通訊埠 (5432) 的健康狀態檢查:
gcloud compute health-checks create tcp on-prem-5432-healthcheck \
--region=$region \
--port=5432
建立網路防火牆政策和防火牆規則
在 Cloud Shell 中執行下列操作:
gcloud compute network-firewall-policies create looker-psc-demo-policy --global
gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy
下列防火牆規則允許 PSC NAT 子網路範圍的流量傳送至網路中的所有執行個體。
在 Cloud Shell 中執行下列操作:
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp
8. 建立生產端服務
建立負載平衡器元件
在 Cloud Shell 中建立後端服務:
gcloud compute backend-services create producer-backend-svc --region=$region --load-balancing-scheme=INTERNAL_MANAGED --protocol=TCP --region=$region --health-checks=on-prem-5432-healthcheck --health-checks-region=$region
在 Cloud Shell 中,將混合式 NEG 後端新增至後端服務:
gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=on-prem-hybrid-neg --network-endpoint-group-zone=$zone --balancing-mode=CONNECTION --max-connections=100 --region=$region
在 Cloud Shell 中,建立目標 TCP Proxy,將要求轉送至後端服務:
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=producer-backend-svc \
--region=$region
在下列語法中,建立轉送規則 (內部 TCP Proxy 負載平衡器)。
在 Cloud Shell 中執行下列操作:
gcloud compute forwarding-rules create producer-hybrid-neg-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=looker-psc-demo \
--subnet=producer-psc-fr-subnet \
--address=hybrid-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=5432
建立服務附件
在 Cloud Shell 中,建立服務附件 onpremdatabase1-svc-attachment:
gcloud compute service-attachments create onpremdatabase1-svc-attachment --region=$region --producer-forwarding-rule=producer-hybrid-neg-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet
接著,請取得並記下 selfLink URI 中以 projects 開頭的 Service Attachment,以便在 Looker 中設定 PSC 端點。
selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/onpremdatabase1-svc-attachment
在 Cloud Shell 中執行下列操作:
gcloud compute service-attachments describe onpremdatabase1-svc-attachment --region=$region
預期輸出內容範例:
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-09-01T16:07:51.600-07:00'
description: ''
enableProxyProtocol: false
fingerprint: cFt9rERR1iE=
id: '2549689544315850024'
kind: compute#serviceAttachment
name: onpremdatabase1-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '19348441121424360'
low: '2549689544315850024'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-hybrid-neg-fr
在 Cloud 控制台中,前往:
「網路服務」→「Private Service Connect」→「已發布的服務」


9. 在 Looker 中建立 PSC 端點連線
在下一節中,您將透過 Cloud Shell 中的 -psc-service-attachment 標記,將 Producer 服務連結與單一網域的 Looker Core PSC 建立關聯。
在 Cloud Shell 中,更新下列參數以符合您的環境,藉此建立 PSC 關聯:
- INSTANCE_NAME:Looker (Google Cloud Core) 執行個體的名稱。
- DOMAIN_1:onprem.database1.com
- SERVICE_ATTACHMENT_1:建立服務連結時擷取的 URI,即 onpremdatabase1-svc-attachment
- REGION:Looker (Google Cloud Core) 執行個體的代管區域。
在 Cloud Shell 中執行下列操作:
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION
範例:
gcloud looker instances update looker-psc-instance --psc-service-attachment domain=onprem.database1.com,attachment=projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment --region=$region
在 Cloud Shell 中,驗證 serviceAttachments connectionStatus 是否為「ACCEPTED」,並使用 Looker PSC 執行個體名稱更新:
gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json
範例:
gcloud looker instances describe looker-psc-instance --region=$region --format=json
範例:
{
"adminSettings": {},
"createTime": "2024-08-23T00:00:45.339063195Z",
"customDomain": {
"domain": "looker.cosmopup.com",
"state": "AVAILABLE"
},
"encryptionConfig": {},
"lookerVersion": "24.14.18",
"name": "projects/$project/locations/$region/instances/looker-psc-instance",
"platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
"pscConfig": {
"allowedVpcs": [
"projects/$project/global/networks/looker-psc-demo",
"projects/$project/global/networks/looker-shared-vpc"
],
"lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
"serviceAttachments": [
{
"connectionStatus": "ACCEPTED",
"localFqdn": "onprem.database1.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-09-01T23:15:07.426372901Z"
}
在 Cloud 控制台中驗證 PSC 端點
您可以在 Cloud 控制台驗證 PSC 連線
在 Cloud 控制台中,前往:
Looker → Looker 執行個體 → 詳細資料


建立地端部署虛擬私有雲網路
虛擬私人雲端網路
在 Cloud Shell 中執行下列操作:
gcloud compute networks create on-prem-demo --project=$project --subnet-mode=custom
建立 PostgreSQL 資料庫子網路
在 Cloud Shell 中執行下列操作:
gcloud compute networks subnets create database-subnet --project=$project --range=192.168.10.0/28 --network=on-prem-demo --region=$region
在 Cloud Shell 中,預留用於 onprem.database1.com 的內部 IPv4 位址 192.168.10.4:
gcloud compute addresses create on-prem-database1-ip --region=$region --subnet=database-subnet --addresses 192.168.10.4
為 on-prem-demo VPC 建立 Cloud Router
本教學課程使用 Cloud NAT 安裝軟體套件,因為 VM 執行個體沒有外部 IP 位址。
在 Cloud Shell 中,建立 Cloud Router,用於 Cloud NAT 和高可用性 VPN:
gcloud compute routers create on-prem-cr \
--region=$region \
--network=on-prem-demo \
--asn=65002
在 Cloud Shell 中建立 NAT 閘道:
gcloud compute routers nats create on-prem-nat --router=on-prem-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region $region
建立資料庫測試執行個體
建立 postgres 資料庫執行個體,用於測試及驗證與 Looker 的連線。
在 Cloud Shell 中建立執行個體:
gcloud compute instances create postgres-database \
--project=$project \
--zone=$zone \
--machine-type=e2-medium \
--subnet=database-subnet \
--no-address \
--private-network-ip 192.168.10.4 \
--image-family debian-12 \
--image-project debian-cloud \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt -y install postgresql postgresql-client postgresql-contrib -y"
建立網路防火牆政策和防火牆規則
在 Cloud Shell 中執行下列操作:
gcloud compute network-firewall-policies create on-prem-demo-policy --global
gcloud compute network-firewall-policies associations create --firewall-policy on-prem-demo-policy --network on-prem-demo --name on-prem-demo --global-firewall-policy
如要允許 IAP 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:
- 套用至所有您希望能透過 IAP 存取的 VM 執行個體。
- 允許來自 IP 範圍 35.235.240.0/20 的輸入流量。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址。
在 Cloud Shell 中執行下列操作:
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy on-prem-demo-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
下列防火牆規則允許流量從僅限 Proxy 的子網路範圍傳送至網路中的所有執行個體。
在 Cloud Shell 中執行下列操作:
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy on-prem-demo-policy --description "allow traffic from proxy only subnet" --direction INGRESS --src-ip-ranges 10.10.10.0/24 --global-firewall-policy --layer4-configs=tcp
10. 混合式連線
在下一節中,您將建立 Cloud Router,以便使用邊界閘道通訊協定 (BGP),在虛擬私有雲 (VPC) 和對等互連網路之間動態交換路由。
Cloud Router 可透過 Cloud VPN 通道設定 BGP 工作階段,連線至您的網路。並自動取得新的子網路 IP 位址範圍,然後通告至對等互連網路。
在下列步驟中,您將在 looker-psc-demo 虛擬私有雲和 地端部署-demo 虛擬私有雲之間部署高可用性 VPN,示範混合式 NEG 與 onprem.database1.com 的連線。
為 looker-psc-demo 建立高可用性 VPN 閘道
建立每個閘道時,系統會自動分配兩個外部 IPv4 位址,每個閘道介面各一個。
在 Cloud Shell 中建立高可用性 VPN 閘道:
gcloud compute vpn-gateways create looker-psc-demo-vpn-gw \
--network=looker-psc-demo \
--region=$region
為地端部署示範建立高可用性 VPN 閘道
建立每個閘道時,系統會自動分配兩個外部 IPv4 位址,每個閘道介面各一個。
在 Cloud Shell 中建立高可用性 VPN 閘道:
gcloud compute vpn-gateways create on-prem-vpn-gw \
--network=on-prem-demo\
--region=$region
驗證高可用性 VPN 閘道建立作業
使用控制台前往「混合式連線」→「VPN」→「Cloud VPN 閘道」。

為 looker-psc-demo 建立 Cloud Router
在 Cloud Shell 中建立 Cloud Router:
gcloud compute routers create looker-psc-demo-cr \
--region=$region \
--network=looker-psc-demo\
--asn=65001
為 looker-psc-demo 建立 VPN 通道
您會在每個高可用性 VPN 閘道上建立兩個 VPN 通道。
建立 VPN 通道 0
在 Cloud Shell 中建立 tunnel0:
gcloud compute vpn-tunnels create looker-psc-demo-tunnel0 \
--peer-gcp-gateway on-prem-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router looker-psc-demo-cr \
--vpn-gateway looker-psc-demo-vpn-gw \
--interface 0
建立 VPN 通道 1
在 Cloud Shell 中建立 tunnel1:
gcloud compute vpn-tunnels create looker-psc-demo-tunnel1 \
--peer-gcp-gateway on-prem-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router looker-psc-demo-cr \
--vpn-gateway looker-psc-demo-vpn-gw \
--interface 1
為地端部署示範建立 VPN 通道
您會在每個高可用性 VPN 閘道上建立兩個 VPN 通道。
建立 VPN 通道 0
在 Cloud Shell 中建立 tunnel0:
gcloud compute vpn-tunnels create on-prem-tunnel0 \
--peer-gcp-gateway looker-psc-demo-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router on-prem-cr \
--vpn-gateway on-prem-vpn-gw \
--interface 0
建立 VPN 通道 1
在 Cloud Shell 中建立 tunnel1:
gcloud compute vpn-tunnels create on-prem-tunnel1 \
--peer-gcp-gateway looker-psc-demo-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router on-prem-cr \
--vpn-gateway on-prem-vpn-gw \
--interface 1
驗證 VPN 通道建立作業
使用控制台前往「混合式連線」→「VPN」→「Cloud VPN 通道」。

11. 建立 BGP 鄰居
為 looker-psc-demo 建立 BGP 介面和對等互連
在 Cloud Shell 中建立 BGP 介面:
gcloud compute routers add-interface looker-psc-demo-cr \
--interface-name if-tunnel0-to-onprem \
--ip-address 169.254.1.1 \
--mask-length 30 \
--vpn-tunnel looker-psc-demo-tunnel0 \
--region $region
在 Cloud Shell 中建立 BGP 對等互連:
gcloud compute routers add-bgp-peer looker-psc-demo-cr \
--peer-name bgp-on-premises-tunnel0 \
--interface if-tunnel1-to-onprem \
--peer-ip-address 169.254.1.2 \
--peer-asn 65002 \
--region $region
在 Cloud Shell 中建立 BGP 介面:
gcloud compute routers add-interface looker-psc-demo-cr \
--interface-name if-tunnel1-to-onprem \
--ip-address 169.254.2.1 \
--mask-length 30 \
--vpn-tunnel looker-psc-demo-tunnel1 \
--region $region
在 Cloud Shell 中建立 BGP 對等互連:
gcloud compute routers add-bgp-peer looker-psc-demo-cr \
--peer-name bgp-on-premises-tunnel1 \
--interface if-tunnel2-to-onprem \
--peer-ip-address 169.254.2.2 \
--peer-asn 65002 \
--region $region
為地端部署示範建立 BGP 介面和對接
在 Cloud Shell 中建立 BGP 介面:
gcloud compute routers add-interface on-prem-cr \
--interface-name if-tunnel0-to-looker-psc-demo \
--ip-address 169.254.1.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel0 \
--region $region
在 Cloud Shell 中建立 BGP 對等互連:
gcloud compute routers add-bgp-peer on-prem-cr \
--peer-name bgp-looker-psc-demo-tunnel0 \
--interface if-tunnel1-to-looker-psc-demo \
--peer-ip-address 169.254.1.1 \
--peer-asn 65001 \
--region $region
在 Cloud Shell 中建立 BGP 介面:
gcloud compute routers add-interface on-prem-cr \
--interface-name if-tunnel1-to-looker-psc-demo \
--ip-address 169.254.2.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel1 \
--region $region
在 Cloud Shell 中建立 BGP 對等互連:
gcloud compute routers add-bgp-peer on-prem-cr \
--peer-name bgp-looker-psc-demo-tunnel1\
--interface if-tunnel2-to-looker-psc-demo \
--peer-ip-address 169.254.2.1 \
--peer-asn 65001 \
--region $region
前往「混合式連線能力」→「VPN」,查看 VPN 通道詳細資料。

透過高可用性 VPN 驗證 looker-psc-demo 學習到的路由
高可用性 VPN 通道和 BGP 工作階段建立完成後,Cloud Router 的預設行為是通告子網路路徑。查看 looker-psc-demo 已知的路徑。
使用控制台,依序前往「VPC network」(虛擬私有雲網路) →「VPC networks」(虛擬私有雲網路) →「looker-psc-demo」→「ROUTES」(路徑) →「REGION」(區域) →「VIEW」(檢視)
觀察 looker-psc-demo 已從 地端部署-demo VPC 瞭解資料庫子網路 192.168.10.0/28。

驗證地端部署示範虛擬私有雲透過高可用性 VPN 學習到路由
由於 Cloud Router 的預設行為是通告所有子網路,因此系統只會透過 BGP 通告 Proxy 子網路。與伺服器 onprem.database1.com 通訊時,混合式 NEG 會使用僅限 Proxy 的子網路做為來源位址。
觀察地端部署試用版已從 looker-psc-demo 瞭解僅限 Proxy 的子網路 10.10.10.0/24。
使用控制台,依序前往「虛擬私有雲網路」→「VPC networks」→「地端部署-demo」→「ROUTES」→「REGION」→「VIEW」

12. 建立 Looker postgres 資料庫
在下一節中,您將使用 Cloud Shell 透過 SSH 連線至 postgres-database VM。
在 Cloud Shell 中,對 postgres-database 執行個體執行 SSH:
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"
在 OS 中,找出並記下 postgres-database 執行個體的 IP 位址 (ens4):
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 noprefixroute
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:04 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 192.168.10.4/32 metric 100 scope global dynamic ens4
valid_lft 66779sec preferred_lft 66779sec
inet6 fe80::4001:c0ff:fea8:a04/64 scope link
valid_lft forever preferred_lft forever
在作業系統中登入 postgresql:
sudo -u postgres psql postgres
在 OS 中,輸入密碼提示:
\password postgres
在作業系統中,將 postgres 的密碼設為相同密碼 (輸入兩次):
postgres
範例:
user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
在 OS 中,退出 postgres:
\q
範例:
postgres=# \q
user@postgres-database:~$
在下一節中,您會在 IPv4 本機連線下方的 pg_hba.conf 檔案中,插入 postgres-database 執行個體 IP (192.168.10.4) 和僅限 Proxy 的子網路 (10.10.10.0/24)。
sudo nano /etc/postgresql/15/main/pg_hba.conf
以下螢幕截圖顯示更新完成的畫面:
在下一節中,請取消註解 postgresql.conf,讓系統監聽所有「*」IP 位址,如下列螢幕截圖所示:
sudo nano /etc/postgresql/15/main/postgresql.conf
更新前:

套用後:

在 OS 中,重新啟動 postgresql 服務:
sudo service postgresql restart
在 OS 中,確認 postgresql 狀態為「active」:
sudo service postgresql status
範例:
在 OS 中,確認 postgresql 狀態為「active」:
user@postgres-database:/$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
Active: active (exited) since Mon 2024-09-02 12:10:10 UTC; 1min 46s ago
Process: 20486 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 20486 (code=exited, status=0/SUCCESS)
CPU: 2ms
Sep 02 12:10:10 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Sep 02 12:10:10 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
13. 建立 postgres 資料庫
在下一節中,您將建立名為 postgres_looker 的 postgres 資料庫,以及用於驗證 Looker 與地端部署連線的 looker_schema 結構定義。
在 OS 中登入 postgres:
sudo -u postgres psql postgres
在 OS 中建立資料庫:
create database postgres_looker;
在 OS 中列出資料庫:
\l
在 OS 中,使用密碼 postgreslooker 建立使用者 postgres_looker:
create user postgres_looker with password 'postgreslooker';
在作業系統中,連線至資料庫:
\c postgres_looker;
在 OS 中建立結構定義 looker-schema,然後結束並返回 Cloud Shell 提示。
create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
Exit from the OS, returning you to cloud shell:
\q
範例:
user@postgres-database:/$ sudo -u postgres psql postgres
psql (15.8 (Debian 15.8-0+deb12u1))
Type "help" for help.
postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
postgres_looker | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
CREATE SCHEMA
CREATE TABLE
postgres_looker-# \q
14. 將 Looker 與 Postgres postgres-database 整合
在下一節中,您將使用 Looker 控制台建立與地端部署 postgres 資料庫執行個體的資料庫連線。
依序前往「ADMIN」(管理) →「DATABASE」(資料庫) →「CONNECTIONS」(連線),然後選取「ADD CONNECTION」(新增連線)
根據下方的螢幕截圖填寫連線詳細資料,然後選取「連線」

連線設定完成

15. 驗證 Looker 連線
在接下來的章節中,您將瞭解如何使用 Looker「測試」動作和 TCPDUMP,驗證 Looker 與地端部署 VPC 中 postgres 資料庫的連線能力。
如果工作階段已逾時,請從 Cloud Shell 登入 postgres 資料庫。
在 Cloud Shell 中執行下列操作:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"
從 OS 建立 TCPDUMP 篩選器,並使用僅限 Proxy 的子網路 10.10.10.0/24
sudo tcpdump -i any net 10.10.10.0/24 -nn
前往資料連線 ADMIN → DATABASE → CONNECTIONS → postgres-database → Test
選取「測試」後,Looker 會連線至 postgres 資料庫,如下所示:

清除所用資源
從單一 Cloud Shell 終端機刪除實驗室元件
gcloud compute service-attachments delete onpremdatabase1-svc-attachment --region=$region -q
gcloud compute forwarding-rules delete producer-hybrid-neg-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete producer-backend-svc --region=$region -q
gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy --name=looker-psc-demo --global-firewall-policy -q
gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q
gcloud compute routers nats delete on-prem-nat --router=on-prem-cr --router-region=$region -q
gcloud compute network-endpoint-groups delete on-prem-hybrid-neg --zone=$zone -q
gcloud compute addresses delete hybrid-neg-lb-ip --region=$region -q
gcloud compute vpn-tunnels delete looker-psc-demo-tunnel0 looker-psc-demo-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=$region -q
gcloud compute vpn-gateways delete looker-psc-demo-vpn-gw on-prem-vpn-gw --region=$region -q
gcloud compute routers delete looker-psc-demo-cr on-prem-cr --region=$region -q
gcloud compute instances delete postgres-database --zone=$zone -q
gcloud compute addresses delete on-prem-database1-ip --region=$region -q
gcloud compute networks subnets delete database-subnet --region=$region -q
gcloud compute network-firewall-policies rules delete 2001 --firewall-policy on-prem-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies rules delete 1000 --firewall-policy on-prem-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies associations delete --firewall-policy=on-prem-demo-policy --name=on-prem-demo --global-firewall-policy -q
gcloud compute networks subnets delete $region-proxy-only-subnet --region=$region -q
gcloud compute networks subnets delete producer-psc-nat-subnet --region=$region -q
gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q
gcloud compute networks delete on-prem-demo -q
gcloud compute networks delete looker-psc-demo -q
16. 恭喜
恭喜!您已成功設定並驗證連線,透過 Private Service Connect 支援的 Looker 控制台,使用高可用性 VPN 連線至地端部署資料庫。
您已建立生產者基礎架構,並瞭解如何建立混合式 NEG、生產者服務和 Looker PSC 端點,以便連線至生產者服務。
Cosmopup 認為程式碼研究室很棒!

後續步驟
查看一些程式碼研究室…
- 使用 Private Service Connect 發布及使用服務
- 透過 Private Service Connect 和內部 TCP Proxy 負載平衡器,經由混合式網路連線至地端部署服務
- 存取所有已發布的 Private Service Connect 程式碼研究室