研究室:使用 NCC 虛擬私有雲做為輪輻

1. 簡介

總覽

在本研究室中,使用者將瞭解如何透過支援 VPC 輪輻,使用 Network Connectivity Center(NCC) 建立大量的虛擬私有雲間連線。當使用者將 VPC 定義為 VPC 輪輻時,即可透過 NCC 中樞將其連結至多個 VPC 網路。搭配 VPC 輻射狀設定的 NCC 可降低透過虛擬私有雲對等互連管理成對虛擬私有雲間連線的作業複雜度,改用集中式連線管理模式。

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

建構項目

在這個程式碼研究室中,您將使用 NCC 中樞建立邏輯軸輻式拓撲,在三個不同的 VPC 中實作完整網狀的 VPC 連線結構。

課程內容

  • 透過 NCC 提供完整的虛擬私有雲網路連線
  • 跨虛擬私有雲的 Private NAT

軟硬體需求

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

6d1b99c6da87fd84.png

目標

  • 設定 GCP 環境
  • 將 Network Connectivity Center 設定為以虛擬私有雲做為輪輻
  • 驗證資料路徑
  • 探索 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. 設定網路環境

總覽

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

為了示範跨專案輻條支援功能,我們會在後續步驟中,在其他專案中部署虛擬私有雲和防火牆規則。

245f1002db33ca98.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

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

8acc7651f52e251e.png

啟用 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 Hub。記下名稱和相關聯的路徑。

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 中樞的路由表名稱

 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 Hub 的預設路由表內容。注意* 在建立輻條之前,NCC Hub 的路由表格會是空的

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

NCC 中樞的路由表應為空白。

4. 含有虛擬私有雲輪輻的 NCC

總覽

在本節中,您將使用 gcloud 指令將三個 VPC 設為 NCC 輻射點。

a70bc80037927bb0.png

將 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 Hub 的預設路由表內容。NCC Hub 路由表中的兩個 /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 Hub 的預設路由表內容,並查看輸出內容。

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 中樞參與網路連線。

e1190fa898c5097d.png

跨專案: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

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. 拒絕或接受跨專案 Spoke

總覽

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 spokes accept xproj-spoke --global

選用:拒絕對話輪

gcloud network-connectivity spokes reject xproj-spoke \
--global \
--details="some reason to reject"

列出 Hub 上的 Active 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.0.0/16  ACTIVE  VPC_PRIMARY_SUBNET  xprj-vpc  ncc-hub  default

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 compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT

建立專用 Cloud Router 來執行私人 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 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 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 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/projects/yueri-3p-dev/regions/us-central1/subnetworks/ncc2-spoke-nat
  match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/yueri-3p-dev/locations/global/hubs/ncc-hub"
  ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/overlapping-vpc3
  sourceIpRangesToNat:
  - ALL_IP_RANGES
type: PRIVATE

選用:

  • 切換至網頁版控制台
  • 依序前往「網路服務」>「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

在撰寫此程式碼研究室的內容時,私人 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. 驗證資料路徑連線

請參考圖表,確認各虛擬機器之間的資料路徑。

424df0ebe4510ebb.png

透過 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

9. 清除

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

刪除私人 VPC Nat 設定

gcloud compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet

gcloud 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

刪除 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 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 delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc 
--quiet 

10. 恭喜!

您已完成 Network Connectivity Center 研究室!

涵蓋內容

  • 已設定全網狀虛擬私有雲對等互連網路,並使用 NCC Hub
  • NCC 輪輻排除篩選器
  • 跨專案輪輻支援
  • 虛擬私有雲之間的 Private NAT

後續步驟

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