1. 简介
概览
在本实验中,用户将探索如何使用 Network Connectivity Center (NCC) 通过支持 VPC Spoke 和动态路由交换来大规模建立本地连接。当用户将 VPC 定义为 VPC spoke 时,他们可以通过 NCC Hub 将其与多个 VPC 网络连接在一起。如需与用户的本地网络建立网络连接,用户可以将路由器设备虚拟 NIC、HA_VPN 隧道或互连 VLAN 连接附加到与 NCC VPC spoke 相同的 NCC hub。
中心资源提供集中式连接管理模型,用于互连 spoke。
构建内容
在此 Codelab 中,您将使用 NCC 中心构建逻辑的中心辐射型拓扑,该拓扑将在本地网络和工作负载 VPC 之间实现混合连接。
学习内容
- 区分工作负载 VPC 和路由 VPC
- VPC spoke 和混合 spoke 的 NCC 集成
所需条件
- 熟悉 GCP VPC 网络
- 了解 Cloud Router 和 BGP 路由
- Google Cloud 项目
- 请查看您的配额:网络,并在需要时申请额外的网络(屏幕截图如下):
目标
- 设置 GCP 环境
- 将 VPC 配置为 Network Connectivity Center spoke
- 将配备 HA-VPN 隧道的 Network Connectivity Center 配置为混合 spoke
- 验证数据路径
- 探索 NCC 服务功能
- 清理已使用的资源
准备工作
Google Cloud 控制台和 Cloud Shell
在本实验中,我们将使用 Google Cloud 控制台和 Cloud Shell 与 GCP 进行交互。
NCC 中心项目 Google Cloud 控制台
您可以访问 https://console.cloud.google.com 来使用 Cloud 控制台。
在 Google Cloud 中设置以下各项,以便更轻松地配置 Network Connectivity Center:
在 Google Cloud Console 的“项目选择器”页面上,选择或创建一个 Google Cloud 项目。
启动 Cloud Shell。此 Codelab 使用 $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 - 允许网络管理员管理中心和 spoke。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - 允许在 hub 中添加和管理 spoke。适用于共享 VPC 场景,其中宿主项目拥有 Hub,但其他项目中的其他管理员可以为其关联添加 spoke。 | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允许影音平台用户查看中心和辐射点的不同属性。 | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
2. 设置网络环境
概览
在本部分中,我们将在一个项目中部署三个 VPC 网络和防火墙规则。逻辑图展示了将在此步骤中设置的网络环境。在本 Codelab 中,我们将使用 VPC 来模拟一个本地网络。
关键概念 1
Google Cloud 全球 VPC 可在 44 多个 GCP 区域之间提供数据路径连接。Cloud Router 是一项区域性服务,会在配置该路由器的区域或整个 VPC 网络中动态通告子网,并传播已知路由。决定 Cloud Router 是区域性还是全局性传播路由的因素取决于用户定义的动态路由模式:区域性还是全局性。
在本部分中,我们将首先使用区域路由模式配置每个 VPC。在此 Codelab 的其余部分中:
- “路由 VPC”用于标识未配置为 NCC VPC spoke 的 VPC。
- “工作负载 VPC”用于标识配置为 NCC 辐射点的 VPC。
创建工作负载 VPC 和子网
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}"
创建本地 VPC 和子网
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}"
配置工作负载 VPC 防火墙规则
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"
在每个 VPC 中配置 GCE 虚拟机
您需要临时访问互联网,才能在“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 网络连接在一起。
在路由 VPC 中配置使用 BGP 的 Cloud Router 路由器
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}"
在本地 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}"
创建 BGP 会话,以将路由 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 中心子网不会通告到混合 spoke。在下一步中,配置 Cloud Router 路由器以向本地网络通告 NCC 子网路由。
向本地 Cloud Router 通告 VPC spoke 子网
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}"
向路由 VPC Cloud Router 通告本地子网
gcloud compute routers update "${on_prem_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--region="${region}"
更新本地 Cloud Router BGP 对等互连配置,以通告 MED 值为“111”的前缀。在后面的部分中,我们将观察使用 BGP Med 值时的 NCC 行为。
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 Hub
概览
在本部分中,我们将使用 gcloud 命令配置 NCC Hub。NCC 中心将充当控制平面,负责在每个 VPC Spoke 之间构建路由配置。
启用 API 服务
如果尚未启用 Network Connectivity API,请启用该 API:
gcloud services enable networkconnectivity.googleapis.com
创建 NCC Hub
使用 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 Hub 引入了路由表,用于定义用于创建数据连接的控制平面。查找 NCC Hub 路由表的名称
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 集线器的默认路由表的内容。注意* 在定义 NCC 混合 spoke 或 VPC spoke 之前,NCC 中心的路由表将为空。
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub --route_table=default
NCC Hub 的路由表应为空。
5. 包含混合 spoke 和 VPC spoke 的 NCC
概览
在本部分中,您将使用 gCloud 命令配置两个 NCC Spoke。其中一个 spoke 将是 VPC spoke,另一个 spoke 将是混合 (VPN) spoke。
将工作负载 VPC 配置为 NCC spoke
将工作负载 VPC 配置为 NCC spoke,并将其分配给之前创建的 NCC hub。调用 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 隧道配置为混合 Spock
使用以下 gcloud 命令将 VPN 隧道配置为混合 spoke,以加入网状网关。
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
分析网状网关的默认路由表
使用 gcloud 命令列出 NCC Hub 的默认路由表的内容。
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub \
--route_table=default
使用 NCC 混合 Spoke 与动态路由交换时,Cloud Router 学习到的具有 BGP MED 值的前缀会传播到 NCC Spoke。
使用 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 混合 spoke 与 VPC spoke 之间的数据路径。
使用这些 gcloud 命令的输出登录到本地虚拟机。
gcloud compute instances list --filter="name=vm3-onprem"
登录位于本地网络中的虚拟机实例。
gcloud compute ssh vm3-onprem --zone=us-central1-a
在 vm3-onprem 的终端上,使用 curl 命令与托管在 workload-vpc 中的虚拟机建立 Web 会话。
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 spoke
gcloud network-connectivity spokes delete workload-vpc-spoke --global \
--quiet
gcloud network-connectivity spokes delete hybrid-spoke \
--quiet \
--region us-central1
删除 NCC Hub
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
删除 VPC 子网
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
删除 VPC
gcloud compute networks delete on-prem-net-vpcworkload-vpc routing-vpc
--quiet
8. 恭喜!
您已完成“动态路由交换 Network Connectivity Center”实验!
所学内容
- 使用 Network Connectivity Center 进行动态路由交换
后续步骤
©Google, LLC 或其关联公司。保留所有权利。不得分发。