程式碼研究室:將 NCC 虛擬私有雲做為輪輻

1. 簡介

總覽

在本實驗室中,使用者將瞭解如何透過支援虛擬私有雲輪輻,使用 Network Connectivity Center(NCC) 大規模建立虛擬私有雲間的連線。使用者將 VPC 定義為 VPC 輪輻時,即可透過 NCC 中樞將其連線至多個 VPC 網路。透過虛擬私有雲輻射拓撲設定使用 NCC,可減少透過虛擬私有雲對等互連管理成對虛擬私有雲連線的操作複雜度,改用集中式連線管理模型。

請注意,Network Connectivity Center (NCC) 是中樞與輪輻控制平面模型,用於管理 Google Cloud 中的網路連線。中樞資源提供集中式連線管理模式,可互連輪輻。

建構項目

在本程式碼研究室中,您將使用 NCC 中樞建立邏輯中樞和輪輻拓撲,在三個不同的虛擬私有雲之間實作完整網狀的虛擬私有雲連線架構。

課程內容

  • 使用 NCC 建立全網格虛擬私有雲連線
  • 跨 VPC 的 Private NAT

軟硬體需求

  • 瞭解 GCP 虛擬私有雲網路
  • 瞭解 Cloud Router 和 BGP 路由
  • 兩個不同的 GCP 專案
  • 本程式碼研究室需要 5 個 VPC。其中一個虛擬私有雲必須位於與 NCC 中樞不同的專案中
  • 檢查「配額:網路」,並視需要要求新增網路,如下方螢幕截圖所示:

6bc606cb34bce7e8.png

目標

  • 設定 GCP 環境
  • 設定 Network Connectivity Center,並將虛擬私有雲設為輪輻
  • 驗證資料路徑
  • 探索 NCC 服務功能
  • 清除所用資源

事前準備

Google Cloud 控制台和 Cloud Shell

在本實驗室中,我們將使用 Google Cloud 控制台和 Cloud Shell 與 GCP 互動。

NCC Hub 專案 Google Cloud 控制台

如要使用 Cloud Console,請前往 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. 設定網路環境

總覽

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

為展示跨專案的 Spoke 支援,我們會在後續步驟中,於不同專案部署 VPC 和防火牆規則。

dc4ed09dae1a0056.png

建立虛擬私有雲和子網路

虛擬私有雲網路包含子網路,您將安裝 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

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

在每個虛擬私有雲上設定防火牆規則,允許

  • 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」上安裝套件。

建立四部虛擬機器,每部虛擬機器都會指派給先前建立的其中一個虛擬私有雲

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 中樞會做為控制層,負責在每個虛擬私有雲輪輻之間建立轉送設定。

860347511de47cea.png

啟用 API 服務

如果尚未啟用,請啟用 Network Connectivity 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 Hub 導入了路由表,可定義控制層,用於建立資料連線。找出 NCC Hub 的路由表名稱

 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 Spoke。

b367b1659d2df694.png

將虛擬私有雲設定為 NCC Spoke

依下列順序將 VPC 設定為 NCC Spoke

  • VPC4
  • VPC1
  • VPC2
  • VPC3

將 VPC4 設定為 NCC 輪輻,並指派給先前建立的 NCC 中樞。NCC 說話 API 呼叫必須指定位置。「--global」旗標可讓使用者在設定新的 NCC 輪輻時,不必指定完整的 URI 路徑,簡化 gcloud 語法。

gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global

將 VPC1 設為 NCC 輪輻。

管理員可以排除子網路路徑,避免從虛擬私有雲輪輻匯出至 NCC 中樞的路由表。在本程式碼研究室的這一部分,請根據摘要前置字元建立排除匯出規則,防止 VPC1 的子網路匯出至 NCC 中樞路徑表。

使用這個 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 範圍

使用 gcloud 指令更新 VPC2 輪輻,排除重疊的 IP 範圍。

gcloud  network-connectivity spokes linked-vpc-network update vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global

使用 gcloud 指令更新 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 搭配跨專案輪輻

總覽

到目前為止,您已設定與 Hub 屬於同一個專案的 NCC Spoke。在本節中,您將使用 gCloud 指令,從 NCC Hub 以外的專案,將 VPC 設定為 NCC Spoke。

這樣一來,管理自家虛擬私有雲的專案擁有者,就能透過 NCC 中樞參與網路連線。

a90b3185e30832e8.png

跨專案:Google Cloud 控制台和 Cloud Shell

