Looker PSC Southbound HTTPS Internet NEG Gitlab Self-Managed

1. 簡介

在本程式碼研究室中,您將使用內部 TCP Proxy 負載平衡器和網際網路網路端點群組 (NEG),從 Looker PSC 執行服務消費者,對 GitLab Self-Managed 環境執行南向 HTTPS 連線。

Private Service Connect 是 Google Cloud 網路功能,可讓消費者從虛擬私有雲網路內,以私密方式存取代管服務。同樣地,代管服務生產端也能在各自獨立的虛擬私有雲網路中代管這些服務,並為消費者提供私人連線。舉例來說,如果您使用 Private Service Connect 存取 Looker,您就是服務使用者,而 Google 則是服務供應商,如圖 1 所示。

圖 1.

145ea4672c3a3b14.png

南向存取權 (又稱反向 PSC) 可讓消費者建立發布的服務做為生產者,允許 Looker 存取地端、虛擬私有雲、代管服務和網際網路上的端點。無論 Looker PSC 部署在哪個區域,您都可以在任何區域部署南向連線,如圖 2 所示。

圖 2.

61932a992ba9b6f4.png

課程內容

  • 網路需求
  • 建立 Private Service Connect 生產端服務
  • 在 Looker 中建立 Private Service Connect 端點
  • 與 GitLab Self-Managed 執行個體建立連線

軟硬體需求

def88091b42bfe4d.png

2. 建構項目

您將建立生產端網路 looker-psc-demo,部署內部 TCP Proxy 負載平衡器和透過 Private Service Connect (PSC) 發布為服務的網際網路 NEG。發布後,請執行下列動作,驗證 Producer 服務的存取權:

  • 在 Looker 中建立與生產者服務連結相關聯的 PSC 端點
  • 使用 Looker 控制台建立新專案,並測試與 GitLab Self-Managed 環境的 HTTPS 連線。

3. 網路需求

以下是供應商網路的網路需求細目,本程式碼研究室中的消費者是 Looker PSC 執行個體。

元件

說明

虛擬私有雲 (looker-psc-demo)

自訂模式虛擬私有雲

PSC NAT 子網路

來自用戶端虛擬私有雲網路的封包會使用來源 NAT (SNAT) 進行轉譯,因此原始來源 IP 位址會轉換為供應商虛擬私有雲網路中 NAT 子網路的來源 IP 位址。

PSC 轉送規則子網路

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

PSC NEG 子網路

用於為網路端點群組分配 IP 位址

僅限 Proxy 子網路

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

網際網路 NEG

用於為負載平衡器定義外部後端的資源,設定為表示 Gitlab Self-Managed 本機 FQDN 的 FQDN。網際網路 FQDN 會在虛擬私有雲中執行 DNS 查詢以進行解析。

後端服務

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

4. 程式碼研究室拓撲

34950ed6ef504309.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]
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 子網路:

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 Self-Managed 執行個體 (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 中以 projects 開頭的 Service Attachment,以便在 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

範例:

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」→「已發布的服務」

6fa12f77e4640b08.png

43987fabbabb41ad.png

9. 在 Looker 中建立 PSC 端點連線

在下一節中,您將透過 Cloud Shell 中的 –psc-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

範例:

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

範例:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

範例:

{
  "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 控制台驗證 PSC 連線

在 Cloud 控制台中,前往:

Looker → Looker 執行個體 → 詳細資料

2d4684d722d31e4b.png

2d600f33dc61cb6d.png

10. DNS 解析

在下一節中,建立 GCE 執行個體,然後執行 PING,驗證 Gitlab Self-Managed 執行個體 (gitlabonprem.com) 的 DNS 解析。如預期,解析會失敗,需要 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

從 OS 對 gitlabonprem.com 執行 PING,預計會失敗。

ping gitlabonprem.com

範例:

user@gce-dns-lookup:~$ ping gitlabonprem.com
ping: gitlabonprem.com: Name or service not known

退出 OS,返回 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 中,建立包含 GitLab 自行管理執行個體 IP 位址 (192.168.10.4) 的 A 記錄。

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

從 OS 對 gitlabonprem.com 執行 PING,這會解析為 192.168.10.4。

ping gitlabonprem.com

範例:

user@gce-dns-lookup:~$ ping gitlabonprem.com
PING gitlabonprem.com (192.168.10.4) 56(84) bytes of data

退出 OS,返回 Cloud Shell 終端機。

exit

13. 混合式連線

現在可以使用地端部署的私人 IP 位址解析 FQDN gitlabonprem.com。接著,您必須在 looker-psc-demo 虛擬私有雲和內部部署網路之間設定混合式網路 (例如互連網路、高可用性 VPN),才能啟用連線。

如要建立混合式 NEG 與內部部署環境的連線,請按照下列步驟操作:

14. 測試連線能力

在下列步驟中,您將使用 Looker 控制台建立專案,並按照「設定及測試 Git 連線」一文所述的程序,驗證與 gitlabonprem.com 的 HTTPS 連線。

ae3b3884e8ef5db8.png

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 Self-Managed 執行個體的連線。

您已建立生產端基礎架構,並瞭解如何建立網際網路 NEG、生產端服務和 Looker PSC 端點,以便連線至生產端服務。

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

c911c127bffdee57.jpeg

後續步驟

查看一些程式碼研究室…

延伸閱讀和影片

參考文件