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

1. 簡介

總覽

在本實驗室中,使用者將瞭解如何藉由支援虛擬私有雲 (VPC) 輪輻及動態路由交換功能,運用 Network Connectivity Center (NCC) 大規模建立地端部署連線。將 VPC 設為 VPC 輪輻後,即可透過 NCC 中樞將該 VPC 連至多個 VPC 網路。如要建立與使用者地端部署網路的網路連線,使用者可以將路由器設備的虛擬 NIC、高可用性 VPN 通道或互連網路 VLAN 連結,連至 NCC VPC 輪輻所在的 NCC 中樞。

中樞資源提供集中式連線管理模式,可以在輪輻間建立互連網路。

建構項目

在本程式碼研究室中,您將運用 NCC 中樞建立邏輯中樞和輪輻拓撲,在地端部署網路和工作負載 VPC 之間實作混合式連線。

c06021c6aaa47682.png

課程內容

  • 區分工作負載 VPC 和轉送 VPC
  • 整合 NCC 的 VPC 輪輻和混合式輪輻

軟硬體需求

  • 瞭解 GCP 虛擬私有雲網路
  • 瞭解 Cloud Router 和 BGP 路由
  • Google Cloud 專案
  • 檢查「配額:網路」,並視需要要求新增網路,如下方螢幕截圖所示:

6bc606cb34bce7e8.png

目標

  • 設定 GCP 環境
  • 設定 Network Connectivity Center,將 VPC 設為輪輻
  • 設定 Network Connectivity Center,將高可用性 VPN 通道設為混合式輪輻
  • 驗證資料路徑
  • 探索 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 [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 - 允許在中樞新增及管理輪輻。在 Shared VPC 中使用,其中主專案擁有中樞,但其他專案中的其他管理員可以為其連結新增輪輻至中樞。

networkconnectivity.spokes.**

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

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

2. 設定網路環境

總覽

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

6c8baa1bf0676379.png

重要概念 1

Google Cloud 全域虛擬私有雲可在 44 個以上的 GCP 區域之間提供資料路徑連線。Cloud Router 是地區性服務,會動態通告子網路,然後在設定路由器的地區,或在整個虛擬私有雲網路傳播已知路徑。Cloud Router 是要傳播地區性或全域路徑,取決於使用者定義的動態轉送模式 (地區性或全域)。

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

  • 「路由 VPC」是指未設為 NCC VPC 輪輻的 VPC。
  • 「工作負載 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"

設定路由 VPC 和 VPC 防火牆規則

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"

設定地端 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"

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

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

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

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 通道,在地端部署和路由 VPC 網路之間建立連線。

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 中,設定 Cloud Router 和 BGP

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}"

在地端部署 VPC 中設定 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}"

建立路由 VPC 和地端部署 Cloud Router 之間的 BGP 對接工作階段:

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 中樞子網路預設不會向混合式輪輻 advertise。下一步會說明如何設定 Cloud Router,以便向地端部署網路 advertise 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}"

更新地端部署 Cloud Router 的 BGP 對接設定,以 MED 值「111」advertise 前置字串。在下一節中,我們將觀察 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 Cloud Router 的 BGP 已知路由。

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

4. Network Connectivity Center 中樞

總覽

在本節中,我們將以 gcloud 指令設定 NCC 中樞。NCC 中樞會做為控制層,負責在每個 VPC 輪輻之間建立路由設定。

715e7803d5c09569.png

啟用 API 服務

如果尚未啟用,請啟用 Network Connectivity 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 中樞,並記下名稱和相關聯的路徑:

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 中樞提供路由表,可定義用於建立資料連線的控制層。找出 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 中樞預設路由表的內容。注意* 在定義 Network Connectivity Center 混合式輪輻或 VPC 輪輻前,Network Connectivity Center 中樞的路由表為空白。

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

NCC 中樞路由表應為空白。

5. NCC 混合式輪輻和 VPC 輪輻

總覽

在本節中,您將以 gcloud 指令設定兩個 NCC 輪輻,分別是 VPC 輪輻和混合式 (VPN) 輪輻。

647c835a25a9ceb4.png

將工作負載 VPC 設為 NCC 輪輻

將工作負載 VPC 設為 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'

在路由 VPC 中設定 VPN 通道,做為混合式輪輻

執行下列 gcloud 指令,將 VPN 通道設為混合式輪輻,加入 mesh-hub:

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

驗證 mesh-hub 的輪輻設定

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

gcloud network-connectivity hubs list-spokes mesh-hub 

分析 mesh-hub 的預設路由表

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

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

刪除高可用性 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 或其關係企業。版權所有。請勿散布。