Looker PSA 南向 HTTPS 網際網路 NEG

程式碼研究室簡介
schedule38 分鐘
subject上次更新時間:2025年4月2日
account_circle作者:Deepak Michael, Emanuele Mazza

只有使用私人服務存取權進行私人連線的 Looker (Google Cloud Core) 執行個體,才支援私人 IP 和公開 IP 設定。

同時具備私人 IP (私人服務存取) 連線和公開 IP 連線的 Looker (Google Cloud Core) 執行個體會擁有公開網址,所有傳入流量都會經過公開 IP 連線。傳出流量會透過虛擬私有雲轉送,您可以將虛擬私有雲設為只允許私人 IP 流量,如圖 1 所示。

Figure1

9f587c14791dd92e.png

與 github.com 的通訊會解析為公開 IP 位址,因此無法從以私人或公開 + 私人方式部署的 Looker 執行個體連線。

在本程式碼研究室中,您將使用內部 TCP Proxy 負載平衡器和從 Looker PSA 叫用的網際網路網路端點群組 (NEG),執行與 GitHub 的南向 HTTPS 連線。

  • 網路需求
  • 使用測試連線功能,從 Looker 建立至 GitHub 的連線

軟硬體需求

5348de53f0a78a50.png

2. 建構項目

您將部署內部 TCP 代理負載平衡器和網際網路 NEG,並使用 github.com 的解析 IP 位址進行設定,藉此利用 Cloud NAT 將網際網路流量傳送至由 Looker 解析的 github.com 機構。

3. 網路需求

以下是網路需求的詳細說明:

元件

說明

虛擬私有雲 ($vpc_network)

自訂模式虛擬私有雲

轉送規則子網路

用於為區域性內部 TCP Proxy 負載平衡器分配 IP 位址

僅限 Proxy 的子網路

系統會指派一個內部 IP 位址給每個負載平衡器的 Proxy 。從 Proxy 傳送到後端 VM 或端點的封包,其來源 IP 位址來自僅限 Proxy 的子網路。

網際網路 NEG

用於定義負載平衡器的外部後端的資源。您無法只透過 Cloud VPN 或 Cloud Interconnect 存取端點。

後端服務

後端服務是負載平衡器與後端資源之間的橋樑。在本教學課程中,後端服務會與 Internet NEG 建立關聯。

Cloud Router

Cloud NAT 會使用 Cloud Router 提供控制層功能,但不會用於 BGP 工作階段管理。

Cloud NAT

區域性網際網路 NEG 會利用 Cloud NAT 進行網際網路傳出作業。

4. 程式碼研究室拓樸圖

c5871e5418d37f13.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

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 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]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network

啟用所有必要服務:

gcloud services enable compute.googleapis.com

7. 虛擬私有雲網路元件

虛擬私有雲網路

本教學課程的先決條件是現有的 PSA Looker 執行個體,因此已建立相關聯的 VPC。

在 Cloud Shell 中建立轉送規則子網路:

gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

在 Cloud Shell 中建立地區性僅限 Proxy 的子網路:

gcloud compute networks subnets create $region-proxyonly-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=$vpc_network \
  --range=10.10.10.0/24

建立 Public NAT 閘道

區域內部 TCP 代理負載平衡器會使用 NAT 閘道,透過設定選項 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB 進行網際網路輸出,因此同一個 NATGW 不會支援 GCE/GKE 網際網路輸出。為 GCE/GKE 網際網路出口部署額外的 NAT GW,並使用 –endpoint-types=ENDPOINT_TYPE_VM。

在 Cloud Shell 中建立 Cloud Router:

gcloud compute routers create $vpc_network-cloud-router --network $vpc_network --region $region

在 Cloud Shell 中,建立 Cloud NAT 閘道,讓 TCP Proxy 負載平衡器可連上網際網路:

gcloud compute routers nats create $vpc_network-natgw \
  --router=$vpc_network-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

保留負載平衡器的 IP 位址

在 Cloud Shell 中,為負載平衡器預留內部 IP 位址,稍後可用於 github.com 的 DNS A 記錄:

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=psa-fr-subnet

在 Cloud Shell 中查看保留的 IP 位址:

gcloud compute addresses describe internet-neg-lb-ip \
  --region=$region | grep -i address:

輸出內容範例:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

8. 網際網路 NEG

您可以透過兩種方式設定 Internet NEG 參照的外部端點: INTERNET_FQDN_PORT 或 INTERNET_IP_PORT。如果選擇 INTERNET_IP_PORT (選項 1) 格式,則只能使用可在網際網路上路由的公開 IP 位址;如果選擇 INTERNET_FQDN_PORT (選項 2) 格式,則 FQDN 可解析為可在網際網路上路由的公開 IP 位址,或解析為私人 IP 位址,這取決於端點的範圍:區域或全球。

方法 1:使用 IP 位址設定網際網路 NEG

Internet NEG 需要 Github.com 的解析 IP 位址,因此為了獲得最佳效能,請開啟本機終端機並執行 dig 指令,取得 github.com 的 IP 位址。

本機終端機的範例會產生已解析的 IP 位址 140.82.113.4

