Looker PSC 南向混合式 NEG 至地端

1. 簡介

在本程式碼研究室中,您將透過 H-VPN 執行南向連線,連至地端部署的 Postgres 資料庫,並使用從 Looker PSC 叫用的內部 TCP Proxy 負載平衡器和混合式網路端點群組,做為服務用戶。

Private Service Connect 是 Google Cloud 網路功能,可讓消費者從虛擬私有雲網路內,以私密方式存取代管服務。同樣地,代管服務生產端也能在自己的獨立虛擬私有雲網路中代管這些服務,並為消費者提供私人連線。舉例來說,如果您使用 Private Service Connect 存取 Looker,您就是服務用戶,而 Google 則是服務供應商,如圖 1 所示。

圖 1.

145ea4672c3a3b14.png

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

圖 2.

259493afd914f68b.png

課程內容

  • 網路需求
  • 建立 Private Service Connect 生產端服務
  • 在 Looker 中建立 Private Service Connect 端點
  • 使用「測試連線」從 Looker 建立與地端部署 Postgres 資料庫的連線

軟硬體需求

def88091b42bfe4d.png

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

  • Cloud NAT 依賴 Cloud Router 提供控制層功能,但不依賴 Cloud Router 管理 BGP 工作階段。
  • Cloud Router 用於為 psc-looker-demo 和 地端部署-demo 虛擬私有雲之間建立的 高可用性 VPN 建立 BGP。

高可用性 VPN

Google Cloud 虛擬私有雲網路之間的高可用性 VPN。在這個拓撲中,您可以在每個網路中使用高可用性 VPN 閘道,將兩個 Google Cloud 虛擬私有雲網路互相連線。虛擬私有雲網路可以位於相同或多個區域。

Cloud NAT

地端部署示範虛擬私有雲用於網際網路輸出流量

4. 程式碼研究室拓撲

79aeb28b38f237da.png

5. 設定和需求

自修實驗室環境設定

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

啟動 Cloud Shell

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

Google Cloud 控制台中,點選右上工具列的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 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」→「已發布的服務」

9f436251a3ae2cc7.png

4c3e8e73d40d1238.png

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 執行個體 → 詳細資料

2d4684d722d31e4b.png

993cdaf748f4c030.png

建立地端部署虛擬私有雲網路

虛擬私人雲端網路

在 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 閘道」。

7f1b504616504866.png

為 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 通道」。

c2fcb340a7614070.png

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 通道詳細資料。

78ab590317919bf5.png

透過高可用性 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。

c11a11ed8b0491c8.png

驗證地端部署示範虛擬私有雲透過高可用性 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」

b0073faed026931f.png

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

以下螢幕截圖顯示更新完成的畫面:eaff2ed6d27fa7cc.png

在下一節中,請取消註解 postgresql.conf,讓系統監聽所有「*」IP 位址,如下列螢幕截圖所示:

sudo nano /etc/postgresql/15/main/postgresql.conf

更新前:

65e0b1074dc48644.png

套用後:

14a0d1fa5455e23e.png

在 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」(新增連線)

根據下方的螢幕截圖填寫連線詳細資料,然後選取「連線」

5900fdf0b698cbfc.png

連線設定完成

4817157fd3b1277e.png

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 資料庫,如下所示:

774f9313ece41034.png

清除所用資源

從單一 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 認為程式碼研究室很棒!

c911c127bffdee57.jpeg

後續步驟

查看一些程式碼研究室…

延伸閱讀和影片

參考文件