CodeLab:使用 NCC 進行動態路由交換

1. 簡介

總覽

在本研究室中,使用者將瞭解如何透過 Network Connectivity Center (NCC) 支援的 VPC 輪輻和動態路由交換功能,建立大量的內部部署連線。當使用者將 VPC 定義為 VPC 輪輻時,就能透過 NCC 中樞將其連結至多個 VPC 網路。如要與使用者的地端網路建立網路連線,他們可以將路由器機器設備虛擬 NIC、HA_VPN 通道或互連網路 VLAN 連結附加至與 NCC VPC 輻條相同的 NCC 中樞。

中樞資源提供集中式連線管理模式,用於連結輪輻。

建構項目

在本程式碼研究室中,您將使用 NCC 中樞建立邏輯軸輻式拓撲,在 on-premises 網路和工作負載虛擬私有雲之間實作混合式連線。

c06021c6aaa47682.png

課程內容

  • 區分工作負載 VPC 和路由 VPC
  • 虛擬私有雲輪輻和混合式輪輻的 NCC 整合

軟硬體需求

  • 瞭解 GCP 虛擬私有雲網路
  • 瞭解 Cloud Router 和 BGP 路由
  • Google Cloud 專案
  • 檢查您的配額:網路,並視需要申請額外網路,如以下螢幕截圖所示:

6bc606cb34bce7e8.png

目標

  • 設定 GCP 環境
  • 將 Network Connectivity Center 設定為以虛擬私有雲做為輪輻
  • 設定 Network Connectivity Center,並使用高可用性 VPN 通道做為混合式輻條
  • 驗證資料路徑
  • 探索 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 [YOUR-PROJECT-NAME]
projectname=[YOUR-PROJECT-NAME]
echo $projectname
region="us-central1"
zone="us-central1-a"

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. 設定網路環境

總覽

在本節中,我們將在單一專案中部署三個 VPC 網路和防火牆規則。邏輯圖說明瞭這個步驟中要設定的網路環境。在本程式碼研究室中,我們會使用 VPC 模擬內部網路。

6c8baa1bf0676379.png

重要概念 1

Google Cloud 全球 VPC 可在 44 個以上的 GCP 區域之間提供資料路徑連線。Cloud Router 是一種地區服務,會動態通告子網路,並在設定路由器的地區或整個 VPC 網路中傳播已知路徑。決定 Cloud Router 是否要傳播地區或全球路徑的因素,取決於使用者定義的動態轉送模式:地區性或全球性。

在本節中,我們會先設定每個 VPC 的區域轉送模式。在本程式碼研究室的其餘部分:

  • 「Routing VPC」代表未設為 NCC VPC 輻輳的 VPC。
  • 「Workload VPC」代表設定為 NCC 輻射狀節點的 VPC。

建立工作負載虛擬私有雲和子網路

虛擬私人雲端網路包含您將用於安裝 GCE VM 以驗證資料路徑的子網路

vpc_spoke_network_name="workload-vpc"
vpc_spoke_subnet_name="workload-subnet"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
vpc_spoke_name="workload-vpc-spoke"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom 

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"

建立轉送 VPC 和子網路

NCC 支援所有有效的 IPv4 子網路範圍,但不支援私用公開 IP 位址。

routing_vpc_network_name="routing-vpc"
routing_vpc_subnet_name="routing-vpc-subnet"
routing_vpc_subnet_range="10.0.2.0/24"

gcloud compute networks create "${routing_vpc_network_name}" \
--subnet-mode=custom

gcloud compute networks subnets create "${routing_vpc_subnet_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--range="${routing_vpc_subnet_range}"

建立內部虛擬私有雲網路和子網路

NCC 支援所有有效的 IPv4 子網路範圍,但不支援私用公開 IP 位址。

on_prem_network_name="on-prem-net-vpc"
on_prem_subnet_name="on-prem-subnet"
on_prem_subnet_range="10.0.3.0/24"

gcloud compute networks create "${on_prem_network_name}" \
--subnet-mode=custom

gcloud compute networks subnets create "${on_prem_subnet_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--range="${on_prem_subnet_range}"

設定工作負載虛擬私有雲防火牆規則

workload_vpc_firewall_name="workload-protocol-fw-vpc"
workload_port_firewall_name="workload-port-firewall-vpc"

gcloud compute firewall-rules create "${workload_vpc_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp,udp,icmp"

gcloud compute firewall-rules create "${workload_port_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"

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

routing_vpc_fw_name="routing-vpc-protocol-fw"
routing_vpc_port_fw_name="routing-vpc--port-fw"

gcloud compute firewall-rules create "${routing_vpc_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp,udp,icmp"

