1. 簡介
在本程式碼研究室中,您將使用內部 TCP Proxy 負載平衡器和從 Looker PSC 以服務消費者身分叫用的網路網路端點群組 (NEG),執行與 GitLab 自管環境的南向 HTTPS 連線。
Private Service Connect 是 Google Cloud 網路的功能,可讓消費者在虛擬私有雲網路內,以私人方式存取代管服務。同樣地,這項功能也允許代管服務供應商在各自的獨立虛擬私有雲網路中代管這些服務,並為用戶提供私人連線。舉例來說,如果您使用 Private Service Connect 存取 Looker,您就是服務使用者,而 Google 則是服務供應商,如圖 1 所示。
圖 1.
南向存取權 (也稱為反向 PSC) 可讓使用者以供應商的身分建立已發布服務,讓 Looker 存取內部部署的端點、虛擬私有雲中的代管服務和網際網路。南向連線可部署在任何區域,不受 Looker PSC 部署位置影響,如圖 2 所示。
圖 2.
課程內容
- 網路需求
- 建立 Private Service Connect 生產端服務
- 在 Looker 中建立 Private Service Connect 端點
- 建立與 GitLab 自行管理執行個體的連線
軟硬體需求
- 具備擁有者權限的 Google Cloud 專案
- GitLab 帳戶和存放區
- 現有的 Looker PSC 執行個體
2. 建構項目
您將建立名為 looker-psc-demo 的供應者網路,用於部署內部 TCP 代理負載平衡器,以及透過 Private Service Connect (PSC) 發布為服務的網際網路 NEG。發布後,您需要執行下列動作,驗證對 Producer 服務的存取權:
- 在 Looker 中建立與製作者服務連結的 PSC 端點
- 使用 Looker 主控台建立新專案,並測試與 GitLab 自管環境的 HTTPS 連線。
3. 網路需求
以下是供應商網路的網路需求細目,本程式碼研究室中的消費者是 Looker PSC 執行個體。
元件 | 說明 |
虛擬私有雲 (looker-psc-demo) | 自訂模式虛擬私有雲 |
PSC NAT 子網路 | 來自消費者 VPC 網路的封包會使用來源 NAT (SNAT) 進行轉譯,以便將原始來源 IP 位址轉換為供應者 VPC 網路中 NAT 子網路的來源 IP 位址。 |
PSC 轉送規則子網路 | 用於為區域性內部 TCP Proxy 負載平衡器分配 IP 位址 |
PSC NEG 子網路 | 用於為網路端點群組分配 IP 位址 |
僅限 Proxy 的子網路 | 系統會指派一個內部 IP 位址給每個負載平衡器的 Proxy 。從 Proxy 傳送到後端 VM 或端點的封包,其來源 IP 位址來自僅限 Proxy 的子網路。 |
網際網路 NEG | 用於定義負載平衡器的外部後端的資源,設定為 FQDN,表示 Gitlab 自行管理的內部 FQDN。網際網路 FQDN 會在 VPC 內執行 DNS 查詢,以便解析。 |
後端服務 | 後端服務是負載平衡器與後端資源之間的橋樑。在本教學課程中,後端服務會與 Internet NEG 建立關聯。 |
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]
echo $project
echo $region
啟用所有必要服務:
gcloud services enable compute.googleapis.com
7. 建立供應商虛擬私有雲網路
虛擬私有雲網路
在 Cloud Shell 中執行下列操作:
gcloud compute networks create looker-psc-demo --subnet-mode custom
建立子網路
為進行網路位址轉譯,PSC 子網路會與 PSC 服務連結。
在 Cloud Shell 中建立 PSC NAT 子網路:
gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT
在 Cloud Shell 中建立生產者轉送規則子網路:
gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
在 Cloud Shell 中建立僅限 Proxy 的 Producer 區域子網路:
gcloud compute networks subnets create $region-proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=looker-psc-demo \
--range=10.10.10.0/24
保留負載平衡器的 IP 位址
在 Cloud Shell 中,為負載平衡器保留內部 IP 位址:
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=producer-psc-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
設定網際網路 NEG
建立網際網路 NEG,並將 –network-endpoint-type 設為 internet-fqdn-port (可存取外部後端的主機名稱和通訊埠)。
在 Cloud Shell 中建立用於存取 Gitlab 自助管理執行個體 (gitlabonprem.com) 的網際網路 NEG。
gcloud compute network-endpoint-groups create gitlab-self-managed-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=looker-psc-demo \
--region=$region
在 Cloud Shell 中,使用 FQDN gitlabonprem.com 和通訊埠 443 更新網際網路 NEG gitlab-self-managed-internet-neg
gcloud compute network-endpoint-groups update gitlab-self-managed-internet-neg \
--add-endpoint="fqdn=gitlabonprem.com,port=443" \
--region=$region
建立網路防火牆規則
如要允許 IAP 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:
- 套用至所有您希望能透過 IAP 存取的 VM 執行個體。
- 允許來自 IP 範圍 35.235.240.0/20 的輸入流量。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址。
在 Cloud Shell 中建立 IAP 防火牆規則。
gcloud compute firewall-rules create ssh-iap-looker-psc-demo \
--network looker-psc-demo \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
8. 建立生產端服務
建立負載平衡器元件
在 Cloud Shell 中執行下列操作:
gcloud compute backend-services create producer-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=gitlab-self-managed-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=producer-backend-svc \
--region=$region
在以下語法中建立轉送規則 (內部 TCP Proxy 負載平衡器)。
在 Cloud Shell 中執行下列操作:
gcloud compute forwarding-rules create producer-gitlab-self-managed-fr\
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=looker-psc-demo \
--subnet=producer-psc-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
建立服務附件
在 Cloud Shell 中建立服務附件 gitlab-self-managed-svc-attachment-https,並啟用自動核准功能,讓 Looker Core 可連線至服務附件。如果您想控管服務附件的存取權,系統支援明確核准選項。
gcloud compute service-attachments create gitlab-self-managed-svc-attachment-https --region=$region --producer-forwarding-rule=producer-gitlab-self-managed-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet
接著,請取得並記下在 selfLink URI 中列出的服務附件,這個 URI 的開頭為專案,可用於在 Looker 中設定 PSC 端點。
selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/gitlab-self-managed-svc-attachment-https
在 Cloud Shell 中執行下列操作:
gcloud compute service-attachments describe gitlab-self-managed-svc-attachment-https --region=$region
Example:
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2025-03-04T18:55:42.254-08:00'
description: ''
enableProxyProtocol: false
fingerprint: MlY9GLLGsgE=
id: '9103522880241140673'
kind: compute#serviceAttachment
name: gitlab-self-managed-svc-attachment-https
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '115404658846991336'
low: '9103522880241140673'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/serviceAttachments/gitlab-self-managed-svc-attachment-https
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/forwardingRules/producer-gitlab-self-managed-fr
在 Cloud 控制台中,前往:
網路服務 → Private Service Connect → 已發布服務
9. 在 Looker 中建立 PSC 端點連線
在下一節中,您將透過 Cloud Shell 中的 –psc-service-attachment 標記,針對單一網域將 Producers Service Attachment 與 Looker Core PSC 建立關聯。
在 Cloud Shell 中,更新下列參數以符合環境,建立 psc 關聯:
- INSTANCE_NAME:Looker (Google Cloud Core) 執行個體的名稱。
- DOMAIN_1: gitlabonprem.com
- SERVICE_ATTACHMENT_1:描述服務附件的 URI,例如 gitlab-self-managed-svc-attachment-https。
- REGION:Looker (Google Cloud Core) 執行個體所在的地區。
在 Cloud Shell 中執行下列操作:
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION
Example:
gcloud looker instances update looker-psc-instance \
--psc-service-attachment domain=gitlabonprem.com,attachment=projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https \
--region=$region
在 Cloud Shell 中驗證 serviceAttachments 的 connectionStatus 是否為「ACCEPTED」,並更新為 Looker PSC INSTANCE_NAME
gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json
Example:
gcloud looker instances describe looker-psc-instance --region=$region --format=json
Example:
{
"adminSettings": {},
"createTime": "2024-08-23T00:00:45.339063195Z",
"customDomain": {
"domain": "cosmopup.looker.com",
"state": "AVAILABLE"
},
"encryptionConfig": {},
"lookerVersion": "24.12.28",
"name": "projects/$project/locations/$region/instances/looker-psc-instance",
"platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
"pscConfig": {
"allowedVpcs": [
"projects/$project/global/networks/looker-psc-demo"
],
"lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
"serviceAttachments": [
{
"connectionStatus": "ACCEPTED",
"localFqdn": "gitlabonprem.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-08-30T17:47:33.440271635Z"
}
在 Cloud 控制台中驗證 PSC 端點
您可以透過 Cloud Console 驗證 PSC 連線
在 Cloud 控制台中,前往:
Looker → Looker 執行個體 → 詳細資料
10. DNS 解析
在下一個部分中,您將建立 GCE 執行個體,並透過 PING 驗證 DNS 解析結果是否為 Gitlab 自管執行個體 gitlabonprem.com。如預期,解析作業會失敗,因為需要為 gitlabonprem.com 建立私人 DNS 區域。
11. 建立 GCE 執行個體
在 Cloud Shell 中建立用於驗證 DNS 解析的 GCE 執行個體。
gcloud compute instances create gce-dns-lookup \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=producer-psc-fr-subnet
在 Cloud Shell 中使用 IAP 登入 consumer-vm,執行 curl 以驗證與產生者服務的連線。如果發生逾時情形,請重試。
gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap
從作業系統執行 PING 至 gitlabonprem.com,預期會失敗。
ping gitlabonprem.com
Example:
user@gce-dns-lookup:~$ ping gitlabonprem.com
ping: gitlabonprem.com: Name or service not known
退出作業系統,返回 Cloud Shell 終端機。
exit
12. 建立私人 DNS 區域
在 Cloud Shell 中建立 Cloud DNS 私人區域。
gcloud dns --project=$projectid managed-zones create gitlab-self-managed --description="" --dns-name="gitlabonprem.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/looker-psc-demo"
在 Cloud Shell 中建立 A 記錄,其中包含 Gitlab 自行管理的執行個體 IP 位址 192.168.10.4。
gcloud dns --project=$projectid record-sets create gitlabonprem.com. --zone="gitlab-self-managed" --type="A" --ttl="300" --rrdatas="192.168.10.4"
在 Cloud Shell 中使用 IAP 登入 consumer-vm,執行 curl 以驗證與產生者服務的連線。如果發生逾時情形,請重試。
gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap
從作業系統執行 PING 至 gitlabonprem.com,該網域會解析為 192.168.10.4。
ping gitlabonprem.com
Example:
user@gce-dns-lookup:~$ ping gitlabonprem.com
PING gitlabonprem.com (192.168.10.4) 56(84) bytes of data
退出作業系統,返回 Cloud Shell 終端機。
exit
13. 混合式連線
FQDN gitlabonprem.com 現在可以解析在內部部署的主機上的私人 IP 位址。接著,您必須在 looker-psc-demo 虛擬私有雲網路和內部部署網路之間設定混合式網路 (例如互連網路、HA-VPN),才能啟用連線。
以下是建立混合式 NEG 連線至內部網路所需的步驟:
- 選擇網路連線產品 | Google Cloud
- 在採用虛擬私有雲對等互連的軸輻式架構中,混合式 NEG 會部署在與 Cloud Router 相同的 VPC (中樞)
- 請務必更新內部部署防火牆,以便支援 Proxy 專用子網路範圍,因為這個子網路會做為與內部部署工作負載通訊的來源 IP 位址
- 公告 Cloud Router 的「僅代理」子網路做為自訂路由廣告
14. 測試連線能力
在後續步驟中,您將使用 Looker 主控台建立專案,並按照「設定及測試 Git 連線」一文所述的程序,驗證與 gitlabonprem.com 的 HTTPS 連線。
15. 清理
從單一 Cloud Shell 終端機刪除實驗室元件
gcloud compute service-attachments delete gitlab-self-managed-svc-attachment-https --region=$region -q
gcloud compute forwarding-rules delete producer-gitlab-self-managed-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete producer-backend-svc --region=$region -q
gcloud compute network-endpoint-groups delete gitlab-self-managed-internet-neg --region=$region -q
gcloud compute instances delete gce-dns-lookup --zone=us-central1-a -q
gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q
gcloud dns --project=$projectid record-sets delete gitlabonprem.com. --zone="gitlab-sel
f-managed" --type="A"
gcloud dns --project=$projectid managed-zones delete gitlab-self-managed
gcloud compute networks delete looker-psc-demo -q
16. 恭喜
恭喜!您已成功使用 Private Service Connect 技術的 Looker 控制台,設定及驗證 GitLab 自管執行個體的連線。
您已建立供應端基礎架構,並瞭解如何建立可連線至供應端服務的網路 NEG、供應端服務和 Looker PSC 端點。
Cosmopup 認為程式碼研究室很棒!
後續步驟
查看一些程式碼研究室…
- 使用 Private Service Connect 發布及使用服務
- 使用 Private Service Connect 和內部 TCP Proxy 負載平衡器,透過混合式網路連線至地端服務
- 可存取所有已發布的 Private Service Connect 程式碼研究室