透過混合型網路連結 Looker Cloud

1. 簡介

有了 Looker (Google Cloud Core),您就能輕鬆在 Google Cloud 控制台佈建、設定及管理 Looker 執行個體,過程簡便又順暢。您也可以透過控制台執行部分執行個體管理工作。

Looker (Google Cloud Core) 執行個體提供三種網路設定:

  • 公開:網路連線使用可透過網際網路存取的外部 IP 位址。
  • 私人:網路連線使用 Google 代管的內部虛擬私有雲 (VPC) IP 位址。
  • 公開和私人:網路連線會同時使用公開 IP 位址和私人 IP 位址,傳入流量會透過公開 IP 轉送,傳出流量則會以私人 IP 轉送。

在本教學課程中,您將部署完整的端對端私有網路 ,支援 Looker 透過高可用性 VPN 連線至地端 VPC,並可複製該網路,以滿足多雲和地端連線需求。

如果執行個體符合下列條件,Looker (Google Cloud Core) 就會支援私人 IP:

建構項目

在本教學課程中,您將在獨立 VPC 中建構完整的私有 Looker 網路部署,並與多雲和地端部署建立混合式連線。

您將設定名為 on-prem-vpc 的 VPC 網路,代表地端部署環境。在您的部署作業中,on-prem-vpc 不會存在,而是會使用混合式網路連線至地端部署資料中心或雲端服務供應商。

以下是本教學課程的主要步驟

  1. 在 us-central1 中建立獨立虛擬私有雲
  2. 為私人服務存取權分配 IP 子網路
  3. 在獨立 VPC 中部署 Looker 執行個體
  4. 建立 on-prem-vpc 和混合式網路
  5. 透過 BGP 通告及驗證 Looker IP 範圍
  6. 整合及驗證 Looker 和 PostgreSQL 資料通訊

Figure1

8436cc4802b670db.png

課程內容

  • 如何建立虛擬私有雲和相關聯的混合式網路
  • 如何在獨立 VPC 中部署 Looker
  • 如何建立地端部署虛擬私有雲和相關聯的混合式網路
  • 透過高可用性 VPN 將 on-prem-vpc 連線至 analytics-vps
  • 如何透過混合式網路宣傳 Looker 子網路
  • 如何監控混合式網路基礎架構
  • 如何將 PostgreSQL 資料庫與 Looker Cloud Core 整合

軟硬體需求

  • Google Cloud 專案

IAM 權限

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. 設定虛擬私有雲

建立 analytics-vpc

在 Cloud Shell 中執行下列操作:

gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom

建立 on-prem-vpc

在 Cloud Shell 中執行下列操作:

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

建立 PostgreSQL 資料庫子網路

在 Cloud Shell 中執行下列操作:

gcloud compute networks subnets create database-subnet-us-central1 --project=$projectid --range=172.16.10.0/27 --network=on-prem-vpc --region=us-central1

Cloud Router 和 NAT 設定

本教學課程使用 Cloud NAT 安裝軟體套件,因為資料庫 VM 執行個體沒有外部 IP 位址。

在 Cloud Shell 中建立 Cloud Router。

gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1

在 Cloud Shell 中建立 NAT 閘道。

gcloud compute routers nats create on-prem-nat-us-central1 --router=on-prem-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

建立資料庫測試執行個體

建立 postgres 資料庫執行個體,用於測試及驗證與 Looker 的連線。

在 Cloud Shell 中建立執行個體。

gcloud compute instances create postgres-database \
    --project=$projectid \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --subnet=database-subnet-us-central1 \
    --no-address \
   --image=projects/ubuntu-os-cloud/global/images/ubuntu-2304-lunar-amd64-v20230621 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

建立防火牆規則

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

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

透過 Cloud Shell

gcloud compute firewall-rules create on-prem-ssh \
    --network on-prem-vpc --allow tcp:22 --source-ranges=35.235.240.0/20

4. 私人服務存取權

私人服務存取權是指在您的虛擬私有雲網路與 Google 或第三方所擁有網路之間建立的私人連線。Google 或第三方 (提供服務的實體) 也稱為「服務生產端」。Looker Cloud Core 是服務生產者。

私人連線提供內部 IP 位址,可讓虛擬私有雲網路中的 VM 執行個體和您存取的服務進行專屬通訊。

整體來說,如要使用私人服務存取權,您必須在虛擬私有雲網路中分配 IP 位址範圍 (CIDR 區塊),然後與服務供應商建立私人連線

