1. 簡介
總覽
在本實驗室中,使用者將瞭解如何透過 Network Connectivity Center(NCC) 支援虛擬私有雲輪輻,建立虛擬私有雲網路間的連線。當使用者將 VPC 定義為 VPC 輪輻時,即可透過 NCC 中樞將其連結至多個 VPC 網路。搭配虛擬私有雲輻射狀設定的 NCC 可降低透過虛擬私有雲對等互連管理成對虛擬私有雲間連線的作業複雜度,改用集中式連線管理模式。
請回想一下,Network Connectivity Center (NCC) 是一種中樞與輪輻控制平面模型,可用於 Google Cloud 中的網路連線管理。中樞資源提供集中連線管理模式,用於連結輪輻。
建構項目
在這個程式碼研究室中,您將使用 NCC 中樞建立邏輯軸輻式拓撲,在三個不同的 VPC 中實作完整網狀的 VPC 連線結構。
課程內容
- 透過 NCC 提供完整的虛擬私有雲網路連線
- 跨虛擬私有雲的 Private NAT
軟硬體需求
- 瞭解 GCP 虛擬私有雲網路
- 瞭解 Cloud Router 和 BGP 路由
- 兩個不同的 GCP 專案
- 本程式碼研究室需要 5 個 VPC。其中一個虛擬私有雲必須位於 NCC 中樞以外的專案
- 檢查您的配額:網路,並視需要申請額外網路,如以下螢幕截圖所示:
目標
- 設定 GCP 環境
- 將 Network Connectivity Center 設定為以 VPC 做為輪輻
- 驗證資料路徑
- 探索 NCC 可維護性功能
- 清除已用資源
事前準備
Google Cloud 控制台和 Cloud Shell
為了與 GCP 互動,我們會在本研究室中使用 Google Cloud 控制台和 Cloud Shell。
NCC Hub 專案 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 [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
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. 設定網路環境
總覽
在本節中,我們會在單一專案中部署虛擬私有雲網路和防火牆規則。邏輯圖表說明瞭這個步驟中將要設定的網路環境。
為了示範跨專案輻條支援功能,我們會在後續步驟中,在其他專案中部署虛擬私有雲和防火牆規則。
建立虛擬私有雲網路和子網路
虛擬私人雲端網路包含您將用於安裝 GCE VM 以驗證資料路徑的子網路
gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom
gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1
gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1
虛擬私有雲支援的子網路範圍
NCC 支援所有有效的 IPv4 子網路範圍,但不支援私用公開 IP 位址。在這個步驟中,請在 VPC4 中建立有效的 IP 範圍,並匯入至中樞路由表。
gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1
gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1
gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1
gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1
gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1
gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1
gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1
gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1
建立重疊的子網路範圍
NCC 不會將重疊的 IP 範圍匯入中樞路由表。使用者會在後續步驟中解決這項限制。目前,請為 VPC2 和 VPC3 建立兩個重疊的 IP 範圍。
gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1
gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1
設定 VPC 防火牆規則
在每個 VPC 上設定防火牆規則,允許
- SSH
- 內部 IAP
- 10.0.0.0/8 範圍
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
在每個 VPC 中設定 GCE VM
您需要臨時網際網路存取權,才能在「vm1-vpc1-ncc」上安裝套件。
建立四部虛擬機器,每部虛擬機器都會指派至先前建立的其中一個 VPC
gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
apt-get install tcpdump -y
service apache2 restart
echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address
gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address
gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address
3. Network Connectivity Center 中樞
總覽
在本節中,我們將使用 gcloud 指令設定 NCC Hub。NCC Hub 會擔任控制層,負責在各個虛擬私有雲輪輻之間建立轉送設定。
啟用 API 服務
啟用網路連線 API (如果尚未啟用):
gcloud services enable networkconnectivity.googleapis.com
建立 NCC 中樞
使用 gCloud 指令建立 NCC 中樞
gcloud network-connectivity hubs create ncc-hub
輸出範例
Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.
Created hub [ncc-hub]
說明新建立的 NCC 中樞。記下名稱和相關聯的路徑。
gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'
NCC 中樞推出了路由表,用於定義建立資料連線的控制平面。找出 NCC 中樞的路由表名稱
gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:
找出 NCC 預設路由表的 URI。
gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'
列出 NCC 中樞的預設路由表內容。注意* 在建立輻條之前,NCC 中樞的路由表格會是空的
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
NCC 中樞的路由表應為空白。
4. 包含虛擬私有雲輪輻的 NCC
總覽
在本節中,您將使用 gCloud 指令將三個 VPC 設定為 NCC 輻射點。
將 VPC 設為 NCC 輻向節點
依序將下列 VPC 設為 NCC 分支
- VPC4
- VPC1
- VPC2
- VPC3
將 VPC4 設為 NCC 輪輻,並指派給先前建立的 NCC 中樞。NCC 語音 API 呼叫需要指定位置。旗標「–global」可簡化 gcloud 語法,讓使用者在設定新的 NCC 輻條時,不必指定完整的 URI 路徑。
gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global
將 VPC1 設為 NCC 輻。
管理員可以排除從 VPC 輪輻匯出至 NCC 中樞路由表的子網路路徑。在本程式碼研究室的這個部分,您將根據摘要前置字元建立排除匯出規則,以免 VPC1 的子網路匯出至 NCC Hub 路由表。
使用這個 gcloud 指令列出屬於 VPC1 的所有子網路。
gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc
請注意,在設定部分先前建立的兩個 /25 子網路。
NAME REGION NETWORK RANGE STACK_TYPE
vpc1-ncc-subnet1 us-central1 vpc1-ncc 10.1.1.0/24 IPV4_ONLY
vpc1-ncc-subnet2 us-central1 vpc1-ncc 10.1.2.0/25 IPV4_ONLY
vpc1-ncc-subnet3 us-central1 vpc1-ncc 10.1.2.128/25 IPV4_ONLY
將 VPC1 設為 NCC 輻射點,並使用「export-exclude-ranges」關鍵字篩除特定範圍內的 /24 匯總路徑,避免這兩個 /25 子網路匯入至中樞路由表。
gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global
注意*:使用者最多可為每個 NCC 輻射線篩選 16 個獨特 IP 範圍。
列出 NCC 中樞的預設路由表內容。NCC 中樞路由表中的一組 /25 子網路發生什麼事?
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route-table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.1.1.0/24 ACTIVE VPC_PRIMARY_SUBNET vpc1-ncc ncc-hub default
將 VPC2 設為 NCC 輪輻
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global
將 VPC3 設為 NCC 輪輻,並指派給先前建立的 NCC 中樞。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global
為什麼會這樣?
ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)
NCC 中樞偵測到與 VPC2 重疊的 IP 範圍。請注意,VPC2 和 VPC3 都使用相同的 10.3.3.0/24 IP 子網路。
使用「排除匯出」功能篩除重疊的 IP 範圍
在撰寫本程式碼研究室內容時,這是已知的問題,使用者必須刪除並重新建立 NCC 輻條,才能對匯出篩選器進行設定變更。
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
注意:刪除與特定虛擬私有雲相關聯的虛擬私有雲輪輻後,必須等待 10 分鐘的冷卻期過後,才能重新建立參照相同虛擬私有雲的新輪輻。
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
將 VPC3 設為 NCC 輪輻,並指派給先前建立的 NCC 中樞。這次嘗試將 VPC3 新增為 NCC 的輪輻應會成功。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
列出 NCC 中樞的預設路由表內容,並檢查輸出內容。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
系統會排除 VPC2 和 VPC3 重疊的 IP 範圍。NCC Hub 轉送表支援所有有效的 IPv4 範圍類型,但不支援私用公開 IP 位址 (PUPI)。
5. NCC 與跨專案輪輻
總覽
到目前為止,您已設定 NCC 輻條,且與中樞屬於同一個專案。在本節中,您將使用 gCloud 指令,將 VPC 設為 NCC 中樞以外的 NCC 輻條。
這樣一來,管理自有虛擬私有雲的專案擁有者就能透過 NCC 中樞參與網路連線。
跨專案:Google Cloud 控制台和 Cloud Shell
為了與 GCP 互動,我們會在本研究室中使用 Google Cloud 控制台和 Cloud Shell。
Cross Project Spoke Google Cloud Console
如要前往 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 [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM 角色
NCC 需要 IAM 角色才能存取特定 API。請務必根據需求為使用者設定 NCC IAM 角色。
跨專案 Spoke 管理員至少必須具備下列 IAM 角色:「networkconnectivity.networkSpokeManager」。」
下表列出 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 |
在跨專案中建立虛擬私有雲網路和子網路
虛擬私人雲端網路包含您將用於安裝 GCE VM 以驗證資料路徑的子網路
gcloud compute networks create xproject-vpc \
--subnet-mode custom
gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1
gcloud compute networks subnets create xprj-net-2 \
--network xproject-vpc \
--range 10.100.2.0/24 \
--region us-central1
NCC 中樞專案 URI
請使用這項 gcloud 指令來找出 NCC Hub URI。您需要 URI 路徑,才能在下一個步驟中設定跨專案 NCC 語音助理。
gcloud network-connectivity hubs describe ncc-hub
跨專案 Spoke VPC
登入 VPC 不在 NCC Hub 專案中的其他專案。在 Cloud Shell 中,使用以下指令將 VPC 設為 NCC 輻射點。
- HUB_URI 應為其他專案中的樞紐 URI。
- VPC_URI 應與輪輻位於相同專案
- VPC-network 會指定這項跨專案中的 VPC 將加入其他專案中的 NCC Hub
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc
。
Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'
跨專案 NCC 輪輻的狀態為何?為什麼?
6. 拒絕或接受跨專案輪輻
總覽
NCC Hub 管理員必須明確接受跨專案輻條,才能加入中心。這可防止專案擁有者將不當的 NCC 輻條連結至 NCC 全域路由表。一旦接受或拒絕某個 Spoke,您可以執行上述指令,隨後多次拒絕或接受該 Spoke。
登入 Cloud Shell,返回 NCC 中樞所在的專案。
找出要檢查的跨專案 Spoke
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reason:PENDING_REVIEW"
接受輪輻
gcloud network-connectivity hubs accept-spoke ncc-hub --spoke=xproj-spoke
選用:拒絕對話輪
gcloud network-connectivity spokes reject-spoke ncc-hub --spoke=xproj-spoke
--details="some reason to reject"
在 Hub 上列出有效的 Spoke
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="state:ACTIVE"
NAME PROJECT LOCATION TYPE STATE STATE REASON
Xproj-spoke xproj global VPC_NETWORK ACTIVE
vpc4-spoke4 user-3p-dev global VPC_NETWORK ACTIVE
vpc1-spoke1 user-3p-dev global VPC_NETWORK ACTIVE
vpc2-spoke2 user-3p-dev global VPC_NETWORK ACTIVE
vpc3-spoke3 user-3p-dev global VPC_NETWORK ACTIVE
在中樞上列出子網路路徑
您是否可以在輸出內容中看到跨虛擬私有雲輪輻的子網路路徑?
gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.100.1.0/24 ACTIVE VPC_PRIMARY_SUBNET xprj-vpc ncc-hub default
使用「Include-Export」篩選器更新跨專案 Spoke VPC
登入 VPC 不在 NCC Hub 專案中的專案。在 Cloud Shell 中,使用以下指令將 VPC 設為 NCC 輻射點。
- HUB_URI 應為其他專案中的樞紐 URI。
- VPC_URI 應與輪輻位於相同專案
- VPC-network 會指定這項跨專案中的 VPC 將加入其他專案中的 NCC Hub
- 只將子網路範圍 10.100.2.0/24 匯入 NCC 中樞路由表
- 請注意輸出內容中的「ETAG」值。這個值是由 NCC 產生,您必須將這個值提供給 NCC 中樞管理員。NCC 中樞管理員在接受跨專案輻條加入中樞的要求時,需要參照這個值。
gcloud network-connectivity spokes linked-vpc-network update xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--include-export-ranges=10.100.2.0/24
Update request issued for: [xprj-vpc]
Waiting for operation [projects]/xproject/locations/global/operations/operation-1742936388803-6313100521cae-020ac5d2-58
52fbba] to complete...done.
Updated spoke [xprj-vpc].
createTime: '2025-02-14T14:25:41.996129250Z'
etag: '4'
fieldPathsPendingUpdate:
- linked_vpc_network.include_export_ranges
group: projects/xxxxxxxx/locations/global/hubs/ncc-hub/groups/default
hub: projects/xxxxxxxx/locations/global/hubs/ncc-hub
linkedVpcNetwork:
includeExportRanges:
- 10.100.2.0/24
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/vpc1-spoke
name: projects/xproject/locations/global/spokes/xprj-vpc
reasons:
- code: UPDATE_PENDING_REVIEW
message: Spoke update is Pending Review
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 182e0f8f-91cf-481c-a081-ea6f7e40fb0a
updateTime: '2025-03-25T20:59:51.995734879Z'
找出要審查的更新跨專案支線
登入託管 NCC 中樞的專案。在 cloudshell 上使用這項指令,查看跨專案 VPC 輻射狀態。
- ETAG 值是什麼?這個值應與 VPC 輻射線更新的輸出內容相符。
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reasons:UPDATE_PENDING_REVIEW" \
--format=yaml
接受跨專案主頁的更新變更
使用指令接受跨專案分支加入 NCC Hub 的要求
gcloud network-connectivity hubs accept-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--spoke-etag={etag value}
視需要拒絕跨專案主頁的更新變更
使用這項指令拒絕跨專案分支加入 NCC Hub 的要求
gcloud network-connectivity hubs reject-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--details="not today" \
--spoke-etag={etag value}
確認跨專案輪輻已加入 NCC 中樞
gcloud network-connectivity hubs list-spokes ncc-hub \ --filter="name:xproj-spoke"
7. 虛擬私有雲之間的 Private NAT
總覽
在本節中,您將為兩個虛擬私有雲之間重疊的子網路範圍設定私有 NAT。請注意,虛擬私有雲之間的私人 NAT 需要 NCC。
在上一節中,VPC2 和 VPC3 的子網路範圍「10.3.3.0/24」重疊。兩個 VPC 都設為 NCC 輪輻,以便排除重疊的子網路插入 NCC 中樞路由表,這表示沒有第 3 層資料路徑可連線至位於該子網路的主機。
在 NCC 中樞專案中使用這些指令,找出重疊的子網路範圍。
gcloud compute networks subnets list --network vpc2-ncc
gcloud compute networks subnets list --network vpc3-ncc
在 vpc2-ncc 上,哪個子網路包含重疊的 IP 範圍?
*請記下子網路名稱並儲存起來。您將為這個範圍設定來源 NAT。
設定 Private NAT
將可轉送的子網路範圍專用於 VPC2 重疊子網路的來源 NAT 流量。使用「–purpose=PRIVATE_NAT」標記設定不重疊的子網路範圍。
gcloud beta compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT
建立專用雲端路由器來執行私人 NAT
gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1
請將 Cloud Router 設定為來源 NAT,從 vpc2-ncc 的 10.3.3.0/24 重疊範圍。在下列範例設定中,「overlapping-vpc3」是重疊子網路的名稱。「ALL」關鍵字會指定子網路中的所有 IP 範圍都會進行來源 NAT。
gcloud beta compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1
在先前的步驟中,我們建立了 NAT IP 範圍集區和要轉譯的特定子網路。在這個步驟中,請建立 NAT 規則「1」,如果目的地網路採用 NCC 中樞路由表中的路徑,則該規則會將來自重疊子網路範圍的流量對應至網路封包。
gcloud beta compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat
驗證 Private NAT 的資料路徑
gcloud beta compute routers nats describe ncc2-nat --router=private-nat-cr
輸出範例
enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
sourceNatActiveRanges:
- https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/ncc2-spoke-nat
match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/xxxxxxxx/locations/global/hubs/ncc-hub"
ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/overlapping-vpc3
sourceIpRangesToNat:
- ALL_IP_RANGES
type: PRIVATE
選用:
- 切換至網頁版控制台
- 依序前往「網路服務」>「Cloud NAT」>「ncc2-nat」
確認系統預設已啟用動態通訊埠分配功能。
接下來,您將驗證使用為 VPC2 設定的私人 NAT 路徑的資料路徑。
開啟 "vm1-vpc1-ncc" 的 SSH 工作階段,然後使用下方的 tcpdump 指令,擷取來自 NAT 集區範圍 "10.10.10.0/29" 的封包。
vm1-vpc1-ncc
sudo tcpdump -i any net 10.10.10.0/29 -n
在撰寫此程式碼研究室的內容時,私人 NAT 不支援 ICMP 封包。建立 SSH 工作階段,連線至「pNat-vm-vpc2」,然後使用 curl 指令 (如以下所示),透過 TCP 80 通訊埠連線至「vm1-vpc1-ncc」。
pnat-vm-vpc2
curl 10.1.1.2 -v
檢查 "vm1-vpc1-ncc" 上的 tcpdump 輸出內容。"vm1-vpc1-ncc." 上,TCP 工作階段的來源 IP 位址為何?
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4 In IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4 Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>
8. NCC 支援 IPv6 子網路
Network Connectivity Center 支援 NCC 虛擬私有雲輪輻和混合型輪輻之間的 IPv6 子網路交換和動態路徑交換。在本節中,將 NCC 設為支援僅 IPv6 和雙重堆疊 IPv4 和 IPv6 子網路路徑交換模式。
建立新的 IPv6 虛擬私有雲,以便以虛擬私有雲輪輻的形式加入 NCC-Hub
gcloud compute networks create vpc5-ncc \
--subnet-mode custom \
--enable-ula-internal-ipv6
gcloud compute networks subnets create vpc4-ipv4-subnet1 \
--network vpc5-ncc \
--range 10.5.5.0/24 \
--region us-central1
使用這個指令將 VPC5 設為 NCC 輪輻,並排除將 IPv4 子網路路徑匯出至中樞路徑表的動作。將 IPv6 ULA 網路匯出至 NCC 中樞路由表。
gcloud network-connectivity spokes linked-vpc-network create vpc5-spoke5 \
--hub=ncc-hub \
--vpc-network=vpc5-ncc \
--include-export-ranges=ALL_IPV6_RANGES
--exclude-export-ranges=10.5.5.0/24
--global
為私人 IPv6 專屬本機位址 (ULA) 啟用 VPC1 和 VPC4。GCP 會自動指派 fd20::/20 範圍內的所有 ULA 位址。
gcloud compute networks update vpc-ncc4 \
--enable-ula-internal-ipv6
gcloud compute networks update vpc-ncc1 \
--enable-ula-internal-ipv6
在 VPC1 中建立原生 IPv6 和雙重堆疊 IPv4_v6 子網路
gcloud compute networks subnets create vpc1-ipv6-sn1 \
--network=vpc-ncc1 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc1-ipv64-sn2 \
--network=vpc-ncc1 \
--range=10.10.10.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
在 VPC4 中建立原生 IPv6 和雙重堆疊 IPv4_v6 子網路
gcloud compute networks subnets create vpc4-ipv6-sn1 \
--network=vpc-ncc4 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc4-ipv64-sn2 \
--network=vpc-ncc4 \
--range=10.40.40.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
在 VPC1 上建立 IPv6 VPC 防火牆規則,允許來自 IPv6 ULA 範圍的流量。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc1 \
--network=vpc-ncc1 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
在 VPC4 上建立 IPv6 VPC 防火牆規則,允許來自 IPv6 ULA 範圍的流量。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc4 \
--network=vpc-ncc4 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
建立三個 GCE IPv6 執行個體,以便在下一節中驗證資料路徑連線
gcloud compute instances create vpc4-ipv6-vm \
--zone us-central1-a \
--subnet=vpc4-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-ipv6-vm \
--zone us-central1-a \
--subnet=vpc1-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-dual-stack-vm \
--zone us-east1-b \
--network=vpc-ncc1 \
--subnet=vpc2-ipv64-sn2 \
--stack-type=IPV4_IPV6
檢查 NCC Hub 是否有 IPv6 子網路
檢查 NCC 中樞路徑表中的 IPv6 ULA 子網路。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
請注意,上述指令的輸出結果並未列出 IPv6 子網路。根據預設,系統不會將 VPC 輪輻中的 IPv6 子網路匯出至 NCC 中樞路由表。
Listed 0 items.
使用下列 gcloud 指令更新 VPC1 和 VPC4 輻條,將 IPv6 子網路匯出至 NCC 中樞路徑表。
gcloud network-connectivity spokes linked-vpc-network update vpc1-spoke1 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
gcloud network-connectivity spokes linked-vpc-network update vpc4-spoke4 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
再次檢查 NCC 中樞路由表中的 IPv6 ULA 子網路。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
輸出範例
IP_CIDR_RANGE PRIORITY LOCATION STATE TYPE SITE_TO_SITE NEXT_HOP HUB ROUTE_TABLE
fd20:c95:95d2:1:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-hub default
fd20:c95:95d2:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-hub default
9. 驗證資料路徑連線
IPv4 資料路徑連線
請參考圖表,確認各虛擬機器之間的 IPv4 資料路徑。
透過 SSH 連線至「vm1-vpc1-ncc」,並啟動 TCP 轉儲,以追蹤來自「vm2-vpc2-ncc」的 ICMP 封包。提醒你,這個 VM 位於 VPC2 中。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
建立 SSH 工作階段,連線至「vm1-vpc2-ncc」並「ping」vm1-vpc1-ncc 的 IP 位址。
vm1-vpc2-ncc
ping 10.1.1.2
建立 SSH 連線至「vm1-vpc2-ncc」,並「ping」vm1-vpc4-ncc 的 IP 位址。
vm1-vpc2-ncc
ping 240.0.0.2
IPv6 資料路徑連線
請參考圖表,確認各虛擬機器之間的 IP64 資料路徑。
使用 gcloud 指令列出每個啟用 IPv6 的執行個體的 IP 位址。
gcloud compute instances list --filter="INTERNAL_IP:fd20"
輸出內容範例
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
vpc1-ipv6-vm us-central1-a n1-standard-1 fd20:90:6768:0:0:1:0:0/96 RUNNING
vpc4-ipv6-vm us-central1-a n1-standard-1 fd20:c95:95d2:1:0:1:0:0/96 RUNNING
vpc1-dual-stack-vm us-east1-b n1-standard-1 10.10.10.3 XXX.196.137.107 RUNNING
fd20:90:6768:1000:0:1:0:0/96
建立 SSH 工作階段,連線至「vpc1-dualstack-vm」並「ping」vpc1-ipv6-vm 的 IPv6 位址,以驗證全域虛擬私有雲中的 IPv6 連線
ping fd20:90:6768:1000:0:1::
建立 SSH 工作階段,連線至「vpc1-dualstack-vm」並「ping」vpc4-ipv6-vm 的 IPv6 位址,藉此驗證 NCC 連線的 IPv6 連線。
ping fd20:c95:95d2:1:0:1::
10. 清除
登入 Cloud Shell,並刪除中樞和分支機構網站網路中的 VM 執行個體
刪除私人 VPC Nat 設定
gcloud beta compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet
gcloud beta compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet
gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet
刪除 ncc 輻
gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet
gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet
拒絕跨專案輻
從 NCC 中樞拒絕跨專案虛擬私有雲輪輻。
gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global
刪除 NCC 中樞
gcloud network-connectivity hubs delete ncc-hub --quiet
刪除防火牆規則
gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc1
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc4
刪除 GCE 執行個體
gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet
gcloud compute instances delete vpc4-ipv6-vm --zone us-central1-a --quiet
gcloud compute instances delete vpc2-dual-stack-vm --zone us-east1-b --quiet
gcloud compute instances delete vpc2-ipv6-vm --zone us-central1-a --quiet
刪除虛擬私有雲子網路
gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet
gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv6-sn1 --region=us-central1 --quiet
gcloud compute networks subnets delete vpc4-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc4-ipv6-sn1 --region=us-central1 --quiet
刪除虛擬私有雲
gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc
--quiet
11. 恭喜!
您已完成 Network Connectivity Center 實驗室!
涵蓋的內容
- 已設定全網狀虛擬私有雲對等互連網路,並使用 NCC Hub
- NCC 輪輻排除篩選器
- 跨專案輪輻支援
- 虛擬私有雲之間的 Private NAT
後續步驟
©Google, LLC 或其關係企業。版權所有。請勿散布。