1. 簡介
總覽
在本研究室中,使用者將瞭解如何透過 Network Connectivity Center (NCC) 支援的 VPC 輪輻和動態路由交換功能,建立大量的內部部署連線。當使用者將 VPC 定義為 VPC 輪輻時,就能透過 NCC 中樞將其連結至多個 VPC 網路。如要與使用者的地端網路建立網路連線,他們可以將路由器機器設備虛擬 NIC、HA_VPN 通道或互連網路 VLAN 連結附加至與 NCC VPC 輻條相同的 NCC 中樞。
中樞資源提供集中式連線管理模式,用於連結輪輻。
建構項目
在本程式碼研究室中,您將使用 NCC 中樞建立邏輯軸輻式拓撲,在 on-premises 網路和工作負載虛擬私有雲之間實作混合式連線。
課程內容
- 區分工作負載 VPC 和路由 VPC
- 虛擬私有雲輪輻和混合式輪輻的 NCC 整合
軟硬體需求
- 瞭解 GCP 虛擬私有雲網路
- 瞭解 Cloud Router 和 BGP 路由
- Google Cloud 專案
- 檢查您的配額:網路,並視需要申請額外網路,如以下螢幕截圖所示:
目標
- 設定 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 模擬內部網路。
重要概念 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 通道,將內部網路和路由虛擬私有雲網路連結在一起。
在轉送 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}"
將內部部署子網路通告至路由虛擬私有雲 Cloud Router
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 會擔任控制層,負責在各個虛擬私有雲輪輻之間建立轉送設定。
啟用 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) 輪輻。
將工作負載虛擬私有雲設定為 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 輻射狀態之間的資料路徑。
使用這些 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 或其關係企業。版權所有。請勿散布。