為服務分配 IP 位址範圍

建立私人連線之前,您必須分配要給服務供應商的虛擬私有雲端網路使用的 IPv4 位址範圍。這樣做可確保您的虛擬私有雲網路與服務生產端的網路之間不會發生 IP 位址衝突。

在虛擬私有雲網路中分配的範圍無法用於子網路 (主要與次要範圍) 及自訂靜態路徑的目的地。

系統不支援搭配私人服務存取權使用 IPv6 位址範圍。

在 Google Cloud 控制台中,為專案啟用 Service Networking API。啟用 API 時,您可能需要重新整理控制台頁面,確認 API 已啟用。

建立 IP 分配

如要指定位址範圍與前置字串長度 (子網路遮罩),請使用 addresses 和 prefix-length 標記。例如,如要分配 CIDR 區塊 192.168.0.0/22,請將位址指定為 192.168.0.0,並將前置字串長度指定為 22。

在 Cloud Shell 中,為 Looker 建立 IP 配置。

gcloud compute addresses create psa-range-looker \
    --global \
    --purpose=VPC_PEERING \
    --addresses=192.168.0.0 \
    --prefix-length=22 \
    --description="psa range for looker" \
    --network=analytics-vpc

在 Cloud Shell 中驗證 IP 配置。

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

範例:

userl@cloudshell$ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
NAME: psa-range-looker
ADDRESS/RANGE: 192.168.0.0/22
TYPE: INTERNAL
PURPOSE: VPC_PEERING
NETWORK: analytics-vpc
REGION: 
SUBNET: 
STATUS: RESERVED

建立私人連線

建立分配範圍後,您可以建立與服務供應商 (Looker Cloud Core) 的私人連線。建立 Looker 執行個體後,私人連線會在您的虛擬私有雲網路與服務供應商的網路之間,建立虛擬私有雲網路對等互連連線。

私人連線是您的虛擬私有雲網路與服務供應商之間的一對一關係。如果單一服務供應商提供多個服務,針對供應商的所有服務,您只需要一個私人連線即可。

如要連線至多個服務供應商,請針對各個服務供應商使用不重複的分配範圍。這樣做能協助您針對各個服務生產端管理網路設定,例如路徑與防火牆規則。

在 Cloud Shell 中建立私人連線,並記下作業名稱。

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc

範例:

user@cloudshell$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

在 Cloud Shell 中,檢查作業是否成功,並將 OPERATION_NAME 替換為上一步產生的名稱。

gcloud services vpc-peerings operations describe \
    --name=OPERATION_NAME

範例:

user@cloudshell$ gcloud services vpc-peerings operations describe \
    --name=operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

5. 建立 Looker (Google Cloud Core) 執行個體

事前準備

在 Google Cloud 控制台中,為專案啟用 Looker API 。啟用 API 時,您可能需要重新整理控制台頁面,確認 API 已啟用。

設定 OAuth 用戶端,以驗證及存取執行個體。

在下一節中,您需要使用 OAuth 用戶端 ID 和密鑰建立 Looker 執行個體。

不必提供已授權的 JavaScript 來源和重新導向 URI。

103601bca0b6ebe8.png

在 Cloud Console 中,根據提供的螢幕截圖建立執行個體。

前往「LOOKER」→「CREATE AN INSTANCE」(建立執行個體)

填入先前建立的 OAuth 用戶端 ID 和密鑰。

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

選取「建立」

建立執行個體時,系統會將您重新導向至控制台的「Instances」(執行個體) 頁面。您可能需要重新整理頁面,才能查看新執行個體的狀態。您也可以點選 Google Cloud 控制台選單中的通知圖示,查看執行個體建立活動。建立執行個體時,Google Cloud 控制台選單中的通知圖示會以載入圖示標示。

建立 Looker 執行個體後,系統會產生執行個體網址。記下網址。

5ac8a1b8b438dce6.png

6. 更新 OAuth 2.0 用戶端 ID

在下一個部分中,您需要更新先前建立的 OAuth 用戶端 ID「已授權的重新導向 URI」,方法是在執行個體網址中附加 /oauth2callback

完成後,您就可以使用執行個體網址登入 Looker UI。

在 Cloud 控制台中,依序前往「API 和服務」→「憑證」

選取 OAuth 2.0 用戶端 ID,然後更新執行個體網址,如下所示:

793c5b82ec34fb1f.png

7. 驗證 Looker 存取權