在本實驗室中,我們將使用 Google Cloud 控制台和 Cloud Shell 與 GCP 互動。

跨專案 Spoke Google Cloud 控制台

如要使用 Cloud Console,請前往 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 角色。

至少須將「networkconnectivity.networkSpokeManager」IAM 角色授予跨專案的 spoke 管理員。」

下表列出 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 中樞
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. 拒絕或接受跨專案 Spoke

總覽

NCC Hub 管理員必須明確接受跨專案的 Spoke,才能加入 Hub。這可防止專案擁有者將惡意 NCC 輪輻附加至 NCC 全域路由表。接受或拒絕 Spoke 後,只要執行上述指令,即可視需要多次拒絕或接受。

登入 Cloud Shell,返回 NCC 中樞所在的專案。

找出要檢閱的跨專案 Spokes

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 上的有效 Spokes

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

列出 Hub 上的子網路路徑

從輸出內容中,您是否可以看到跨虛擬私有雲輪輻的子網路路徑?

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 篩選器更新跨專案輪輻虛擬私有雲

登入 VPC 不屬於 NCC Hub 專案的專案。在 Cloud Shell 中,使用這個指令將 VPC 設定為 NCC 輪輻。

  • HUB_URI 應為其他專案中樞紐的 URI。
  • VPC_URI 應與輪輻位於同一專案
  • VPC-network 會指定這個跨專案中的 VPC 加入另一個專案的 NCC 中樞
  • 只將子網路範圍 10.100.2.0/24 匯入 NCC 中樞路由表
  • 請記下輸出內容中的「ETAG」值。這個值是由 NCC 產生,您需要提供給 NCC 中樞管理員。NCC 中心管理員接受跨專案 Spoke 加入中心的請求時,需要參考這個值。
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'

找出要查看的更新跨專案 Spoke

登入託管 NCC 中樞的專案。在 Cloud Shell 中,使用下列指令檢查跨專案虛擬私有雲 Spoke 更新的狀態。

  • ETAG 值為何?這個值應與 VPC 支線更新的輸出內容相符。
gcloud network-connectivity hubs list-spokes ncc-hub \ 
--filter="reasons:UPDATE_PENDING_REVIEW" \
--format=yaml

接受跨專案子專案的更新變更

使用指令接受跨專案 Spoke 加入 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}

選擇拒絕跨專案子專案的更新變更

使用指令拒絕跨專案 Spoke 加入 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

總覽

在本節中,您將為兩個虛擬私有雲之間重疊的子網路範圍設定 Private NAT。請注意,虛擬私有雲之間的 Private 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,從 vpc2-ncc 來源 NAT 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

(選用)

  • 切換至網頁版控制台
  • 依序前往「Network Services」(網路服務) >「Cloud NAT」>「ncc2-nat」

確認系統預設會啟用動態通訊埠分配。

7317d3cfb7e9468b.png

接著,您會驗證使用為 VPC2 設定的私人 NAT 路徑的資料路徑。

444d45616f1d0cae.png

開啟 「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 子網路路徑交換模式。

57282c3276d50671.png

建立新的 IPv6 虛擬私有雲,並以虛擬私有雲輪輻的形式加入 NCC 中樞。GCP 會自動從 fd20::/20 範圍指派所有 ULA 位址。

gcloud compute networks create vpc5-ncc \
--subnet-mode custom \
--enable-ula-internal-ipv6 

gcloud compute networks subnets create vpc5-ext-ipv6 \ --network=vpc5-ncc \ 
--stack-type=IPV6 \ 
--ipv6-access-type=EXTERNAL \ 
--region=us-central1

gcloud compute networks subnets create vpc5-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 \
--exclude-export-ranges=10.5.5.0/24
--global

為虛擬私有雲 1 和虛擬私有雲 4 啟用私有 IPv6 專屬本機位址 (ULA)。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 虛擬私有雲防火牆規則,允許來自 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 虛擬私有雲防火牆規則,允許來自 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 執行個體,以便在下一節中驗證資料路徑連線。注意:「vpc1-dualstack-vm」將做為防禦主機,用來取得原生 IPv6 GCE VM 的頻外存取權。

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 子網路。根據預設,系統不會將虛擬私有雲輪輻的 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

gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
  --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:1000:0:0:0:0/64            us-east1     ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc4  ncc-hub  default
fd20:c95:95d2:1:0:0:0:0/64               us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc4  ncc-hub  default
fd20:670:3823:0:0:0:0:0/64               us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  ncc-hub  default
fd20:90:6768:1000:0:0:0:0/64             us-east1     ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc2  ncc-hub  default
fd20:90:6768:0:0:0:0:0/64                us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc2  ncc-hub  default

