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

1. 簡介

總覽

在本研究室中,使用者可瞭解如何運用 Network Connectivity Center(NCC) 的虛擬私有雲輪輻,大規模建立跨虛擬私有雲連線能力。當使用者將虛擬私有雲定義為虛擬私有雲輪輻後,他們就能透過 NCC 中樞,將虛擬私有雲連線至多個虛擬私有雲網路。搭配使用 NCC 與虛擬私有雲輪輻設定後,系統就會改用集中式連線管理模式,降低透過虛擬私有雲對等互連管理配對虛擬私有雲間連線的作業複雜度。

回想一下,Network Connectivity Center (NCC) 是 Google Cloud 中網路連線管理的軸輻式控制層模型。中樞資源為互連網路輪輻提供集中式連線管理模型。

建構項目

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

課程內容

  • 具備 NCC 的完整網格虛擬私有雲連線能力
  • 虛擬私有雲中的私人網路位址轉譯 (NAT)

軟硬體需求

  • 瞭解 GCP 虛擬私有雲網路
  • Cloud Router 和 BGP 轉送的知識
  • 兩個不同的 GCP 專案
  • 這個程式碼研究室需要 5 個虛擬私有雲。其中一個虛擬私有雲必須位於 NCC 中樞以外的專案
  • 請檢查「配額:網路」和「要求新增網路」(如有需要),下方螢幕截圖如下:

6d1b99c6da87fd84.png

目標

  • 設定 GCP 環境
  • 設定含有虛擬私有雲的 Network Connectivity Center 做為輪輻
  • 驗證資料路徑
  • 瞭解 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,但其他專案中的其他管理員則可將輪輻新增至中樞。

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

虛擬私有雲支援的子網路範圍

除了私人使用的公開 IP 位址以外,NCC 支援所有有效的 IPv4 子網路範圍。在這個步驟中,請在 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
  • 內部應用程式內購
  • 範圍是 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 都會指派給先前建立的一個虛擬私有雲

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

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 中樞。請記下名稱和相關路徑。

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 指令,將三個虛擬私有雲設為 NCC 輪輻。

a70bc80037927bb0.png

將虛擬私有雲設為 NCC 輪輻

請依序將下列虛擬私有雲設為 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 輪輻。

管理員可以排除子網路路徑,不讓系統將子網路路徑從虛擬私有雲輪輻匯出至 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」排除 /25 子網路組合到中樞轉送資料表關鍵字,篩選特定範圍內的 /24 摘要路徑。

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

e1190fa898c5097d.png

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

本研究室中會同時使用 Google Cloud 控制台和 Cloud Shell,以便與 GCP 互動。

跨專案輪輻 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 角色。

您至少要具備 IAM 角色「networkconnectivity.networkSpokeManager」授予跨專案輪輻管理員。」

下表列出 NCC 中樞和輪輻管理員所需的 IAM 角色以供參考。

角色/說明

權限

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

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager:允許在中樞中新增及管理輪輻。要在共用虛擬私有雲中使用,代管專案擁有 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 中樞 URI。在下一個步驟中,您需要 URI 路徑,才能設定跨專案 NCC 輪輻。

gcloud network-connectivity hubs describe ncc-hub

跨專案輪輻虛擬私有雲

登入虛擬私有雲「不」隸屬於 NCC Hub 專案的其他專案。在 Cloud Shell 中,使用這個指令將 VPC 設為 NCC 輪輻。

  • HUB_URI 應為其他專案中中樞的 URI。
  • VPC_URI 應與輪輻相同的專案
  • 虛擬私有雲網路會指定這項跨專案中的虛擬私有雲會加入其他專案中的 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. 拒絕或接受跨專案輪輻

總覽

NCC 中樞管理員必須明確接受跨專案輪輻,才能加入中樞。這麼做可以避免專案擁有者將惡意 NCC 輪輻附加至 NCC 全域路由資料表。接受或拒絕輪輻之後,即可執行上述指令,無限次拒絕或接受輪輻。

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

找出要查看的跨專案輪輻

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"

在中樞上列出啟用的輪輻

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.0.0/16  ACTIVE  VPC_PRIMARY_SUBNET  xprj-vpc  ncc-hub  default

7. 虛擬私有雲之間的私人 NAT

總覽

在本節中,您將為兩個虛擬私有雲之間重疊的子網路範圍設定私人網路位址轉譯 (NAT)。請注意,虛擬私有雲之間的私人網路位址轉譯(NAT) 必須搭配 NCC。

在上一節中,VPC2 和 VPC3 設定了重疊的子網路範圍「10.3.3.0/24」。這兩個虛擬私有雲都設為 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

驗證私人 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 輸出內容。產生 TCP 工作階段到 「vm1-vpc1-ncc」 中網路伺服器的來源 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 傾印檔,以便追蹤來自 的 ICMP 封包vm2-vpc2-ncc。」提醒您,這個 VM 位於 VPC2 中。

vm1-vpc1-ncc

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

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

vm1-vpc2-ncc

ping 10.1.1.2

建立「vm1-vpc2-ncc」和「ping」的 SSH「vm1-vpc4-ncc」的 IP 位址。

vm1-vpc2-ncc

ping 240.0.0.2

9. 清除

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

刪除私人虛擬私有雲 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 中樞
  • NCC 輪輻「排除」篩選器
  • 支援跨專案輪輻
  • 虛擬私有雲之間的私人網路位址轉譯 (NAT)

後續步驟

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