gcloud compute firewall-rules create "${routing_vpc_port_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"

設定 On-Prem VPC 和 VPC 防火牆規則

prem_protocol_fw_name="onprem-vpc-protocol-firewall"
prem_port_firewall_name="onprem-vpc-port-firewall-prem"

gcloud compute firewall-rules create "${prem_protocol_fw_name}" \
--network=${on_prem_network_name} \
--allow="tcp,udp,icmp"

gcloud compute firewall-rules create "${prem_port_firewall_name}" \
--network=${on_prem_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"

在每個 VPC 中設定 GCE VM

您需要臨時網際網路存取權,才能在「vm1-vpc1-ncc」上安裝套件。

建立三部虛擬機器,每部虛擬機器都會指派至先前建立的其中一個 VPC

gcloud compute instances create vm1-vpc-workload \
--zone us-central1-a \
--subnet="${vpc_spoke_subnet_name}" \
--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-vpc-routing \
--zone us-central1-a \
--subnet="${routing_vpc_subnet_name}" \
--no-address 

gcloud compute instances create vm3-onprem \
--zone us-central1-a \
--subnet="${on_prem_subnet_name}" \
--no-address 

3. 設定混合式連線

在本節中,我們會設定高可用性 VPN 通道,將內部網路和路由虛擬私有雲網路連結在一起。

ad64a1dee6dc74c9.png

在轉送 VPC 中設定 Cloud Router 和 BGP

routing_vpc_router_name="routing-vpc-cr"
routing_vpc_router_asn=64525

gcloud compute routers create "${routing_vpc_router_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--asn="${routing_vpc_router_asn}"

在內部部署 VPC 中,使用 BGP 設定 Cloud Router

on_prem_router_name="on-prem-router"
on_prem_router_asn=64526

gcloud compute routers create "${on_prem_router_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--asn="${on_prem_router_asn}"

在轉送 VPC 中設定 VPN 閘道

routing_vpn_gateway_name="routing-vpc-vpn-gateway"

gcloud compute vpn-gateways create "${routing_vpn_gateway_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}"

在內部部署虛擬私有雲中設定 VPN 閘道

on_prem_gateway_name="on-prem-vpn-gateway"

gcloud compute vpn-gateways create "${on_prem_gateway_name}" \
--region="${region}" \
--network="${on_prem_network_name}"

在轉送 VPC 和內部部署 VPC 中設定 VPN 通道

secret_key=$(openssl rand -base64 24)
routing_vpc_tunnel_name="routing-vpc-tunnel"
on_prem_tunnel_name="on-prem-tunnel"

gcloud compute vpn-tunnels create "${routing_vpc_tunnel_name}" \
--vpn-gateway="${routing_vpn_gateway_name}" \
--peer-gcp-gateway="${on_prem_gateway_name}" \
--router="${routing_vpc_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"

gcloud compute vpn-tunnels create "${on_prem_tunnel_name}" \
--vpn-gateway="${on_prem_gateway_name}" \
--peer-gcp-gateway="${routing_vpn_gateway_name}" \
--router="${on_prem_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"

建立 BGP 工作階段,以便 BGP 對等點轉送 vpc 和內部部署雲端路由器

interface_hub_name="if-hub-to-prem"
hub_router_ip="169.254.1.1"

gcloud compute routers add-interface "${routing_vpc_router_name}" \
--interface-name="${interface_hub_name}" \
--ip-address="${hub_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${routing_vpc_tunnel_name}" \
--region="${region}"

bgp_hub_name="bgp-hub-to-prem"
prem_router_ip="169.254.1.2"
gcloud compute routers add-bgp-peer "${routing_vpc_router_name}" \
--peer-name="${bgp_hub_name}" \
--peer-ip-address="${prem_router_ip}" \
--interface="${interface_hub_name}" \
--peer-asn="${on_prem_router_asn}" \
--region="${region}"

interface_prem_name="if-prem-to-hub"
gcloud compute routers add-interface "${on_prem_router_name}" \
--interface-name="${interface_prem_name}" \
--ip-address="${prem_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${on_prem_tunnel_name}" \
--region="${region}"

bgp_prem_name="bgp-prem-to-hub"
gcloud compute routers add-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--peer-ip-address="${hub_router_ip}" \
--interface="${interface_prem_name}" \
--peer-asn="${routing_vpc_router_asn}" \
--region="${region}"

根據預設,NCC 中樞子網路不會通報至混合式輪輻。在下一個步驟中,請設定雲端路由器,將 NCC 子網路路徑宣告給內部部署網路。

gcloud compute routers update "${routing_vpc_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--set-advertisement-ranges="${vpc_spoke_subnet_ip_range}" \
--region="${region}"
gcloud compute routers update "${on_prem_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--region="${region}"

更新內部部署的雲端路由器 BGP 對等連線設定,以 MED 值為「111」的形式宣告前置字串。在後續章節中,我們將觀察 NCC 在 BGP Med 值下的行為。

on_prem_router_name="on-prem-router"
bgp_prem_name="bgp-prem-to-hub"

gcloud compute routers update-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--advertised-route-priority="111" \
--region="${region}"

檢查路由 vpc 通道的狀態

gcloud compute vpn-tunnels describe routing-vpc-tunnel \
--region=us-central1 \
--format='flattened(status,detailedStatus)'

檢查路由 vpc Cloud Router 的狀態

使用 gcloud 指令列出路由 vpc 雲端路由器的 BGP 學習路徑。

gcloud compute routers get-status routing-vpc-cr \
--region=us-central1

4. Network Connectivity Center 中樞

總覽

在本節中,我們將使用 gcloud 指令設定 NCC Hub。NCC Hub 會擔任控制層,負責在各個虛擬私有雲輪輻之間建立轉送設定。

715e7803d5c09569.png

啟用 API 服務

啟用網路連線 API (如果尚未啟用):

gcloud services enable networkconnectivity.googleapis.com

建立 NCC 中樞

使用 gCloud 指令建立 NCC 中樞

hub_name="mesh-hub"
gcloud network-connectivity hubs create "${hub_name}"

輸出範例

Create request issued for: [mesh-hub]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719930559145-61c448a0426e4-2d18c8dd-7107edbe] to complete...done.               
Created hub [mesh-hub].

