1. 簡介
只有使用私人服務連線進行私人連線的 Looker (Google Cloud Core) 執行個體,才支援私人 IP 和公開 IP 設定。
如果 Looker (Google Cloud Core) 執行個體同時具備私人 IP (私人服務連線) 連線和公開 IP 連線,則會擁有公開網址,所有傳入流量都會透過公開 IP 連線。輸出流量會透過 VPC 傳送,您可以設定 VPC,只允許私人 IP 流量,如圖 1 所示。
Figure1

github.com 的通訊會解析為公開 IP 位址,因此無法從部署為「私人」或「公開 + 私人」的 Looker 執行個體連線。
在本程式碼研究室中,您將使用內部 TCP Proxy 負載平衡器和網際網路網路端點群組 (NEG),從 Looker PSA 叫用 GitHub 的南向 HTTPS 連線。
課程內容
- 網路需求
- 使用「測試連線」從 Looker 建立與 GitHub 的連線
軟硬體需求
- 具備「擁有者」權限的 Google Cloud 專案
- GitHub 帳戶和存放區
- GitHub 個人存取權杖 (傳統版)
- 現有 Looker PSA 執行個體,已啟用公開 + 私人或僅啟用私人

2. 建構項目
您將部署內部 TCP Proxy 負載平衡器和網際網路 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 存取。 |
後端服務 | 後端服務是負載平衡器與後端資源之間的橋樑。在本教學課程中,後端服務會與網際網路 NEG 建立關聯。 |
Cloud Router | Cloud NAT 依賴 Cloud Router 提供控制層功能,但不依賴 Cloud Router 管理 BGP 工作階段。 |
Cloud NAT | 區域性網際網路 NEG 會利用 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]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
啟用所有必要服務:
gcloud services enable compute.googleapis.com
7. 虛擬私有雲網路元件
虛擬私有雲網路
本教學課程的前提是您已擁有 PSA Looker 執行個體,因此相關聯的虛擬私有雲已建立。
在 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 Proxy 負載平衡器會使用 NAT 閘道,透過設定選項「–endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB」輸出網際網路,因此同一個 NATGW 不支援 GCE/GKE 網際網路輸出。部署額外的 NAT 閘道,並使用 –endpoint-types=ENDPOINT_TYPE_VM,以供 GCE/GKE 網際網路輸出。
在 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
設定 網際網路 NEG 參照的外部端點有兩種方式:INTERNET_FQDN_PORT 或 INTERNET_IP_PORT。如果選擇 INTERNET_IP_PORT (選項 1) 格式,只能使用可透過網際網路路由傳輸的 IP 位址;如果選擇 INTERNET_FQDN_PORT (選項 2) 格式,FQDN 可解析為可透過網際網路路由傳輸的 IP 位址,或解析為私人 IP 位址,視端點範圍 (區域或全域) 而定。
選項 1:使用 IP 位址設定網際網路 NEG
網際網路 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
範例:
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 中,建立包含 TCP Proxy 負載平衡器 IP 位址的 DNS A 記錄:[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]"
範例:
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"

更新 DNS 對等互連
在本節中,您將使用 「gcloud services peered-dns-domains create」語法,為私人服務連線建立對等互連的 DNS 網域,將來自服務供應商虛擬私有雲網路中特定命名空間的記錄要求,傳送至消費者虛擬私有雲網路進行解析。
在 Cloud Shell 中,建立 Looker 將查詢 github.com 的對等互連 DNS 網域:
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. 測試與 GitHub 的連線
在下列步驟中,您將使用 Looker 控制台建立專案,驗證與 github.com 的 HTTPS 連線。
12. 建立新專案
啟用開發模式
在 Looker 控制台中,前往:
啟用開發模式 (頁面左下角),選取後會顯示「You are in Development Mode」橫幅。

建立新專案
在 Cloud 控制台中,前往:
「開發」→「專案」

選取「新 LookML 專案」

提供專案名稱,選取「空白專案」,然後選取「建立專案」。

選取「設定 Git」

設定 Git
使用 HTTPS GitHub 詳細資料更新存放區網址,請務必在網址後方附加 .git,然後選取「繼續」。

範例:

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

選取「Git 動作」

選取「測試 Git 連線」

驗證 Git 連線測試

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