Looker PSC 南向 HTTPS 網際網路 NEG

1. 簡介

在本程式碼研究室中,您將使用內部 tcp Proxy 負載平衡器,以及做為服務消費者,從 Looker PSC 叫用的網際網路網路端點群組 (NEG),執行連至 GitHub 的南向 HTTPS 連線。

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

圖 1.

145ea4672c3a3b14.png

南向存取 (又稱為反向 PSC) 可讓消費者以生產端建立已發布的服務,允許 Looker 存取地端部署、虛擬私有雲中的端點,以存取代管服務和網際網路。無論 Looker PSC 的部署位置為何,外部連線皆可部署在任何區域,如圖 2 中強調的。

圖 2.

259493afd914f68b.png

課程內容

  • 網路需求
  • 建立 Private Service Connect 生產端服務
  • 在 Looker 中建立 Private Service Connect 端點
  • 使用測試連線功能,從 Looker 建立與 GitHub 的連線

軟硬體需求

def88091b42bfe4d.png

2. 建構內容

您將建立名為 looker-psc-demo 的供應者網路,用來部署內部 TCP 代理負載平衡器,以及透過 Private Service Connect (PSC) 發布為服務的網際網路 NEG。發布後,您需要執行下列動作,驗證對 Producer 服務的存取權:

  • 在 Looker 中建立與製作者服務連結的 PSC 端點
  • 使用 Looker 控制台建立新專案,並測試與 GitHub.com 之間的 HTTPS 連線

3. 網路需求

以下詳細說明生產端網路的網路需求,本程式碼研究室中的用戶為 Looker PSC 執行個體。

元件

說明

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

自訂模式虛擬私有雲

PSC NAT 子網路

來自消費者 VPC 網路的封包會使用來源 NAT (SNAT) 進行轉譯,以便將原始來源 IP 位址轉換為供應者 VPC 網路中 NAT 子網路的來源 IP 位址。

PSC 轉送規則子網路

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

PSC NEG 子網路

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

僅限 Proxy 子網路

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

網際網路 NEG

用於為負載平衡器定義外部後端的資源。您無法只透過 Cloud VPN 或 Cloud Interconnect 存取端點。

後端服務

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

Cloud Router

Cloud NAT 會使用 Cloud Router 提供控制平面功能,但不會用於 BGP 工作階段管理。

Cloud NAT

區域網際網路 NEG 會利用 Cloud NAT 進行網際網路傳出作業。

4. 程式碼研究室拓撲

4e7ac0fd4a61ed9b.png

5. 設定和需求

自助式環境設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 「Project name」是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您隨時可以更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。
  • 提醒您,有些 API 會使用第三個值「專案編號」。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不會產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除已建立的資源或專案。新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。

Google Cloud 控制台,按一下右上方的工具列上的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的畫面:

7ffe5cbb04455448.png

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 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 專屬子網路:

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

建立 Public NAT 閘道

區域性內部 tcp Proxy 負載平衡器會透過設定選項 –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 looker-psc-demo-cloud-router --network looker-psc-demo --region $region

在 Cloud Shell 中,建立 Cloud NAT 閘道,讓 TCP Proxy 負載平衡器可連上網際網路:

gcloud compute routers nats create looker-psc-demo-natgw \
  --router=looker-psc-demo-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

保留負載平衡器的 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 中,建立用於 github.com 的網路 NEG

gcloud compute network-endpoint-groups create github-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

在 Cloud Shell 中,使用 FQDN github.com 和通訊埠 443 更新網際網路 NEG github-internet-neg

gcloud compute network-endpoint-groups update github-internet-neg \
    --add-endpoint="fqdn=github.com,port=443" \
    --region=$region

建立網路防火牆政策和防火牆規則

在 Cloud Shell 中執行下列操作:

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

下列防火牆規則允許從 PSC NAT 子網路範圍傳送至網路中所有執行個體的流量。

在 Cloud Shell 中執行下列操作:

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

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=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=producer-backend-svc  \
      --region=$region

使用下列語法,建立轉送規則 (內部 tcp Proxy 負載平衡器)。

在 Cloud Shell 中執行以下操作:

gcloud compute forwarding-rules create producer-github-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 中建立服務連結 github-svc-attachment-https:

gcloud compute service-attachments create github-svc-attachment-https --region=$region --producer-forwarding-rule=producer-github-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

接著,請取得並記下自我連結 URI 中列出的服務連結 (開頭為專案),以便在 Looker 中設定 PSC 端點。

selfLink:projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-https

在 Cloud Shell 中執行下列操作:

gcloud compute service-attachments describe github-svc-attachment-https --region=$region

範例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-08-30T09:44:03.883-07:00'
description: ''
enableProxyProtocol: false
fingerprint: RfKh3blWZE0=
id: '2897904404386302012'
kind: compute#serviceAttachment
name: github-svc-attachment-https
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '19348441121424360'
  low: '2897904404386302012'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/github-svc-attachment-https
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-github-fr

在 Cloud 控制台中,前往:

網路服務 → Private Service Connect → 已發布的服務

a8cae886441d9c25.png

84a906b3bedabeee.png

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

在下一節中,您將在 Cloud Shell 中使用「-psc-service-attachment」標記,為單一網域將生產者服務連結與 Looker Core PSC 建立關聯。

在 Cloud Shell 中更新下列參數以建立與環境相符的 psc 關聯:

  • INSTANCE_NAME:Looker (Google Cloud Core) 執行個體的名稱。
  • DOMAIN_1: github.com
  • SERVICE_ATTACHMENT_1:描述服務連結時擷取的 URI,github-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=github.com,attachment=projects/$project/regions/$region/serviceAttachments/github-svc-attachment-https \
--region=$region

在 Cloud Shell 中,確認 serviceAttachments 連線狀態為「已接受」,並使用 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.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",
      "projects/$project/global/networks/looker-shared-vpc"
    ],
    "lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "github.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/github-svc-attachment-https"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-08-30T17:47:33.440271635Z"
}

在 Cloud 控制台中驗證 PSC 端點

您可以透過 Cloud 控制台驗證 PSC 連線

在 Cloud 控制台中,前往:

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

2d4684d722d31e4b.png

ef907280833bcad.png

10. 測試連線至 GitHub

在後續步驟中,您將使用 Looker Console 建立專案,驗證與 github.com 的 HTTPS 連線。

11. 建立新專案

啟用開發人員模式

在 Looker 控制台中,前往:

啟用開發人員模式 (頁面左下方),選取後畫面上會顯示「您目前處於開發人員模式」橫幅。

70c9ded749decfbe.png

建立新專案

在 Cloud 控制台中,前往:

Develop → Projects

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 連線測試

a33584380b788b6d.png

清除所用資源

從單一 Cloud Shell 終端機刪除研究室元件

gcloud compute service-attachments delete github-svc-attachment-https --region=$region -q

gcloud compute forwarding-rules delete producer-github-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-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q

gcloud compute routers delete looker-psc-demo-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 producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q

gcloud compute networks delete looker-psc-demo -q

12. 恭喜

恭喜!您已成功透過採用 Private Service Connect 技術的 Looker 控制台,設定並驗證 GitHub 連線。

您建立了生產端基礎架構,並學會如何建立網際網路 NEG、生產端服務和 Looker PSC 端點,以允許連線至生產端服務。

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

c911c127bffdee57.jpeg

後續步驟

查看一些程式碼研究室…

其他參考資料和影片

參考文件