實驗室:NCC PSC 傳播

1. 簡介

總覽

在本研究室中,使用者將瞭解 Network Connectivity Center 中樞如何將 Private Service Connect 端點傳播至 VPC 輪輻。

中樞資源提供集中式連線管理模式,可將虛擬私有雲輪輻流量連結至 PSC 端點。

建構項目

在這個程式碼研究室中,您將建構 NCC 網路,將私人服務連線端點傳播至 Cloud SQL 執行個體。

74bf390e323ea3bb.png

課程內容

  • 使用 Private Service Connect 連線至 Cloud SQL 執行個體
  • 使用 NCC 中樞將 PSC 子網路傳播至所有虛擬私有雲輪輻,允許多個虛擬私有雲網路的網路連線。

軟硬體需求

  • 瞭解 GCP Cloud Networking
  • Cloud SQL 基本知識
  • Google Cloud 專案
  • 檢查您的配額:網路,並視需要申請額外網路,如以下螢幕截圖所示:

6bc606cb34bce7e8.png

目標

  • 設定 GCP 環境
  • 使用 Private Service Connect 為 MySql 設定 Cloud SQL 執行個體
  • 設定 Network Connectivity Center 中樞,以便傳播 PSC 端點
  • 將 Network Connectivity Center 設定為以虛擬私有雲做為輪輻
  • 驗證資料路徑
  • 探索 NCC 可維護性功能
  • 清除所用資源

事前準備

Google Cloud 控制台和 Cloud Shell

為了與 GCP 互動,我們會在本研究室中使用 Google Cloud 控制台和 Cloud Shell。

NCC 中樞專案的 Google Cloud 控制台

如要前往 Cloud 控制台,請前往 https://console.cloud.google.com

在 Google Cloud 中設定下列項目,以便設定 Network Connectivity Center:

在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。

啟動 Cloud Shell。本程式碼研究室會使用 $variables 協助在 Cloud Shell 中實作 gcloud 設定。

gcloud auth list
gcloud config list project
gcloud config set project $project
project=[YOUR-PROJECT-NAME]
echo $project

IAM 角色

NCC 需要 IAM 角色才能存取特定 API。請務必根據需求為使用者設定 NCC IAM 角色。

角色/說明

權限

networkconnectivity.networkAdmin:允許網路管理員管理中樞和輻條。

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager:允許在中樞中新增及管理輪輻。適用於共用虛擬私有雲,其中主機專案擁有 Hub,但其他專案的其他管理員可以為其附件新增 Hub 輻條。

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允許網路使用者查看中樞和輻條的不同屬性。

networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList

2. 設定網路環境

總覽

在本節中,我們會在單一專案中部署兩個虛擬私有雲網路和防火牆規則。邏輯圖表說明瞭這個步驟中將設定的網路環境。

8884a55988881e17.png

建立 VPC1 和子網路

虛擬私人雲端網路包含您將用於安裝 GCE VM 以驗證資料路徑的子網路

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

在虛擬私有雲中建立 PSC 子網路

請使用下列指令,在將分配給 PSC-EP 的 VPC 輻射狀網路中建立子網路。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
vpc_spoke_subnet_ip_range="192.168.0.0/24"

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

建立 VPC3 和子網路

vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
vpc_spoke_subnet_ip_range="10.0.3.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"

設定 VPC1 的防火牆規則

這些規則會允許來自 RFC1918 和 Identity Access Proxy 範圍的網路連線

vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules create vpc1-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc1-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

設定路由虛擬私有雲和虛擬私有雲防火牆規則

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules create vpc3-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc3-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

在 VPC1 中設定 GCE VM

您需要暫時存取網際網路才能安裝套件,因此請將執行個體設為使用外部 IP 位址。

vm_vpc1_spoke_name="csql-vpc1-vm"
vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc1_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

在 VPC3 中設定 GCE VM

您需要暫時存取網際網路才能安裝套件,因此請將執行個體設定為使用外部 IP 位址。

