1. 簡介
只有使用私人服務存取權進行私人連線的 Looker (Google Cloud Core) 執行個體,才支援私人 IP 和公開 IP 設定。
同時具備私人 IP (私人服務存取) 連線和公開 IP 連線的 Looker (Google Cloud Core) 執行個體會擁有公開網址,所有傳入流量都會經過公開 IP 連線。傳出流量會透過虛擬私有雲轉送,您可以將虛擬私有雲設為只允許私人 IP 流量,如圖 1 所示。
Figure1
與 github.com 的通訊會解析為公開 IP 位址,因此無法從以私人或公開 + 私人方式部署的 Looker 執行個體連線。
在本程式碼研究室中,您將使用內部 TCP Proxy 負載平衡器和從 Looker PSA 叫用的網際網路網路端點群組 (NEG),執行與 GitHub 的南向 HTTPS 連線。
課程內容
- 網路需求
- 使用測試連線功能,從 Looker 建立至 GitHub 的連線
軟硬體需求
- 具備擁有者權限的 Google Cloud 專案
- GitHub 帳戶和存放區
- GitHub 個人存取權權杖 (傳統版)
- 現有的 Looker PSA 執行個體 (已啟用「公開 + 私人」或「僅私人」)
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. 程式碼研究室拓樸圖
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 圖示:
佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:
這個虛擬機器會載入您需要的所有開發工具。提供永久的 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"
更新 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 控制台中前往:
啟用開發人員模式 (頁面左下方),選取後畫面上會顯示「您目前處於開發人員模式」橫幅。
建立新專案
在 Cloud 控制台中,前往:
Develop → Projects
選取「新 LookML 專案」
提供專案名稱,選取「Blank Project」,然後點選「Create Project」。
選取「設定 Git」
設定 Git
使用 HTTPS 版 GitHub 詳細資料更新存放區網址,請務必在網址後方加上 .git,然後選取「Continue」(繼續)。
Example:
更新選取項目,加入您的 GitHub 使用者名稱和個人存取權杖 (舊版),然後選取「測試」和「完成設定」。
選取 Git 動作
選取「Test Git Connection」
驗證 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 認為程式碼研究室很棒!