在 Cloud 控制台中前往 Looker,然後選取執行個體網址,開啟 Looker 使用者介面。

9d132a67c532279e.png

啟動後,系統會顯示如下方螢幕截圖所示的到達網頁,確認您已可存取 Looker Cloud Core。

b77055fd674f8a69.png

8. 混合式連線

在下一節中,您將建立 Cloud Router,以便使用邊界閘道通訊協定 (BGP),在虛擬私有雲 (VPC) 和對等互連網路之間動態交換路徑。

Cloud Router 可透過 Cloud VPN 通道設定 BGP 工作階段,連線至您的網路。並自動取得新的子網路 IP 位址範圍,然後通告至對等互連網路。

在本教學課程中,您會在 analytics-vpcon-prem-vpc 之間部署高可用性 VPN,說明如何建立 Looker 的私人連線。

analytics-vpc 建立高可用性 VPN 閘道

建立每個閘道時,系統會自動分配兩個外部 IPv4 位址,每個閘道介面各一個。請記下這些 IP 位址,以便稍後在設定步驟中使用。

在 Cloud Shell 中建立高可用性 VPN 閘道

gcloud compute vpn-gateways create analytics-vpn-gw \
   --network=analytics-vpc\
   --region=us-central1

on-prem-vpc 建立高可用性 VPN 閘道

建立每個閘道時,系統會自動分配兩個外部 IPv4 位址,每個閘道介面各一個。請記下這些 IP 位址,以便稍後在設定步驟中使用。

在 Cloud Shell 中建立高可用性 VPN 閘道。

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

驗證高可用性 VPN 閘道建立作業

使用控制台前往「混合式連線」→「VPN」→「Cloud VPN 閘道」。

a3973b2bbb832bae.png

為 analytics-vpc 建立 Cloud Router

在 Cloud Shell 中,建立位於 us-central1 的 Cloud Router

gcloud compute routers create analytics-cr-us-central1 \
   --region=us-central1 \
   --network=analytics-vpc\
   --asn=65001

為 on-prem-vpc 建立 Cloud Router

在 Cloud Shell 中,建立位於 us-central1 的 Cloud Router

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

為 analytics-vpc 建立 VPN 通道

您會在每個高可用性 VPN 閘道上建立兩個 VPN 通道。

建立 VPN 通道 0

在 Cloud Shell 中建立 tunnel0:

gcloud compute vpn-tunnels create analytics-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 0

建立 VPN 通道 1

在 Cloud Shell 中建立 tunnel1:

gcloud compute vpn-tunnels create analytics-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 1

為 on-prem-vpc 建立 VPN 通道

您會在每個高可用性 VPN 閘道上建立兩個 VPN 通道。

建立 VPN 通道 0

在 Cloud Shell 中建立 tunnel0:

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

建立 VPN 通道 1

在 Cloud Shell 中建立 tunnel1:

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

驗證 VPN 通道建立作業

使用控制台前往「混合式連線」→「VPN」→「Cloud VPN 通道」。

61c09b3d3102149d.png

9. 建立 BGP 鄰居

建立 BGP 工作階段

在本節中,您將設定 Cloud Router 介面和 BGP 對等互連。

為 analytics-vpc 建立 BGP 介面和對等互連

在 Cloud Shell 中建立 BGP 介面:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel0 \
    --region us-central1

在 Cloud Shell 中建立 BGP 對等互連:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

在 Cloud Shell 中建立 BGP 介面:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel1 \
    --region us-central1

在 Cloud Shell 中建立 BGP 對等互連:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

為 on-prem-vpc 建立 BGP 介面和對等互連

在 Cloud Shell 中建立 BGP 介面:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-analytics-vpc \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

在 Cloud Shell 中建立 BGP 對等互連:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel0 \
    --interface if-tunnel1-to-analytics-vpc \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

在 Cloud Shell 中建立 BGP 介面:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-analytics-vpc \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

在 Cloud Shell 中建立 BGP 對等互連:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel1\
    --interface if-tunnel2-to-analytics-vpc \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

前往「混合式連線」→「VPN」,查看 VPN 通道詳細資料。

ddd4a8f851d44fd6.png

透過高可用性 VPN 驗證 analytics-vpc 學習到的路由

由於已建立高可用性 VPN 通道和 BGP 工作階段,因此 analytics-vpc 會從 on-prem-vpc 取得路徑。使用控制台,依序前往「VPC network」(虛擬私有雲網路) →「VPC networks」(虛擬私有雲網路) →「analytics-vpc」→「ROUTES」(路徑) →「REGION」(區域) →「us-central1」→「VIEW」(檢視)