vm_vpc_spoke_name="csql-vpc3-vm"
vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

3. 建立 Cloud SQL 執行個體

請使用下列指令建立執行個體,並啟用 Private Service Connect。

這項作業需要幾分鐘才能完成。

gcloud config set project ${project}

gcloud sql instances create mysql-instance \
--project="${project}" \
--region=us-central1 \
--enable-private-service-connect \
--allowed-psc-projects="${project}" \
--availability-type=zonal \
--no-assign-ip \
--tier=db-f1-micro \
--database-version=MYSQL_8_0 \
--enable-bin-log

找出 Cloud SQL 執行個體的服務連結 URI

使用 gcloud sql instances describe 指令,查看已啟用 Private Service Connect 的執行個體相關資訊。請注意 pscServiceAttachmentLink 欄位,其中會顯示指向執行個體服務連結的 URI。我們會在下一節中使用這項資訊。

gcloud sql instances describe mysql-instance \
--format='value(pscServiceAttachmentLink)'

4. 將 PSC 端點連線至 Cloud SQL

為 PSC 端點保留內部 IP 位址

請使用下列指令為 Private Service Connect 端點保留內部 IP 位址:

region="us-central1"
vpc_spoke_subnet_name="csql-psc-subnet"

gcloud compute addresses create csql-psc-ip \
--subnet="${vpc_spoke_subnet_name}" \
--region="${region}" \
--addresses=192.168.0.253

查詢與預留 IP 位址相關聯的名稱。這會用於轉送規則設定。

gcloud compute addresses list \
--filter="name=csql-psc-ip"

在 VPC1 中建立 Private Service Connect 轉送規則

請使用下列指令建立 Private Service Connect 端點,並將其指向 Cloud SQL 服務附件。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
csql_psc_ep_name="csql-psc-ep"
sa_uri=$(gcloud sql instances describe mysql-instance \
  --format='value(pscServiceAttachmentLink)')
echo "$sa_uri"

gcloud compute forwarding-rules create "${csql_psc_ep_name}" \
--address=csql-psc-ip \
--region="${region}" \
--network="${vpc_spoke_network_name}" \
--target-service-attachment="${sa_uri}" \
--allow-psc-global-access

請使用下列指令,確認 cSQL 服務附件接受端點

gcloud compute forwarding-rules describe csql-psc-ep \
--region=us-central1 \
--format='value(pscConnectionStatus)'

驗證從 VPC1 到 MySQL 的資料路徑

建立新的 Cloud SQL 執行個體時,您必須先為預設使用者帳戶設定密碼,才能連線至執行個體。

gcloud sql users set-password root \
--host=% \
--instance=mysql-instance \
--prompt-for-password

請使用下列指令,找出與 Cloud SQL 服務連結的 PSC 端點 IP 位址。

gcloud compute addresses describe csql-psc-ip \
--region=us-central1 \
--format='value(address)'

從 VPC1 中的 VM 連線至 Cloud SQL 執行個體

開啟 csql-vpc1-vm 的 SSH 工作階段

gcloud compute ssh csql-vpc1-vm \
--zone=us-central1-a \
--tunnel-through-iap

請使用下列指令連線至 Cloud SQL 執行個體。系統提示時,請輸入在上一個步驟中建立的密碼。

mysql -h 192.168.0.253 -u root -p 

登入成功後,系統會顯示以下輸出內容:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8350
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

使用 show databases; 指令,驗證 MySql 預設建立的資料庫。

MySQL [(none)]> show databases;

從 VPC3 中的 VM 連線至 Cloud SQL 執行個體

開啟 csql-vpc3-vm 的 SSH 工作階段,

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

請使用下列指令連線至 Cloud SQL 執行個體。系統提示時,請輸入在上一個步驟中建立的密碼。

mysql -h 192.168.0.253 -u root -p 

由於從 VPC3 到 Private Service Connect 端點沒有資料路徑,因此位於 VPC3 上的 VM 會導致工作階段失敗。使用按鍵組合來分割工作階段。

Ctrl + C

