1. 簡介
在本程式碼研究室中,您將使用內部 tcp Proxy 負載平衡器和網際網路網路端點群組 (NEG),建立連至 Lookers SMTP 服務的南向連線,並將 Looker PSC 叫用為服務消費者的 FQDN notifications-pa.googleapis.com。
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 端點
- 與 Lookers SMTP 服務建立連線
軟硬體需求
- 具備擁有者權限的 Google Cloud 專案
- 現有的 Looker PSC 執行個體
2. 建構內容
您將建立生產端網路 Looker-psc-demo,以便部署內部 tcp Proxy 負載平衡器,以及透過 Private Service Connect (PSC) 發布為服務的網際網路 NEG。發布後,您需要執行下列動作,驗證對 Producer 服務的存取權:
- 在 Looker 中建立與生產端服務連結相關聯的 PSC 端點
- 使用 Looker 控制台建立 SMTP 郵件設定
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 或端點的封包,具有來自僅限 Proxy 的子網路的來源 IP 位址。 |
網際網路 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 帳戶,請務必建立帳戶。
- 「Project name」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
- 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為
PROJECT_ID
)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否可用。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。 - 提醒您,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
在 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 專屬子網路:
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 負載平衡器會使用 NAT 閘道,透過設定選項 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB 進行網際網路輸出,因此同一個 NATGW 不會支援 GCE/GKE 網際網路輸出。透過 GCE/GKE 網際網路輸出的 –endpoint-types=ENDPOINT_TYPE_VM 部署額外的 NAT GW。
在 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 smtp-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=looker-psc-demo \
--region=$region
在 Cloud Shell 中,使用 FQDN notifications-pa.googleapis.com 和通訊埠 443 更新網際網路 NEG smtp-internet-neg
gcloud compute network-endpoint-groups update smtp-internet-neg \
--add-endpoint="fqdn=notifications-pa.googleapis.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=smtp-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-smtp-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 中建立服務連結 smtp-svc-attachment:
gcloud compute service-attachments create smtp-svc-attachment --region=$region --producer-forwarding-rule=producer-smtp-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/github-svc-attachment-https
在 Cloud Shell 中執行以下操作:
gcloud compute service-attachments describe smtp-svc-attachment --region=$region
範例:
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-10-04T14:56:50.409-07:00'
description: ''
enableProxyProtocol: false
fingerprint: KUPXTZjrGkw=
id: '8947818105173563981'
kind: compute#serviceAttachment
name: smtp-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '23100082169578472'
low: '8947818105173563981'
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/smtp-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-smtp-fr
在 Cloud 控制台中,前往:
網路服務 → Private Service Connect → 已發布服務
9. 在 Looker 中建立 PSC 端點連線
在下一節中,您將在 Cloud Shell 中使用「-psc-service-attachment」標記,為單一網域將生產者服務連結與 Looker Core PSC 建立關聯。
在 Cloud Shell 中,更新下列參數以符合環境,建立 psc 關聯:
- INSTANCE_NAME:Looker (Google Cloud Core) 執行個體的名稱。
- DOMAIN_1:notifications-pa.googleapis.com
- SERVICE_ATTACHMENT_1:描述服務附件 (smtp-svc-attachment) 時擷取的 URI
- 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=notifications-pa.googleapis.com,attachment=projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment \
--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
範例:
{
...........................
"serviceAttachments": [
{
"connectionStatus": "ACCEPTED",
"localFqdn": "notifications-pa.googleapis.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-10-04T22:02:31.445761128Z"
}
在 Cloud 控制台中驗證 PSC 端點
您可以透過 Cloud 控制台驗證 PSC 連線
在 Cloud 控制台中,前往:
Looker → Looker 執行個體 → 詳細資料
10. 測試 SMTP 連線能力
在後續步驟中,您將使用 Looker 主控台產生 SMTP 測試與報表,驗證 SMTP 連線。
測試電子郵件
Looker 使用預設的 SMTP 伺服器通知-pa.googleapis.com 傳送電子郵件。在此情況下,您不需要採取額外步驟。如果您想透過其他 SMTP 伺服器傳送通知,請參閱自訂 SMTP 設定。
開啟 Looker 控制台,然後前往下列位置:
「管理」→「平台」→「SMTP」→ 選取「傳送測試電子郵件」
以下是 Looker 取得的測試電子郵件:
產生的報表電子郵件
前往以下位置:
「探索」→「系統活動」→「API 用量」→「API 查詢類型」→「執行」
輸出內容範例:
如要將結果傳送至您的電子郵件,請選取齒輪圖示
選取「傳送」,系統會開啟新視窗。
輸入電子郵件地址並選取「傳送」
以下是從 Looker 取得的測試電子郵件:
11. 自訂 SMTP 設定
在本教學課程中,Looker SMTP 伺服器會透過 FQDN notifications-pa.googleapis.com 和執行網際網路傳出的 Cloud NAT 傳送電子郵件通知。如要使用自己的 SMTP 伺服器,請按照下列修改內容建立新服務連結:
使用 SMTP 伺服器 FQDN 更新網際網路 NEG:
gcloud compute network-endpoint-groups update smtp-internet-neg \
--add-endpoint="fqdn=<your SMTP FQDN>,port=443" \
--region=$region
更新 Looker PSC 執行個體時,請指定 SMTP 網域:
- INSTANCE_NAME:Looker (Google Cloud Core) 執行個體的名稱。
- DOMAIN_1:<您的 SMTP 伺服器 FQDN>
- SERVICE_ATTACHMENT_1:描述服務附件 (smtp-svc-attachment) 時擷取的 URI
- REGION:託管 Looker (Google Cloud Core) 執行個體的區域。
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION
12. 清理
從單一 Cloud Shell 終端機刪除實驗室元件
gcloud compute service-attachments delete smtp-svc-attachment --region=$region -q
gcloud compute forwarding-rules delete producer-smtp-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 smtp-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
13. 恭喜
恭喜!您已成功透過由 Private Service Connect 技術提供的 Looker 控制台,設定並驗證 Lookers SMTP 服務的連線。
您建立了生產端基礎架構,並學會如何建立網際網路 NEG、生產端服務和 Looker PSC 端點,以允許連線至生產端服務。
Cosmopup 認為程式碼研究室很棒!
後續步驟
查看一些程式碼研究室…
- 使用 Private Service Connect 發布及使用服務
- 使用 Private Service Connect 和內部 TCP Proxy 負載平衡器,透過混合式網路連線至地端服務
- 存取所有已發布的 Private Service Connect 程式碼研究室