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

1. 簡介

總覽

在本實驗室中,使用者將瞭解如何藉由支援虛擬私有雲 (VPC) 輪輻,運用 Network Connectivity Center (NCC) 大規模建立 VPC 之間的連線。將 VPC 設為 VPC 輪輻後,即可透過 NCC 中樞將該 VPC 連至多個 VPC 網路。透過 NCC 和虛擬私有雲輪輻設定,您可使用集中式連線管理模型,降低透過虛擬私有雲對等互連管理成對虛擬私有雲連線的操作複雜度。

請回想一下,Network Connectivity Center (NCC) 是中樞與輪輻的控制層模式,可在 Google Cloud 管理網路連線。中樞資源提供集中式連線管理模式,可以在輪輻間建立互連網路。

建構項目

在本程式碼研究室中,您將運用 NCC 中樞建立邏輯中樞和輪輻拓撲,在三個不同的 VPC 之間實作全網狀 VPC 連線架構。

課程內容

  • 使用 NCC 建立全網狀 VPC 連線
  • 虛擬私有雲之間的 Private NAT

軟硬體需求

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

6d1b99c6da87fd84.png

目標

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

事前準備

Google Cloud 控制台和 Cloud Shell

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

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 新增附件的 Spoke。

networkconnectivity.spokes.**

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

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

2. 設定網路環境

總覽

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

為展示跨專案的 spoke 支援,我們會在稍後的步驟中,於不同專案中部署虛擬私有雲和防火牆規則。

a7cd9b23f3eb1b70.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

在每個虛擬私有雲中設定 GCE VM

您需要暫時連上網際網路,才能在「vm1-vpc1-ncc」上安裝套件。

建立四部虛擬機器,每部 VM 都會指派給先前建立的其中一個 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 中樞。NCC 中樞會做為控制層,負責在每個 VPC 輪輻之間建立路由設定。

75b860451360ad9f.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 中樞提供路由表,可定義用於建立資料連線的控制層。找出 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 輪輻。

e7db89c96aefcbc0.png

將 VPC 設為 NCC 輪輻

依下列順序將 VPC 設為 NCC 輪輻

  • 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 輪輻。

管理員可排除子網路路由,避免從 VPC 輪輻匯出至 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 中樞路由表支援所有有效的 IPv4 有效範圍類型。

根據預設,私用公開 IP 位址 (PUPI) 子網路範圍不會從 VPC 輪輻匯出至 NCC 中樞路由表。

使用 gcloud 指令確認網路 50.50.50.0/24「不在」NCC 中樞的路由表中。

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

使用下列 gcloud 指令更新 VPC4-Spoke,以便在 NCC VPC 之間啟用 PUPI 位址交換。

gcloud network-connectivity spokes linked-vpc-network update vpc4-spoke4 \
--include-export-ranges=ALL_IPV4_RANGES \
--global

使用 gcloud 指令,在 NCC 中樞的路由表中找出網路 50.50.50.0/24。

gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default | grep 50.50.50.0/24

5. NCC 跨專案輪輻

總覽

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

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

70b8d1872ca1e8d4.png

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

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

跨專案 Spoke 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 [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 新增附件的 Spoke。

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 Hub 專案 URI

使用這項 gcloud 指令找出 NCC 中樞 URI。您會在下一個步驟中設定跨專案 NCC 輪輻時,需要用到 URI 路徑。

gcloud network-connectivity hubs describe ncc-hub

跨專案 Spoke VPC

登入其他專案,該專案的 VPC 不屬於 NCC Hub 專案。在 Cloud Shell 中,使用下列指令將 VPC 設為 NCC 輪輻。

  • HUB_URI 應為其他專案中樞的 URI。
  • VPC_URI 應與輪輻位於相同專案
  • VPC 網路會指定這個跨專案的 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. 拒絕或接受跨專案 Spoke

總覽

NCC 中樞管理員必須明確接受跨專案的 Spoke,才能加入中樞。這樣一來,專案擁有者就無法將惡意 NCC 輪輻附加至 NCC 全域路由表。接受或拒絕 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 上的有效 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 上的子網路路徑

從輸出內容中,您是否能看到跨 VPC 輪輻的子網路路由?

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 網路會指定這個跨專案的 VPC 加入另一個專案中的 NCC Hub
  • 僅將子網路範圍 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 中,使用下列指令檢查跨專案虛擬私有雲輻條更新的狀態。

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

接受跨專案的子專案更新

使用指令接受跨專案 Spoke 加入 NCC 中樞的要求

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 中樞的要求

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} 

確認跨專案的 spoke 已加入 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」

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

114050bb65e0c4e2.png

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

5035b181aeaa30a8.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

撰寫本程式碼研究室時,Private NAT 不支援 ICMP 封包。建立連至「pNat-vm-vpc2」的 SSH 工作階段,並使用 curl 指令 (如下所示) 連至「vm1-vpc1-ncc」的 TCP 通訊埠 80。

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

519afcf8a0d506f0.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

為私有 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 虛擬私有雲防火牆規則,允許來自 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 子網路。根據預設,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

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 輪輻,排除兩個特定內部 IPv6 子網路和一個外部 IPv6 子網路,以免這些子網路注入 NCC 中樞路由表。

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 資料路徑。

424df0ebe4510ebb.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 資料路徑。

aa1f3a26c1a62b30.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 中樞設定全網狀 VPC 對等互連網路
  • NCC 輪輻排除篩選器
  • 跨專案輪輻支援
  • 虛擬私有雲之間的 Private NAT

後續步驟

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