5. Network Connectivity Center 中樞

總覽

在本節中,我們將使用 gcloud 指令設定 NCC Hub。NCC 中樞會擔任控制層,負責建構從虛擬私有雲輪輻到 Private Service Connect 端點的資料路徑。

b615efa4bad5f86.png

啟用 API 服務

啟用網路連線 API (如果尚未啟用):

gcloud services enable networkconnectivity.googleapis.com

建立 NCC 中樞

請使用下方的 gcloud 指令建立 NCC 中樞。「–export-psc」標記可指示 NCC Hub 將已知 PSC 端點傳播至所有 VPC 輪輻。

hub_name="ncc-hub"
gcloud network-connectivity hubs create "${hub_name}" \
--export-psc

說明新建立的 NCC Hub。記下名稱和相關聯的路徑。

gcloud network-connectivity hubs describe ncc-hub

將 VPC1 設為 NCC 輪輻

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc1-spoke"
vpc_spoke_network_name="vpc1-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

將 VPC3 設為 NCC 輻

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc3-spoke"
vpc_spoke_network_name="vpc3-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

請使用下列指令,查看 NCC Hub 路由表是否有通往 PSC 子網路的路由。

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub

6. 驗證 NCC 資料路徑

在這個步驟中,我們會驗證 NCC hybrid 和 VPC spoke 之間的資料路徑。

驗證 NCC 是否已將資料路徑設定為 Cloud SQL 執行個體 PSC 端點

使用這些 gcloud 指令的輸出內容,登入內部部署的 VM。

 gcloud compute instances list --filter="name=csql-vpc3-vm" 

登入位於內部網路的 VM 執行個體。

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

請使用下方的 mysql 指令連線至 Cloud SQL 執行個體。系統提示時,請輸入在上一個步驟中建立的密碼。

mysql -h 192.168.0.253 -u root -p 

登入成功後,系統會顯示以下輸出內容:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8501
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.005 sec)

使用 show databases; 指令,驗證 MySql 預設建立的資料庫

MySQL [(none)]> show databases;

7. 清除

登入 Cloud Shell 並刪除 GCP 資源。

刪除 Cloud SQL PSC 端點

gcloud compute forwarding-rules delete csql-psc-ep \
--region=us-central1 \
--quiet

gcloud compute addresses delete csql-psc-ip \
--region=us-central1 \
--quiet

gcloud compute networks subnets delete csql-psc-subnet \
--region=us-central1 \
--quiet

刪除 Cloud SQL 執行個體

gcloud sql instances delete mysql-instance --quiet

刪除防火牆規則

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules delete vpc3-allow-all \ --network="${vpc_spoke_network_name}" 
gcloud compute firewall-rules delete vpc3-allow-iap \ --network="${vpc_spoke_network_name}"
vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules delete vpc1-allow-all \ --network="${vpc_spoke_network_name}"
gcloud compute firewall-rules delete vpc1-allow-iap \ --network="${vpc_spoke_network_name}"

刪除 VPC1 和 VPC3 中的 GCE 執行個體

vm_vpc1_spoke_name="csql-vpc1-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc1_spoke_name}" \
--zone="${zone}" \
--quiet


vm_vpc_spoke_name="csql-vpc3-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc_spoke_name}" \
--zone="${zone}" --quiet

刪除 NCC 輻

vpc_spoke_name="sql-vpc1-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet
vpc_spoke_name="sql-vpc3-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet

刪除 NCC 中樞

hub_name="ncc-hub"
gcloud network-connectivity hubs delete "${hub_name}" \
  --project=${project}

刪除所有虛擬私有雲中的子網路

vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet1"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet3"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet

刪除 VPC1 和 VPC3

gcloud compute networks delete vpc1-spoke vpc3-spoke 

8. 恭喜!

您已完成 Network Connectivity Center Lab 的 Private Service Connect 傳播作業!

涵蓋內容

  • 使用 Network Connectivity Center 進行 Private Service Connect 端點傳播

後續步驟