Looker PSA 南向 HTTPS 網際網路 NEG

1. 簡介

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

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

Figure1

9f587c14791dd92e.png

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

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

課程內容

  • 網路需求
  • 使用「測試連線」從 Looker 建立與 GitHub 的連線

軟硬體需求

5348de53f0a78a50.png

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. 程式碼研究室拓撲

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

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

7b41b2f44609e5ed.png

更新 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」橫幅。

70c9ded749decfbe.png

建立新專案

在 Cloud 控制台中,前往:

「開發」→「專案」

e8ae11e0392a776d.png

選取「新 LookML 專案」

65a3c2573e97e1e9.png

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

9185808e001fa540.png

選取「設定 Git」

42f5e51ce70642ad.png

設定 Git

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

f5c448f6659b8fc1.png

範例:

4065ab1d196589f.png

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

1dc44d63c555a9ae.png

選取「Git 動作」

b5903668a50a99ca.png

選取「測試 Git 連線」

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

後續步驟

延伸閱讀和影片

參考文件