說明新建立的 NCC Hub。記下名稱和相關聯的路徑。

gcloud network-connectivity hubs describe mesh-hub
createTime: '2024-07-02T14:29:19.260054897Z'
exportPsc: false
name: projects/ncc/locations/global/hubs/mesh-hub
policyMode: PRESET
presetTopology: MESH
routeTables:
- projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uniqueId: 08f9ae88-f76f-432b-92b2-357a85fc83aa
updateTime: '2024-07-02T14:29:32.583206925Z'

NCC Hub 推出了路由表,用於定義建立資料連線的控制平面。找出 NCC 中樞的路由表名稱

 gcloud network-connectivity hubs route-tables list --hub=mesh-hub
NAME     HUB       DESCRIPTION
default  mesh-hub

找出 NCC 預設路由表的 URI。

gcloud network-connectivity hubs route-tables describe default --hub=mesh-hub
createTime: '2024-07-02T14:29:22.340190411Z'
name: projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uid: fa2af78b-d416-41aa-b442-b8ebdf84f799

列出 NCC Hub 的預設路由表內容。注意* 在定義 NCC 混合式輪輻或 VPC 輪輻之前,NCC 中樞的路徑表格會是空白。

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

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

5. 包含混合式和虛擬私有雲輪輻的 NCC

總覽

在本節中,您將使用 gCloud 指令設定兩個 NCC Spoke。其中一個輪輻是虛擬私有雲輪輻,另一個則是混合式 (VPN) 輪輻。

647c835a25a9ceb4.png

將工作負載虛擬私有雲設定為 NCC 輻射點

將工作負載虛擬私有雲設定為 NCC 輪輻,並指派給先前建立的 NCC 中樞。NCC 語音 API 呼叫需要指定位置。使用「–global」標記,可讓使用者在設定新的 NCC 輻條時,避免指定完整的 URI 路徑。

vpc_spoke_name="workload-vpc-spoke"
vpc_spoke_network_name="workload-vpc"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global
Create request issued for: [workload-vpc-spoke]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719931097138-61c44aa15463f-90de22c7-40c10e6b] to complete...done.               
Created spoke [workload-vpc-spoke].
createTime: '2024-07-02T14:38:17.315200822Z'
group: projects/ncc/locations/global/hubs/mesh-hub/groups/default
hub: projects/ncc/locations/global/hubs/mesh-hub
linkedVpcNetwork:
  uri: https://www.googleapis.com/compute/v1/projects/ncc/global/networks/workload-vpc
name: projects/ncc/locations/global/spokes/workload-vpc-spoke
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 33e50612-9b62-4ec7-be6c-962077fd47dc
updateTime: '2024-07-02T14:38:44.196850231Z'

將 Routing VPC 中的 VPN 通道設為混合式分支

使用這個 gcloud 指令,將 VPN 通道設為混合式輻條,以便加入中繼節點。