bash-3.2$ dig github.com
; <<>> DiG 9.10.6 <<>> github.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com.                        IN        A
;; ANSWER SECTION:
github.com.                60        IN        A        140.82.113.4
;; Query time: 409 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Sep 26 15:50:45 CDT 2024
;; MSG SIZE  rcvd: 65

建立網際網路 NEG,並將 –network-endpoint-type 設為 internet_ip_port。

在 Cloud Shell 中建立用於 github.com 的網路 NEG:

gcloud compute network-endpoint-groups create github-internet-neg \
    --network-endpoint-type=INTERNET_IP_PORT \
    --network=$vpc_network \
    --region=$region

在 Cloud Shell 中,使用 github.com 的解析 IP 位址和 443 通訊埠,更新網際網路 NEG github-internet-neg:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="ip=[your-resolved-ip],port=443" \
    --region=$region

Example:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="ip=140.82.113.4,port=443" \
    --region=$region

選項 2:使用 FQDN 設定網際網路 NEG

您可以視需要建立網際網路 NEG,並將 –network-endpoint-type 設為 internet_FQDN_port。

在 Cloud Shell 中建立用於 github.com 的網路 NEG:

gcloud compute network-endpoint-groups create github-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=$vpc_network \
    --region=$region

在 Cloud Shell 中,使用 FQDN github.com 更新網際網路 NEG github-internet-neg:

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="fqdn=github.com,port=443" \
    --region=$region

9. 建立 GitHub 服務

建立負載平衡器元件

在 Cloud Shell 中執行下列操作:

gcloud compute backend-services create psa-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region

在 Cloud Shell 中,建立目標 TCP Proxy,將要求轉送至後端服務:

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=psa-backend-svc  \
      --region=$region

在以下語法中建立轉送規則 (內部 TCP Proxy 負載平衡器)。

在 Cloud Shell 中執行下列操作:

gcloud compute forwarding-rules create psa-github-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=$vpc_network \
     --subnet=psa-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

10. GitHub DNS 區域

在下一個部分,您將為 GitHub.com 建立 DNS 回應政策,其中包含內部 TCP Proxy 負載平衡器 IP 位址的 A 記錄。

之後,DNS 對等連線會與 Looker PSA 共用 github.com 區域,讓您可透過內部負載平衡器搭配網際網路 NEG 和 Cloud NAT 連線至 GitHub。

在 Cloud Shell 中建立回應政策區域:

gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"

在 Cloud Shell 中,建立 DNS A 記錄,其中包含 TCP Proxy 負載平衡器 IP 位址 [insert-your-ip-address]:

gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"

Example:

gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"

7b41b2f44609e5ed.png

更新 DNS 對等互連

在本節中,您將使用 "gcloud services peered-dns-domains create" 語法,為私人服務連線建立對等 DNS 網域,該連線會將來自服務供應商虛擬私人雲端網路的記錄要求,傳送至消費者虛擬私人雲端網路進行解析。

在 Cloud Shell 中,建立 peered-dns-domain,讓 Looker 查詢 github.com:

gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.

11. 測試連線至 GitHub

在後續步驟中,您將使用 Looker Console 建立專案,驗證與 github.com 的 HTTPS 連線。

12. 建立新專案

啟用開發人員模式

在 Looker 控制台中前往:

啟用開發人員模式 (頁面左下方),選取後畫面上會顯示「您目前處於開發人員模式」橫幅。

70c9ded749decfbe.png

建立新專案

在 Cloud 控制台中,前往:

Develop → Projects

e8ae11e0392a776d.png

選取「新 LookML 專案」

65a3c2573e97e1e9.png

提供專案名稱,選取「Blank Project」,然後點選「Create Project」。

9185808e001fa540.png

選取「設定 Git」

42f5e51ce70642ad.png

設定 Git

使用 HTTPS 版 GitHub 詳細資料更新存放區網址,請務必在網址後方加上 .git,然後選取「Continue」(繼續)。

f5c448f6659b8fc1.png

Example:

4065ab1d196589f.png

更新選取項目,加入您的 GitHub 使用者名稱和個人存取權杖 (舊版),然後選取「測試」和「完成設定」。

1dc44d63c555a9ae.png

選取 Git 動作

b5903668a50a99ca.png

選取「Test Git Connection」

51b722e84f2df38c.png

驗證 Git 連線測試

8fb7386b739f60be.png

13. 清理

從單一 Cloud Shell 終端機刪除實驗室元件:

gcloud compute forwarding-rules delete psa-github-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete psa-backend-svc --region=$region -q

gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q

gcloud compute routers delete $vpc_network-cloud-router --region=$region -q

gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q

gcloud services peered-dns-domains delete github-com --network=$vpc_network -q

gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q

gcloud dns response-policies update github-com --networks= -q

gcloud dns response-policies delete github-com

14. 恭喜

恭喜!您已成功使用 Looker 控制台設定並驗證與 GitHub 的連線。

Cosmopup 認為程式碼研究室很棒!

c911c127bffdee57.jpeg

後續步驟

其他參考資料和影片

參考文件