觀察 analytics-vpc 已從 on-prem-vpc 資料庫子網路 us-central1 172.16.10.0/27 學習路徑

57c7898390db4bcb.png

確認 on-prem-vpc 未透過高可用性 VPN 學習路徑

analytics-vpc 沒有子網路,因此 Cloud Router 不會向 on-prem-vpc 公告任何子網路。使用控制台,依序前往「VPC network」→「VPC networks」→「on-prem-vpc」→「ROUTES」→「REGION」→「us-central1」→「VIEW」

5b007e46a7c7026.png

10. 向地端部署通告 Looker 子網路

由於 Looker 私人服務連線 (PSA) 子網路是指派給 PSA,而非虛擬私有雲,因此 analytics-cr-us-central1 Cloud Router 不會自動通告該子網路。

您需要從 PSA 子網路 192.168.0.0/22 (psa-range-looker) 的 analytics-cr-central1 建立自訂路徑通告,該通告會發布至內部部署環境,並供工作負載存取 Looker。

在控制台中,依序前往「HYBRID CONNECTIVITY」→「CLOUD ROUTERS」→「analytics-cr-us-central1」,然後選取「EDIT」

在「Advertised routes」(播送的路由) 專區中,選取「Create custom routes」(建立自訂路由) 選項,根據下方範例更新欄位,選取「DONE」(完成),然後按一下「SAVE」(儲存)

87f95ee3d1cd8521.png

11. 確認 on-prem-vpc 已瞭解 Looker 子網路

由於系統已從 analytics-cr-us-central1 將 Looker PSA 子網路通告為自訂路徑通告,因此 on-prem-vpc 現在可以存取該子網路。

使用控制台,依序前往「VPC NETWORK」→「VPC NETWORKS」→「on-prem-vpc」→「ROUTES」→「REGION」→「us-central1」→「VIEW」

觀察從 analytics-vpc 通告的 Looker 路徑:

a987a76fd57ddedd.png

12. 驗證目前的虛擬私有雲對等互連

Looker Cloud Core 與 analytics-vpc 之間的連線是透過 VPC 對等互連建立,可交換透過 BGP 瞭解的自訂路徑。在本教學課程中,analytics-vpc 必須將 on-prem-vpc 學習到的路徑發布至 Looker。如要啟用這項功能,虛擬私有雲對等互連必須更新,才能匯出自訂路徑。

驗證目前匯入及匯出的路線。

依序前往「VPC NETWORK」(虛擬私有雲網路) →「VPC NETWORK PEERING」(虛擬私有雲網路對等互連) →「servicenetworking-googleapis-com」

f6d9395712934cd8.png

下方的螢幕截圖詳細說明 analytics-vpc 從 Google 管理的對等互連虛擬私有雲網路 (servicesnetworking) 匯入 psa-range-looker。

86a0e8c3534c6986.png

選取「EXPORTED ROUTES」後,系統不會顯示任何匯出至對等互連虛擬私有雲網路的路徑,因為 1) 系統未在 analytics-vpc 中設定子網路,2) 系統未選取「Export custom routes」。

a52de427fa73fb22.png

13. 更新虛擬私有雲對等互連

依序前往「VPC NETWORK」(虛擬私有雲網路) →「VPC NETWORK PEERING」(虛擬私有雲網路對等互連) →「servicenetworking-googleapis-com」→「EDIT」(編輯)

選取「EXPORT CUSTOM ROUTES」(匯出自訂路徑) →「SAVE」(儲存)

a2309e4c3a7cee80.png

14. 驗證更新後的虛擬私有雲對等互連

驗證匯出的路徑。

依序前往「VPC NETWORK」(虛擬私有雲網路) →「VPC NETWORK PEERING」(虛擬私有雲網路對等互連) →「servicenetworking-googleapis-com」

選取「EXPORTED ROUTES」(匯出的路徑) 後,系統會顯示內部部署虛擬私有雲路徑 (資料庫子網路 172.16.10.0/27) 已匯出至由 analytics-vpc 代管 Looker 的對等互連虛擬私有雲網路。

47e953268d78a469.png

15. 建立 Looker postgres 資料庫

在下一節中,您將使用 Cloud Shell 透過 SSH 連線至 postgres-database VM。