vpn_spoke_name="hybrid-spoke"
routing_vpc_tunnel_name="routing-vpc-tunnel"
region="us-central1"
hub_name="mesh-hub"

gcloud network-connectivity spokes linked-vpn-tunnels create "${vpn_spoke_name}" \
--region="${region}" \
--hub="${hub_name}" \
--vpn-tunnels="${routing_vpc_tunnel_name}"

輸出內容範例

Create request issued for: [hybrid-spoke]
Waiting for operation [projects/ncc/locations/us-central1/operations/operation-1719932916561-61c45168774be-0a06ae03-88192175] to complete...done.          
Created spoke [hybrid-spoke].

驗證網狀中樞的輻條設定

使用 gcloud 指令列出 NCC Hub 的預設路由表內容。

gcloud network-connectivity hubs list-spokes mesh-hub 

分析 mesh hub 的預設路徑資料表

使用 gcloud 指令列出 NCC Hub 的預設路由表內容。

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

使用 NCC 混合輻條的動態路徑交換功能時,Cloud Router 學習到的前置字串 (含 BGP MED 值) 會在 NCC 輻條之間傳播。

使用 gcloud 指令查看「111」的優先順序值。

gcloud network-connectivity hubs route-tables routes list \
--hub=mesh-hub \
--route_table=default \
--effective-location=us-central1 \
--filter=10.0.3.0/24

6. 驗證資料路徑

在這個步驟中,我們會驗證 NCC 混合型與 VPC 輻射狀態之間的資料路徑。f266a4a762333161.png

使用這些 gcloud 指令的輸出內容,登入內部部署的 VM。

gcloud compute instances list --filter="name=vm3-onprem"

登入位於內部網路的 VM 執行個體。

gcloud compute ssh vm3-onprem --zone=us-central1-a

在 vm3-onprem 的終端機上,使用 curl 指令建立與在 workload-vpc 中代管的 VM 的網路工作階段。

curl 10.0.1.2 -v
*   Trying 10.0.1.2:80...
* Connected to 10.0.1.2 (10.0.1.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.1.2
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Wed, 03 Jul 2024 15:41:34 GMT
< Server: Apache/2.4.59 (Debian)
< Last-Modified: Mon, 01 Jul 2024 20:36:16 GMT
< ETag: "1e-61c358c8272ba"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
< 

<h3>Web Server: www-vm1</h3>
* Connection #0 to host 10.0.1.2 left intact

7. 清除

登入 Cloud Shell 並刪除 GCP 資源。

刪除 NCC 輪輻

gcloud network-connectivity spokes delete workload-vpc-spoke --global \
--quiet

gcloud network-connectivity spokes delete hybrid-spoke \
--quiet \
--region us-central1

刪除 NCC 中樞

gcloud network-connectivity hubs delete mesh-hub --quiet

刪除防火牆規則

gcloud compute firewall-rules delete onprem-vpc-port-firewall-prem onprem-vpc-protocol-firewall routing-vpc--port-fw routing-vpc-protocol-fw workload-port-firewall-vpc workload-protocol-fw-vpc --quiet

刪除 HA-VPN 通道

gcloud compute vpn-tunnels delete on-prem-tunnel \
--region=us-central1 \
--quiet 

gcloud compute vpn-tunnels delete routing-vpc-tunnel \
--region=us-central1 \
--quiet 

刪除 VPN 閘道

gcloud compute vpn-gateways delete on-prem-vpn-gateway \
--region=us-central1 --quiet

gcloud compute vpn-gateways delete routing-vpc-vpn-gateway \
--region us-central1 --quiet

刪除 Cloud Router

gcloud compute routers delete routing-vpc-cr --region us-central1 --quiet

gcloud compute routers delete on-prem-router --region us-central1 --quiet

刪除 GCE 執行個體

gcloud compute instances delete vm1-vpc-workload \
--zone=us-central1-a \
--quiet


gcloud compute instances delete vm2-vpc-routing \
--zone=us-central1-a \
--quiet

gcloud compute instances delete vm3-onprem \
--zone=us-central1-a \
--quiet

刪除虛擬私有雲子網路

gcloud compute networks subnets delete workload-subnet --region us-central1 --quiet

gcloud compute networks subnets delete on-prem-subnet --region us-central1 --quiet

gcloud compute networks subnets delete routing-vpc-subnet --region us-central1 --quiet

刪除虛擬私有雲

gcloud compute networks delete on-prem-net-vpcworkload-vpc routing-vpc 
--quiet 

8. 恭喜!

您已完成 Network Connectivity Center 的動態路由交換研究室!

涵蓋內容

  • 透過 Network Connectivity Center 進行動態路徑交換

後續步驟

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