使用 NCC 虛擬私有雲輪輻篩選 IPv6 子網路

檢查 NCC 中樞路徑表中的外部 IPv6 子網路路徑

gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:vpc-ncc5"

範例輸出內容:ncc 中樞路徑表已瞭解外部 IPv6 範圍。

IP_CIDR_RANGE                  PRIORITY  LOCATION     STATE   TYPE                SITE_TO_SITE  NEXT_HOP  HUB            ROUTE_TABLE
10.5.5.0/24                              us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  ncc-hub  default
2600:1900:4001:ce6:0:0:0:0/64            us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  ncc-hub  default
fd20:670:3823:0:0:0:0:0/64               us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  ncc-hub  default
10.50.10.0/24                            us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  ncc-hub  default

使用下列 gcloud 指令更新 VPC5 輪輻,從 NCC 中心輪輻路徑表排除兩個特定內部 IPv6 子網路和一個外部 IPv6 子網路。

gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
 --global \
 --include-export-ranges=fd20:670:3823:0:0:0:0:0/48 \
 --exclude-export-ranges=fd20:670:3823:1::/64,fd20:670:3823:2::/64  

使用 gcloud 指令驗證 VPC5 輪輻的匯出篩選器

gcloud network-connectivity spokes linked-vpc-network update vpc5-spoke5 \
 --global \
 --include-export-ranges=fd20:670:3823:0:0:0:0:0/48 \
 --exclude-export-ranges=fd20:670:3823:1::/64,fd20:670:3823:2::/64  

檢查 NCC 中樞路徑表,確認是否有外部 IPv6 子網路路徑

gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:vpc-ncc5"

範例輸出內容:ncc 中樞路徑表已瞭解外部 IPv6 範圍。

IP_CIDR_RANGE               PRIORITY  LOCATION     STATE   TYPE                SITE_TO_SITE  NEXT_HOP  HUB            ROUTE_TABLE
fd20:670:3823:0:0:0:0:0/64            us-central1  ACTIVE  VPC_PRIMARY_SUBNET  N/A           vpc-ncc5  demo-mesh-hub  default

9. 驗證資料路徑連線

IPv4 資料路徑連線

請參閱圖表,確認每部虛擬機器之間的 IPv4 資料路徑。

27c61b09f2bf2d02.png

透過 SSH 連線至「vm1-vpc1-ncc」,並啟動 TCP 傾印,追蹤來自「vm2-vpc2-ncc」的 ICMP 封包。提醒您,這個 VM 位於 VPC2。

vm1-vpc1-ncc

sudo tcpdump -i any icmp -v -e -n

建立與「vm1-vpc2-ncc」的 SSH 工作階段,並「ping」連線至「vm1-vpc1-ncc」的 IP 位址。

vm1-vpc2-ncc

ping 10.1.1.2

建立「vm1-vpc2-ncc」的 SSH 連線,並「ping」連線至「vm1-vpc4-ncc」的 IP 位址。

vm1-vpc2-ncc

ping 240.0.0.2

IPv6 資料路徑連線

請參閱圖表,確認每部虛擬機器之間的 IP64 資料路徑。

3afe67968317a16d.png

使用 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

建立「vpc1-dualstack-vm」的 SSH 工作階段,並「ping」vpc1-ipv6-vm 的 IPv6 位址,驗證全域虛擬私有雲內的 IPv6 連線

ping fd20:90:6768:1000:0:1::

建立「vpc1-dualstack-vm」的 SSH 工作階段,並「ping」vpc4-ipv6-vm 的 IPv6 位址,驗證 NCC 連線的 IPv6 連線能力。

ping fd20:c95:95d2:1:0:1::

10. 清除

登入 Cloud Shell,並刪除中樞和分支機構網站網路中的 VM 執行個體

刪除私有虛擬私有雲 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 subnets delete vpc5-ext-ipv6 --region=us-central1 --quiet

刪除虛擬私有雲

gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc, vpc5-ncc --quiet 

11. 恭喜!

您已完成 Network Connectivity Center 實驗室!

涵蓋內容

  • 使用 NCC 中樞設定 Full Mesh 虛擬私有雲對等互連網路
  • NCC 輪輻排除篩選器
  • 跨專案輪輻支援
  • 虛擬私有雲之間的 Private NAT

後續步驟

©Google LLC 或其關係企業。版權所有。請勿散布。