在 Cloud Shell 中,對 postgres-database 執行個體執行 ssh**。**

 gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

在 OS 中,找出並記下 postgres-database 執行個體的 IP 位址 (ens4)。

ip a

範例:

user@postgres-database:~$ 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 mq state UP group default qlen 1000
    link/ether 42:01:ac:10:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 172.16.10.2/32 metric 100 scope global dynamic ens4
       valid_lft 84592sec preferred_lft 84592sec
    inet6 fe80::4001:acff:fe10:a02/64 scope link 
       valid_lft forever preferred_lft forever

在作業系統中登入 postgresql。

sudo -u postgres psql postgres

在作業系統中,輸入密碼提示。

\password postgres

在 OS 中,將 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:~$ 

在下一節中,您將在 pg_hba.conf 檔案中插入 postgres-database 執行個體 IP 位址和 Looker Private Google Access 子網路 (192.168.0.0/22),如下方螢幕截圖所示:

178364a8ee9b6233.png

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

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

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

更新前:

aad52092c0a9408.png

套用後:

7e80b916d29e097c.png

在 OS 中,重新啟動 postgresql 服務。

sudo service postgresql restart

在 OS 中,驗證 postgresql 狀態是否為有效。

sudo service postgresql status

範例:

在 OS 中,驗證 postgresql 狀態是否為有效。

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 Sat 2023-07-01 23:40:59 UTC; 7s ago
    Process: 4073 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4073 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Jul 01 23:40:59 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Jul 01 23:40:59 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

16. 建立 postgres 資料庫

在下一節中,您將建立名為 postgres_looker 的 postgres 資料庫,以及用於驗證 Looker 與內部部署連線的 looker_schema 結構定義。

在作業系統中登入 postgres。

sudo -u postgres psql postgres

在 OS 中建立資料庫。

create database postgres_looker;

在 OS 中列出資料庫。

\l

在 OS 中,使用密碼 looker 建立使用者 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

範例:

user@postgres-database$ sudo -u postgres psql postgres
psql (15.3 (Ubuntu 15.3-0ubuntu0.23.04.1))
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 SCHEMA
postgres_looker=# create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
CREATE TABLE
postgres_looker=# exit

退出作業系統,返回 Cloud Shell。

\q
exit

17. 在地端部署虛擬私有雲中建立防火牆

在下一節中,建立啟用記錄功能的 Ingress 防火牆,允許 Looker 子網路與 postgres-database 執行個體通訊。

在 Cloud Shell 中建立 on-prem-vpc 防火牆。

gcloud compute --project=$projectid firewall-rules create looker-access-to-postgres --direction=INGRESS --priority=1000 --network=on-prem-vpc --action=ALLOW --rules=all --source-ranges=192.168.0.0/22 --enable-logging

18. 在 analytics-vpc 中建立私人 DNS

雖然 Looker 是部署在 Google 管理的虛擬私有雲中,但透過與服務網路對等互連,即可存取 analytics-vpc 私人 DNS。

在下一節中,您會在 analytics-vpc 中建立私人 DNS 區域,其中包含 postgres-database 執行個體完整網域名稱 (postgres.analytics.com)) 和 IP 位址的 A 記錄。

在 Cloud Shell 中,建立私人區域 analytics.com。

gcloud dns --project=$projectid managed-zones create gcp-private-zone --description="" --dns-name="analytics.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/analytics-vpc"

在 Cloud Shell 中,找出 postgres-database 執行個體的 IP 位址。

gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:

範例:

user@cloudshell$ gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
  networkIP: 172.16.10.2

在 Cloud Shell 中建立 A 記錄,並務必新增先前識別的 IP 位址。

gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="your-postgres-database-ip"

範例:

user@cloudshell$ gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="172.16.10.2"
NAME: postgres.analytics.com.
TYPE: A
TTL: 300
DATA: 172.16.10.2

從 Cloud Shell 對等互連 dns-suffix analytics.com 至服務網路,允許 Looker 存取 analytics-vpc 私人區域。

gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.

19. 將 Looker 與 Postgres postgres-database 整合

在下一節中,您將使用 Cloud 控制台建立資料庫連線,連至地端的 postgres-database 執行個體。

在 Cloud 控制台中前往 Looker,然後選取執行個體網址,開啟 Looker 使用者介面。

9d132a67c532279e.png

啟動後,系統會顯示到達網頁,如下方螢幕截圖所示。

b77055fd674f8a69.png

依序前往「ADMIN」(管理) →「DATABASE」(資料庫) →「CONNECTIONS」(連線),然後選取「ADD CONNECTION」(新增連線)

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

c8cca15252c2020d.png

連線成功

3e51b7e2cc62fb45.png

20. 驗證 Looker 連線

在接下來的章節中,您將瞭解如何使用 Looker「測試」動作和 TCPDUMP,驗證 Looker 與內部部署 VPC 中 postgres 資料庫的連線。

如果工作階段已逾時,請從 Cloud Shell 登入 postgres 資料庫。

在 Cloud Shell 中執行下列操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

從 OS 建立 TCPDUMP 篩選器,並使用 psa-range-looker 子網路 192.168.0.0/22

sudo tcpdump -i any net 192.168.0.0/22 -nn

前往資料連線 「管理」→「資料庫」→「連線」→「選取」→「測試」

選取「測試」後,Looker 會成功連線至 postgres 資料庫,如下所示:

ef25b837b6a41fe.png

返回 OS 終端機,確認 TCPDUMP 已識別出 psc-range-looker 正在連線至地端 postgres-database 執行個體。

新增附註,說明 Looker 會顯示 PSA 範圍內的任何 IP

user@postgres-database$ sudo tcpdump -i any net 192.168.0.0/22 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
00:16:55.121631 ens4  In  IP 192.168.1.24.46892 > 172.16.10.2.5432: Flags [S], seq 2221858189, win 42600, options [mss 1366,sackOK,TS val 4045928414 ecr 0,nop,wscale 7], length 0
00:16:55.121683 ens4  Out IP 172.16.10.2.5432 > 192.168.1.24.46892: Flags [S.], seq 1464964586, ack 2221858190, win 64768, options [mss 1420,sackOK,TS val 368503074 ecr 4045928414,nop,wscale 7], length 0

21. 安全性建議

我們提供幾項安全性建議和最佳做法,協助您保護 Looker 和 Postgres 資料庫。包括:

  • 為 Looker 設定最低權限的資料庫帳戶權限,但仍允許執行必要功能。
  • 用戶端與 Looker UI 之間,以及 Looker 與資料庫之間傳輸的資料,都會使用 TLS 1.2 以上版本加密
  • 系統預設會加密靜態資料,客戶也可以為 Looker 執行個體 ( https://cloud.google.com/looker/docs/looker-core-cmek) 和 Postgres ( https://cloud.google.com/sql/docs/postgres/configure-cmek) 採用 CMEK
  • Looker 存取權控管 - Looker 管理員可以授予內容存取權、資料存取權和功能存取權,控管主體或使用者群組在 Looker 中可查看及執行的操作。Looker 管理員可透過這些選項定義特定角色,包括模型和權限集,並建立精細的資料存取權控管機制。
  • Looker 支援稽核記錄和資料存取記錄,可擷取使用者活動的相關人事時地物資訊。稽核記錄預設為啟用,但資料存取記錄需要明確啟用
  • 目前 VPC-SC 僅支援設定 私人 IP 的 Enterprise 和 Embed 執行個體

22. 清除所用資源

刪除 Looker Cloud Core 執行個體,前往:

LOOKER → looker-tutorial → DELETE

e5a2e3af9e7ffd40.png

在 Cloud Shell 中刪除教學課程元件。

gcloud compute vpn-tunnels delete analytics-vpc-tunnel0 analytics-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete analytics-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet

gcloud compute routers delete analytics-cr-us-central1 on-prem-cr-us-central1 on-prem-cr-us-central1-nat --region=us-central1 --quiet

gcloud compute instances delete postgres-database --zone=us-central1-a --quiet

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

gcloud compute firewall-rules delete looker-access-to-postgres on-prem-ssh --quiet

gcloud dns record-sets delete postgres.analytics.com. --type=A --zone=gcp-private-zone
        
gcloud dns managed-zones delete gcp-private-zone

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute addresses delete psa-range-looker --global --quiet

gcloud compute networks delete analytics-vpc --quiet

23. 恭喜

恭喜!您已成功設定並驗證混合式網路的 Looker 連線,可跨地端和多雲端環境進行資料通訊。

您也使用 Looker 的「測試」工具和 postgres 資料庫執行個體中的 TCPDUMP,成功測試 Looker Cloud Core 與 postgres 資料庫的連線。

Cosmopup 認為教學課程很棒!

e6d3675ca7c6911f.jpeg

延伸閱讀和影片

參考文件