spine Leaf Networking
使用 Red Hat OpenStack Platform director 配置路由的初始网络
摘要
第 1 章 简介 复制链接链接已复制到粘贴板!
本指南提供有关如何为 Red Hat OpenStack Platform 环境构建预置网络拓扑的信息。这包括端到端的场景和示例文件,以帮助在您自己的环境中复制更广泛的网络拓扑。
1.1. spine-leaf networking 复制链接链接已复制到粘贴板!
Red Hat OpenStack Platform 的可组合网络架构使您能够将网络适应流行的路由叶型数据中心拓扑。在路由机型的实用应用程序中,叶叶表示为可组合的 Compute 或 Storage 角色,这通常位于数据中心机架中,如 图 1.1 “Route spine-leaf 示例” 所示。Leaf 0 机架具有 undercloud 节点、控制器和计算节点。可组合网络呈现给节点,节点已分配给可组合角色。在这个图表中:
-
StorageLeaf网络呈现给 Ceph 存储和 Compute 节点。 -
NetworkLeaf代表您希望构成的任何网络的示例。
图 1.1. Route spine-leaf 示例
1.2. 网络拓扑 复制链接链接已复制到粘贴板!
路由自叶型裸机环境具有一个或多个第 3 层交换机,交换机在单独的第 2 层广播域中路由隔离 VLAN 之间的流量。
这种设计的目的是根据功能隔离流量。例如,如果控制器节点在内部 API 网络中托管 API,当计算节点访问 API 时,它应使用自己的内部 API 网络版本。要使此路由正常工作,您需要强制为内部 API 网络流量使用所需接口的路由。这可使用 supernet 路由进行配置。例如,如果您使用 172.18.0.0/24 作为控制器节点 的内部 API 网络,您可以将 172.18.1.0/24 用于第二个 内部 API 网络,对第三个内部 API 网络使用 172.1 8.2.0/24,以此类推。因此,您可以有一个指向更大 172.18.0.0/16 supernet 的路由,每个第 2 层域中的每个角色都使用本地 内部 API 网络上的网关 IP。
这种情境使用以下网络:
| Network | 附加角色 | Interface | Bridge | 子网 |
|---|---|---|---|---|
| 置备/Control Plane | All | nic1 | br-ctlplane (undercloud) | 192.168.10.0/24 |
| 存储 | Controller | nic2 | 172.16.0.0/24 | |
| Storage Mgmt | Controller | nic3 | 172.17.0.0/24 | |
| 内部 API | Controller | nic4 | 172.18.0.0/24 | |
| 租户 | Controller | nic5 | 172.19.0.0/24 | |
| 外部 | Controller | nic6 | br-ex | 10.1.1.0/24 |
| Network | 附加角色 | Interface | Bridge | 子网 |
|---|---|---|---|---|
| 置备/Control Plane | All | nic1 | br-ctlplane (undercloud) | 192.168.11.0/24 |
| Storage1 | Compute1、Ceph1 | nic2 | 172.16.1.0/24 | |
| storage Mgmt1 | Ceph1 | nic3 | 172.17.1.0/24 | |
| 内部 API1 | Compute1 | nic4 | 172.18.1.0/24 | |
| Tenant1 | Compute1 | nic5 | 172.19.1.0/24 |
| Network | 附加角色 | Interface | Bridge | 子网 |
|---|---|---|---|---|
| 置备/Control Plane | All | nic1 | br-ctlplane (undercloud) | 192.168.12.0/24 |
| Storage2 | Compute2、Ceph2 | nic2 | 172.16.2.0/24 | |
| Storage Mgmt2 | Ceph2 | nic3 | 172.17.2.0/24 | |
| 内部 API2 | Compute2 | nic4 | 172.18.2.0/24 | |
| Tenant2 | Compute2 | nic5 | 172.19.2.0/24 |
| Network | 子网 |
|---|---|
| 存储 | 172.16.0.0/16 |
| Storage Mgmt | 172.17.0.0/16 |
| 内部 API | 172.18.0.0/16 |
| 租户 | 172.19.0.0/16 |
1.3. spine-leaf 要求 复制链接链接已复制到粘贴板!
要在带有第 3 层路由架构的网络上部署 overcloud,您必须满足以下要求:
- 第 3 层路由
- 网络基础架构必须配置了路由,才能启用不同 L-2 网段之间的流量。这可以是静态的,也可以动态配置。
- DHCP-Relay
-
每个不是 undercloud 的本地层2段都必须提供
dhcp-relay。您必须在连接 undercloud 的 provisioning 网络段上,转发 DHCP 请求到 undercloud。
undercloud 使用两个 DHCP 服务器。一个用于裸机恢复节点内省,另一个用于部署 overcloud 节点。确保读取 DHCP 转发配置,以了解配置 dhcp-relay 时的要求。
1.4. spine-leaf 限制 复制链接链接已复制到粘贴板!
- 有些角色(如 Controller 角色)使用虚拟 IP 地址和集群。这种功能背后的机制需要在这些节点之间进行第 2 层网络连接。这些节点都放置在同一叶中。
- 类似的限制适用于网络程序节点。网络服务使用虚拟路由器冗余协议(VRRP)在网络中实施高可用性默认路径。由于 VRRP 使用虚拟路由器 IP 地址,您必须将 master 和备份节点连接到同一个 L2 网络段。
- 将租户或提供商网络与 VLAN 分段搭配使用时,您必须在所有网络器和 Compute 节点之间共享特定的 VLAN。
可以使用多组 Networker 节点来配置网络服务。每个网络设置共享路由,VRRP 将在各组网络器节点上提供高度可用的默认路径。在这种配置中,共享网络的所有网络节点必须位于同一 L2 网络段中。
第 2 章 配置 undercloud 复制链接链接已复制到粘贴板!
本节介绍了如何将 undercloud 配置为适应可组合网络的路由工作范围。
2.1. 配置 spine leaf provisioning 网络 复制链接链接已复制到粘贴板!
要为 spine leaf 基础架构配置 provisioning 网络,请编辑 undercloud.conf 文件并设置以下步骤中定义的相关参数。
流程
-
以
stack用户的身份登录 undercloud。 如果您还没有
undercloud.conf,请复制示例模板文件:cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
[stack@director ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
编辑
undercloud.conf。 在
[DEFAULT]部分中:将
local_ip设置为leaf0上的 undercloud IP:local_ip = 192.168.10.1/24
local_ip = 192.168.10.1/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
undercloud_public_vip设置为 undercloud 的外 IP 地址:undercloud_public_vip = 10.1.1.1
undercloud_public_vip = 10.1.1.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
undercloud_admin_vip设置为 undercloud 的管理 IP 地址。这个 IP 地址通常位于 leaf0 中:undercloud_admin_vip = 192.168.10.2
undercloud_admin_vip = 192.168.10.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
local_interface设置为为本地网络桥接的接口:local_interface = eth1
local_interface = eth1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
enable_routed_networks设置为true:enable_routed_networks = true
enable_routed_networks = trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
subnets参数定义子网列表。在路由的 spine 和 leafe 中为每个第 2 层段定义一个子网:subnets = leaf0,leaf1,leaf2
subnets = leaf0,leaf1,leaf2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
local_subnet参数指定与物理层 2 段本地关联的子网:local_subnet = leaf0
local_subnet = leaf0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为每个使用
subnets参数定义的子网创建一个新部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
undercloud.conf文件。 运行 undercloud 安装命令:
openstack undercloud install
[stack@director ~]$ openstack undercloud installCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这会在 provisioning 网络 / control plane 上创建三个子网。overcloud 使用每个网络来调配各个不同叶内的系统。
为确保正确转发对 undercloud 的 DHCP 请求,您可能需要配置 DHCP 转发。下一节提供了如何配置 DHCP 转发的一些信息。
2.2. 配置 DHCP 转发 复制链接链接已复制到粘贴板!
undercloud 使用置备网络上的两个 DHCP 服务器:
- 个用于内省。
- 一个用于调配。
配置 DHCP 转发时,请确保将 DHCP 请求转发到 undercloud 上的两个 DHCP 服务器。
您可以将 UDP 广播用于支持它的设备,将 DHCP 请求中继到连接 undercloud 置备网络的 L2 网络段中。或者,也可以使用 UDP 单播,该单播将 DHCP 请求中继到特定的 IP 地址。
在特定设备类型上配置 DHCP 转发不在本课程的讨论范围之内。作为参考,本文档提供了使用 ISC DHCP 软件中的实现的 DHCP 转发配置示例。有关如何使用此实施的详情,请参考 man page dhcrelay (8)。
广播 DHCP 转发
这个方法使用 UDP 广播流量转发 DHCP 请求到 DHCP 服务器所在的 L2 网络网段。网络片段中的所有设备接收广播流量。在使用 UDP 广播时,undercloud 上的 DHCP 服务器都会接收转发的 DHCP 请求。根据实现,这通常通过指定接口或 IP 网络地址来配置:
- Interface
- 指定连接到 DHCP 请求转发的 L2 网络片段的接口。
- IP 网络地址
- 指定 DHCP 请求转发的 IP 网络的网络地址。
单播 DHCP 转发
此方法利用 UDP 单播流量中继到特定 DHCP 服务器的 DHCP 请求。在使用 UDP 单播时,您必须配置提供 DHCP 转发的设备,以将 DHCP 请求中继到分配给分配给 undercloud 上内省的接口的 IP 地址,以及由 OpenStack Networking (neutron)服务创建的网络命名空间的 IP 地址,以托管 ctlplane 网络的 DHCP 服务。
内省的接口是 undercloud.conf 中的 inspection_interface 定义的接口。
通常使用 br-ctlplane 接口进行内省。undercloud.conf 中定义为 local_ip 的 IP 地址位于 br-ctlplane 接口。
分配给 Neutron DHCP 命名空间的 IP 地址是 undercloud.conf 中为 local_subnet 配置的第一个地址。IP 范围中的第一个地址是配置中 dhcp_start 定义的地址。例如:在使用以下配置时,192.168. 10 将是 IP 地址:
DHCP 命名空间的 IP 地址会自动分配。在大多数情况下,它是 IP 范围中的第一个地址。在 undercloud 上运行以下命令,确保验证情况是这种情况:
dhcrelay 配置示例
在以下示例中,dhcp 软件包中的 dhcrelay 命令使用以下配置:
-
转发传入的 DHCP 请求的接口:
eth1、eth2和eth3。 -
在网络段上接口 undercloud DHCP 服务器连接到:
eth0。 - 用于内省的 DHCP 服务器正在侦听 IP 地址:"192.168.10.1。
-
用于调配的 DHCP 服务器正在侦听 IP 地址
192.168.10.10。
这会生成以下 dhcrelay 命令:
sudo dhcrelay -d --no-pid 172.20.0.10 172.20.0.1 \ -i eth0 -i eth1 -i eth2 -i eth3
$ sudo dhcrelay -d --no-pid 172.20.0.10 172.20.0.1 \
-i eth0 -i eth1 -i eth2 -i eth3
Cisco IOS 路由交换机配置示例
这个示例使用以下 Cisco IOS 配置来执行以下任务:
- 配置 VLAN,以用于我们的调配网络。
- 添加 leaf 的 IP 地址。
-
将 UDP 和 BOOTP 请求转发到侦听 IP 地址的内省 DHCP 服务器:192.
168.10.1. -
将 UDP 和 BOOTP 请求转发到侦听 IP 地址
192.168.10.10的调配 DHCP 服务器。
interface vlan 2 ip address 192.168.24.254 255.255.255.0 ip helper-address 192.168.10.1 ip helper-address 192.168.10.10 !
interface vlan 2
ip address 192.168.24.254 255.255.255.0
ip helper-address 192.168.10.1
ip helper-address 192.168.10.10
!
现在您已配置了 provisioning 网络,您可以配置剩余的 overcloud leaf 网络。您可以使用一系列配置文件完成此操作。
2.3. 为叶网络创建类别和标记节点 复制链接链接已复制到粘贴板!
每个 leaf 网络中的每个角色都需要一个类别和角色分配,以便您可以将节点标记为其各自的叶向。此流程演示了如何创建每个类别并将其分配到角色。
流程
Source
stackrc文件:source ~/stackrc
$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个自定义角色创建类别:
ROLES="control0 compute_leaf0 compute_leaf1 compute_leaf2 ceph-storage_leaf0 ceph-storage_leaf1 ceph-storage_leaf2" for ROLE in $ROLES; do openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 $ROLE ; done for ROLE in $ROLES; do openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="$ROLE" $ROLE ; done
$ ROLES="control0 compute_leaf0 compute_leaf1 compute_leaf2 ceph-storage_leaf0 ceph-storage_leaf1 ceph-storage_leaf2" $ for ROLE in $ROLES; do openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 $ROLE ; done $ for ROLE in $ROLES; do openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="$ROLE" $ROLE ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将节点标记为其对应的 leaf network。例如,运行以下命令,将具有 UUID
58c3d07e-24f2-48a7-bbb6-6843f0e8ee13的节点标记到 Leaf2 上的计算角色:openstack baremetal node set --property capabilities='profile:compute_leaf2,boot_option:local' 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13
$ openstack baremetal node set --property capabilities='profile:compute_leaf2,boot_option:local' 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个环境文件(
~/templates/node-data.yaml),其中包含类别到角色的映射:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用每个对应的 *Count' 参数设置要在 overcloud 中部署的节点数量。
2.4. 将裸机节点端口映射到 control plane 网络片段 复制链接链接已复制到粘贴板!
要在 L3 路由网络中启用部署,裸机端口必须配置其 physical_network 字段。每个裸机端口都与 OpenStack Bare Metal (ironic)服务的裸机节点关联。物理网络名称是 undercloud 配置中的 子网 选项中使用的名称。
在 undercloud.conf 中指定为 local_subnet 的子网物理网络名称是特殊的。它始终命名为 ctlplane。
流程
Source
stackrc文件:source ~/stackrc
$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查裸机节点:
openstack baremetal node list
$ openstack baremetal node listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保裸机节点是
注册或manageable状态。如果裸机节点不在这些状态之一,则用于在 baremetal 端口上设置 physical_network 属性的命令将失败。要将所有节点设置为manageable状态,请运行以下命令:for node in $(openstack baremetal node list -f value -c Name); do openstack baremetal node manage $node --wait; done
$ for node in $(openstack baremetal node list -f value -c Name); do openstack baremetal node manage $node --wait; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查哪些裸机端口与哪个裸机恢复节点关联。例如:
openstack baremetal port list --node <node-uuid>
$ openstack baremetal port list --node <node-uuid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为端口设置
physical-network参数。在以下示例中,在配置中定义三个子网:leaf0、和leaf1leaf2。local_subnet 是leaf0。由于local_subnet的物理网络始终为ctlplane,因此连接到leaf0的 baremetal 端口使用 ctlplane。其余端口使用其他 leaf 名称:openstack baremetal port set --physical-network ctlplane <port-uuid> openstack baremetal port set --physical-network leaf1 <port-uuid> openstack baremetal port set --physical-network leaf2 <port-uuid> openstack baremetal port set --physical-network leaf2 <port-uuid>
$ openstack baremetal port set --physical-network ctlplane <port-uuid> $ openstack baremetal port set --physical-network leaf1 <port-uuid> $ openstack baremetal port set --physical-network leaf2 <port-uuid> $ openstack baremetal port set --physical-network leaf2 <port-uuid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在部署 overcloud 前,确保节点处于 available 状态:
openstack overcloud node provide --all-manageable
$ openstack overcloud node provide --all-manageableCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 备选置备网络方法 复制链接链接已复制到粘贴板!
本节包含有关将调配网络配置为适应可组合网络路由的准备方法的信息。
3.1. VLAN Provisioning 网络 复制链接链接已复制到粘贴板!
在本例中,director 通过 provisioning 网络部署新的 overcloud 节点,并在第 3 层拓扑中使用 VLAN 隧道(请参阅 图 3.1 “VLAN 置备网络拓扑”)。这允许 director 的 DHCP 服务器将 DHCPOFFER 广播发送到任何 leaf。要建立此隧道,在 Top-of-Rack (ToR) leaf switch 之间中继 VLAN。在此图中,存储租用 网络会看到 Ceph 存储和 Compute 节点。NetworkLeaf 代表您希望构成的任何网络的示例。
图 3.1. VLAN 置备网络拓扑
3.2. VXLAN 置备网络 复制链接链接已复制到粘贴板!
在本例中,director 通过 provisioning 网络部署新的 overcloud 节点,并使用 VXLAN 隧道在第 3 层拓扑间跨级别部署(请参阅 图 3.2 “VXLAN 置备网络拓扑”)。这允许 director 的 DHCP 服务器将 DHCPOFFER 广播发送到任何 leaf。要建立此隧道,请在 Top-of-Rack (ToR) leaf switches 上配置 VXLAN 端点。
图 3.2. VXLAN 置备网络拓扑
第 4 章 配置 overcloud 复制链接链接已复制到粘贴板!
现在,您已配置了 undercloud,您可以配置剩余的 overcloud leaf 网络。您可以使用一系列配置文件完成此操作。之后,您部署 overcloud,生成的部署具有多个可用路由的网络集。
4.1. 创建网络数据文件 复制链接链接已复制到粘贴板!
要定义 leaf 网络,您可以创建一个网络数据文件,其中包含每个可组合网络及其属性的 YAML 格式列表。默认网络数据位于 undercloud 上,位于 /usr/share/openstack-tripleo-heat-templates/network_data.yaml。
流程
在
stack用户的本地目录中创建一个新的network_data_spine_leaf.yaml文件。使用默认network_data文件:cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/network_data_spine_leaf.yaml
$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/network_data_spine_leaf.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
network_data_spine_leaf.yaml文件中,创建一个 YAML 列表,用于将每个网络和 leaf 网络定义为可组合网络项。例如,内部 API 网络及其 leaf 网络使用以下语法定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您不能在网络数据文件中定义 Control Plane 网络,因为 undercloud 已创建这些网络。但是,您需要手动设置参数,以便 overcloud 能够相应地配置其 NIC。
为包含基于 Controller 的服务的网络定义 vip: true。在本例中,In al Api 包含这些服务。
有关所有可组合网络的完整示例,请参阅 附录 A, network_data 文件示例。
4.2. 创建角色数据文件 复制链接链接已复制到粘贴板!
本节演示如何为每个叶定义每个可组合角色,并将可组合的网络附加到每个对应角色。
流程
在
stack用户本地目录中创建自定义角色director:mkdir ~/roles
$ mkdir ~/rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将默认 Controller、Compute 和 Ceph Storage 角色从 director 的核心模板集合复制到
~/roles目录。重命名 Leaf 1 的文件:cp /usr/share/openstack-tripleo-heat-templates/roles/Controller.yaml ~/roles/Controller.yaml cp /usr/share/openstack-tripleo-heat-templates/roles/Compute.yaml ~/roles/Compute1.yaml cp /usr/share/openstack-tripleo-heat-templates/roles/CephStorage.yaml ~/roles/CephStorage1.yaml
$ cp /usr/share/openstack-tripleo-heat-templates/roles/Controller.yaml ~/roles/Controller.yaml $ cp /usr/share/openstack-tripleo-heat-templates/roles/Compute.yaml ~/roles/Compute1.yaml $ cp /usr/share/openstack-tripleo-heat-templates/roles/CephStorage.yaml ~/roles/CephStorage1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
Compute1.yaml文件:vi ~/roles/Compute1.yaml
$ vi ~/roles/Compute1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑此文件中
的名称、网络和HostnameFormatDefault参数,以便它们与 Leaf 1 特定参数一致。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存这个文件。
编辑
CephStorage1.yaml文件:vi ~/roles/CephStorage1.yaml
$ vi ~/roles/CephStorage1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑此文件中的
名称和网络参数,以便它们与 Leaf 1 特定参数一致。另外,添加HostnameFormatDefault参数,再定义 Ceph Storage 节点的 Leaf 1 主机名。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存这个文件。
复制 Leaf 1 Compute 和 Ceph Storage 文件,作为您的 Leaf 2 和 Leaf 3 文件的基础:
cp ~/roles/Compute1.yaml ~/roles/Compute2.yaml cp ~/roles/Compute1.yaml ~/roles/Compute3.yaml cp ~/roles/CephStorage1.yaml ~/roles/CephStorage2.yaml cp ~/roles/CephStorage1.yaml ~/roles/CephStorage3.yaml
$ cp ~/roles/Compute1.yaml ~/roles/Compute2.yaml $ cp ~/roles/Compute1.yaml ~/roles/Compute3.yaml $ cp ~/roles/CephStorage1.yaml ~/roles/CephStorage2.yaml $ cp ~/roles/CephStorage1.yaml ~/roles/CephStorage3.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 Leaf 2 和 Leaf 3 文件中的
名称、network 和HostnameFormatDefault参数,以便它们与对应的 Leaf 网络参数一致。例如,Leaf 2 Compute 文件中的参数具有以下值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Leaf 2 Ceph Storage 参数具有以下值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当角色就绪时,使用以下命令生成完整角色数据文件:
openstack overcloud roles generate --roles-path ~/roles -o roles_data_spine_leaf.yaml Controller Compute1 Compute2 Compute3 CephStorage1 CephStorage2 CephStorage3
$ openstack overcloud roles generate --roles-path ~/roles -o roles_data_spine_leaf.yaml Controller Compute1 Compute2 Compute3 CephStorage1 CephStorage2 CephStorage3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会创建一个完整的
roles_data_spine_leaf.yaml文件,其中包含每个对应 leaf 网络的所有自定义角色。
有关此文件的完整示例,请参阅 附录 C, roles_data 文件示例。
每个角色都有自己的 NIC 配置。在配置 spine-leaf 配置前,您需要创建一个基础 NIC 模板集来适合您的当前的 NIC 配置。
4.3. 创建自定义 NIC 配置 复制链接链接已复制到粘贴板!
每个角色都需要自己的 NIC 配置。创建 NIC 模板的基本集合副本,并进行修改以适合您的当前的 NIC 配置。
流程
进入核心 Heat 模板目录:
cd /usr/share/openstack-tripleo-heat-templates
$ cd /usr/share/openstack-tripleo-heat-templatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
tools/process-templates.py脚本、自定义network_data文件和自定义roles_data文件呈现 Jinja2 模板:tools/process-templates.py -n /home/stack/network_data_spine_leaf.yaml \ -r /home/stack/roles_data_spine_leaf.yaml \ -o /home/stack/openstack-tripleo-heat-templates-spine-leaf$ tools/process-templates.py -n /home/stack/network_data_spine_leaf.yaml \ -r /home/stack/roles_data_spine_leaf.yaml \ -o /home/stack/openstack-tripleo-heat-templates-spine-leafCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入主目录:
cd /home/stack
$ cd /home/stackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 复制其中一个默认 NIC 模板的内容,以用作自旋模板的基础。例如,复制
single-nic-vlans:cp -r openstack-tripleo-heat-templates-spine-leaf/network/config/single-nic-vlans/* \ /home/stack/templates/spine-leaf-nics/.$ cp -r openstack-tripleo-heat-templates-spine-leaf/network/config/single-nic-vlans/* \ /home/stack/templates/spine-leaf-nics/.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除渲染的模板目录:
rm -rf openstack-tripleo-heat-templates-spine-leaf
$ rm -rf openstack-tripleo-heat-templates-spine-leafCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Resources
- 如需有关 自定义 NIC 模板 的更多信息,请参阅高级 Overcloud 自定义指南中的 "自定义网络接口模板"。
4.4. 编辑自定义 Controller NIC 配置 复制链接链接已复制到粘贴板!
渲染的模板包含大部分内容,这是适合 spine-leaf 配置所需的大部分内容。但是,需要一些额外的配置更改。按照以下步骤修改 Leaf0 上 Controller 节点的 YAML 结构。
流程
进入您的自定义 NIC 目录:
cd ~/templates/spine-leaf-nics/
$ cd ~/templates/spine-leaf-nics/Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
编辑
controller0.yaml的模板。 滚动到
parameters部分中的ControlPlaneSubnetCidr和ControlPlaneDefaultRoute参数。这些参数类似于以下片断:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改这些参数以适合 Leaf0:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到
parameters部分中的EC2MetadataIp参数。这个参数类似以下片断:EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringEC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改此参数以适合 Leaf0:
Leaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringLeaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到网络配置部分。本节类似以下示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将脚本的位置改为绝对路径:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
network_config部分,定义 control plane / provisioning 接口。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,本例中使用的参数特定于 Leaf0:
ControlPlane0SubnetCidr、Leaf0EC2MetadataIp和ControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。members部分中的每个 VLAN 包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为
StorageSupernet)和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为以下 Controller 网络添加 VLAN 结构的路由:
存储、StorageMgmt、InternalApi和Tenant。- 保存这个文件。
4.5. 创建自定义 Compute NIC 配置 复制链接链接已复制到粘贴板!
此流程为 Leaf0 Leaf1 和 Leaf2 上的 Compute 节点创建 YAML 结构。
流程
进入您的自定义 NIC 目录:
cd ~/templates/spine-leaf-nics/
$ cd ~/templates/spine-leaf-nics/Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
编辑
compute0.yaml的模板。 滚动到
parameters部分中的ControlPlaneSubnetCidr和ControlPlaneDefaultRoute参数。这些参数类似于以下片断:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改这些参数以适合 Leaf0:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到
parameters部分中的EC2MetadataIp参数。这个参数类似以下片断:EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringEC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改此参数以适合 Leaf0:
Leaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringLeaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到网络配置部分。本节类似以下片断:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将脚本的位置改为绝对路径:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
network_config部分,定义 control plane / provisioning 接口。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,本例中使用的参数特定于 Leaf0:
ControlPlane0SubnetCidr、Leaf0EC2MetadataIp和ControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。members部分中的每个 VLAN 应包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为
StorageSupernet)和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为以下控制器网络添加 VLAN 结构:
存储、InternalApi和Tenant。- 保存这个文件。
编辑
compute1.yaml并执行相同的步骤。以下是更改列表:-
将
ControlPlaneSubnetCidr更改为ControlPlane1SubnetCidr。 -
将
ControlPlaneDefaultRoute更改为ControlPlane1DefaultRoute。 -
将
EC2MetadataIp更改为Leaf1EC2MetadataIp。 -
将网络配置脚本从 ../.
/scripts/run-os-net-config.sh改为/usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh。 - 修改 control plane / provisioning 接口以使用 Leaf1 参数。
- 修改每个 VLAN,使其包含 Leaf1 路由。
完成后保存这个文件。
-
将
编辑
compute2.yaml并执行相同的步骤。以下是更改列表:-
将
ControlPlaneSubnetCidr更改为ControlPlane2SubnetCidr。 -
将
ControlPlaneDefaultRoute更改为ControlPlane2DefaultRoute。 -
将
EC2MetadataIp更改为Leaf2EC2MetadataIp。 -
将网络配置脚本从 ../.
/scripts/run-os-net-config.sh改为/usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh。 - 修改 control plane / provisioning 接口,以使用 Leaf2 参数。
- 修改每个 VLAN,使其包含 Leaf2 路由。
完成后保存这个文件。
-
将
4.6. 创建自定义 Ceph Storage NIC 配置 复制链接链接已复制到粘贴板!
此流程为 Leaf0 Leaf1 和 Leaf2 上的 Ceph Storage 节点创建 YAML 结构。
流程
进入您的自定义 NIC 目录:
cd ~/templates/spine-leaf-nics/
$ cd ~/templates/spine-leaf-nics/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到
parameters部分中的ControlPlaneSubnetCidr和ControlPlaneDefaultRoute参数。这些参数类似于以下片断:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改这些参数以适合 Leaf0:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到
parameters部分中的EC2MetadataIp参数。这个参数类似以下片断:EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringEC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改此参数以适合 Leaf0:
Leaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringLeaf0EC2MetadataIp: # Override this via parameter_defaults description: The IP address of the EC2 metadata server. type: stringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 滚动到网络配置部分。本节类似以下片断:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将脚本的位置改为绝对路径:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
network_config部分,定义 control plane / provisioning 接口。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,本例中使用的参数特定于 Leaf0:
ControlPlane0SubnetCidr、Leaf0EC2MetadataIp和ControlPlane0DefaultRoute。还请注意,在 provisioning 网络(192.168.10.0/24)上用于 Leaf0 的 CIDR,它用作路由。members部分中的每个 VLAN 都包含相关的 Leaf0 参数。例如,存储网络 VLAN 信息应类似于以下代码片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个部分来为路由定义参数。这包括 supernet 路由(本例中为
StorageSupernet)和 leaf default 路由(本例中为Storage0InterfaceDefaultRoute):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为以下 Controller 网络添加 VLAN 结构:
存储、StorageMgmt。- 保存这个文件。
编辑
ceph-storage1.yaml并执行相同的步骤。以下是更改列表:-
将
ControlPlaneSubnetCidr更改为ControlPlane1SubnetCidr。 -
将
ControlPlaneDefaultRoute更改为ControlPlane1DefaultRoute。 -
将
EC2MetadataIp更改为Leaf1EC2MetadataIp。 -
将网络配置脚本从 ../.
/scripts/run-os-net-config.sh改为/usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh。 - 修改 control plane / provisioning 接口,以使用 Leaf1 参数。
- 修改每个 VLAN,使其包含 Leaf1 路由。
完成后保存这个文件。
-
将
编辑
ceph-storage2.yaml并执行相同的步骤。以下是更改列表:-
将
ControlPlaneSubnetCidr更改为ControlPlane2SubnetCidr。 -
将
ControlPlaneDefaultRoute更改为ControlPlane2DefaultRoute。 -
将
EC2MetadataIp更改为Leaf2EC2MetadataIp。 -
将网络配置脚本从 ../.
/scripts/run-os-net-config.sh改为/usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh。 - 修改 control plane / provisioning 接口,以使用 Leaf2 参数。
- 修改每个 VLAN,使其包含 Leaf2 路由。
完成后保存这个文件。
-
将
4.7. 创建网络环境文件 复制链接链接已复制到粘贴板!
这个过程创建了基本网络环境文件,供以后使用。
流程
-
在 stack 用户的
templates目录中创建network-environment.yaml文件。 在环境文件中添加以下部分:
resource_registry: parameter_defaults:
resource_registry: parameter_defaults:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意以下几点:
-
resource_registry会将网络资源映射到对应的 NIC 模板。 -
parameter_defaults将定义与配置相关的其他网络参数。
-
接下来的几个部分将详细信息添加到您的网络环境文件,以配置 spine leaf 架构的某些方面。完成后,您可以使用 openstack overcloud deploy 命令包含此文件。
4.8. 将网络资源映射到 NIC 模板 复制链接链接已复制到粘贴板!
此流程将网络配置的相关资源映射到对应的 NIC 模板。
流程
-
编辑
network-environment.yaml文件。 将资源映射添加到您的
resource_registry。资源名称采用以下格式:OS::TripleO::[ROLE]::Net::SoftwareConfig: [NIC TEMPLATE]
OS::TripleO::[ROLE]::Net::SoftwareConfig: [NIC TEMPLATE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于本指南的场景,
resource_registry包含以下资源映射:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
network-environment.yaml文件。
4.9. spine leaf 路由 复制链接链接已复制到粘贴板!
每个角色都需要在每个隔离的网络上路由,指向用于相同功能的其他子网。因此,当 Compute1 节点与 InternalApi VIP 上的控制器联系时,流量应该通过 网关为目标。因此,从控制器返回到 InternalApi1 InternalApi1 网络的流量应该经过 InternalApi 网络网关。
supernet 路由应用到每个角色上的所有隔离网络,以避免通过默认网关发送流量,默认为非控制器上的 Control Plane 网络,以及控制器上的 外部网络。
您需要在隔离的网络上配置这些路由,因为 Red Hat Enterprise Linux 默认在入站流量上实施严格的反向路径过滤。如果 API 正在侦听 内部 API 接口,并且请求进入该 API,则仅当返回路径路由位于 内部 API 接口时,它才会接受请求。如果服务器正在侦听 内部 API 网络,但客户端的返回路径是通过 Control Plane,则服务器会因为反向路径过滤器而丢弃请求。
下图显示了通过 control plane 路由流量,这将无法成功。从路由器返回到控制器节点的返回路由与 VIP 正在侦听的接口不匹配,因此数据包会被丢弃。192.168.24.0/24 直接连接到控制器,因此被视为对 Control Plane 网络的本地。
图 4.1. 通过 Control Plane 路由流量
为了进行比较,示意图显示了通过内部 API 网络运行的路由:
图 4.2. 通过内部 API 路由流量
4.10. 为可组合网络分配路由 复制链接链接已复制到粘贴板!
此流程定义叶型网络的路由。
流程
-
编辑
network-environment.yaml文件。 将 supernet 路由参数添加到
parameter_defaults部分。每个隔离的网络都应该应用一个 supernet 路由。例如:parameter_defaults: StorageSupernet: 172.16.0.0/16 StorageMgmtSupernet: 172.17.0.0/16 InternalApiSupernet: 172.18.0.0/16 TenantSupernet: 172.19.0.0/16
parameter_defaults: StorageSupernet: 172.16.0.0/16 StorageMgmtSupernet: 172.17.0.0/16 InternalApiSupernet: 172.18.0.0/16 TenantSupernet: 172.19.0.0/16Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意网络接口模板应包含每个网络的 supernet 参数。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ServiceNetMap HostnameResolveNetwork参数添加到parameter_defaults部分,为该部分提供叶有主机名列表,用于解析其他 leaf 节点。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compute 节点使用 leaf's 内部 API 网络和 Ceph Storage 节点使用leaf 的 Storage 网络。
将以下
ExtraConfig设置添加到parameter_defaults部分,以解决计算和 Ceph Storage 节点上特定组件的路由:Expand 表 4.1. compute ExtraConfig 参数 参数 设置为该值 nova::compute::libvirt::vncserver_listenVNC 服务器侦听的 IP 地址。
nova::compute::vncserver_proxyclient_address运行 VNC 代理客户端的服务器 IP 地址。
neutron::agents::ml2::ovs::local_ipOpenStack Networking (neutron)隧道端点的 IP 地址。
cold_migration_ssh_inbound_addr用于冷迁移 SSH 连接的本地 IP 地址。
live_migration_ssh_inbound_addr用于实时迁移 SSH 连接的本地 IP 地址。
nova::migration::libvirt::live_migration_inbound_addr用于实时迁移流量的 IP 地址。
注意如果使用 SSL/TLS,请将网络名称加上 "fqdn_" 的前面,以确保根据 FQDN 检查证书。
nova::my_ip主机上计算(nova)服务的 IP 地址。
tripleo::profile::base::database::mysql::client::mysql_client_bind_address数据库客户端的 IP 地址。在本例中,它是 Compute 节点上的
mysql客户端。Expand 表 4.2. CephAnsibleExtraConfig 参数 参数 设置为该值 public_network包含 Ceph 节点(每个叶一个)的所有存储网络的逗号分隔列表,如 172.16.0.0/24,172.16.1.0/24,172.16.2.0/24
cluster_network包含 Ceph 节点的存储管理网络(每个叶一个)的逗号分隔列表,例如 172.17.0.0/24,172.17.1.0/24,172.17.2.0/24,172.17.2.0/24
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.11. 设置 control plane 参数 复制链接链接已复制到粘贴板!
您通常使用 network_data 文件为隔离自叶网络定义网络详情。例外是 undercloud 创建的 control plane 网络。但是,overcloud 需要访问每个分支的 control plane。这需要一些额外的参数,这些参数在 network-environment.yaml 文件中定义。例如,以下代码片段来自 Leaf0 上 Controller 角色的 NIC 模板
在本例中,我们需要为 Leaf 0 上的对应 Control Plane 网络定义 IP、子网、元数据 IP 和默认路由。
流程
-
编辑
network-environment.yaml文件。 在
parameter_defaults部分中:将映射添加到主 control plane 子网:
parameter_defaults: ... ControlPlaneSubnet: leaf0
parameter_defaults: ... ControlPlaneSubnet: leaf0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个 spine-leaf 网络添加 control plane 子网映射:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个 leaf 添加 control plane 路由:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认路由参数通常是为每个置备子网的网关设置的 IP 地址。
如需更多信息,请参阅undercloud.conf文件。为 EC2 元数据 IP 添加参数:
parameter_defaults: ... Leaf0EC2MetadataIp: 192.168.10.1 Leaf1EC2MetadataIp: 192.168.11.1 Leaf2EC2MetadataIp: 192.168.12.1
parameter_defaults: ... Leaf0EC2MetadataIp: 192.168.10.1 Leaf1EC2MetadataIp: 192.168.11.1 Leaf2EC2MetadataIp: 192.168.12.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 它们作为 EC2 元数据服务的 control plane (169.254.169.254/32)的路由,您应该在 provisioning 网络中的每个叶都设置为对应的
网关。
-
保存
network-environment.yaml文件。
4.12. 部署 spine-leaf enabled overcloud 复制链接链接已复制到粘贴板!
现在,我们的所有文件均为我们的部署做好准备。本节提供了每个文件和部署命令的回顾:
流程
检查
/home/stack/template/network_data_spine_leaf.yaml文件,并确保该文件包含每个 leaf 的每个网络。注意目前没有为网络子网和
allocation_pools值执行验证。请确定您一致地定义这些,并且现有网络不会有冲突。-
检查
~/templates/spine-leaf-nics/中包含的 NIC 模板,并确保每个叶上每个角色的接口已正确定义。 -
检查
network-environment.yaml环境文件,并确保它包含不超出网络数据文件控制的所有自定义参数。这包括引用每个角色的自定义 NIC 模板的路由、control plane 参数和resource_registry部分。 -
检查
/home/stack/templates/roles_data_spine_leaf.yaml值,并确保为每个叶都定义了角色。 - 检查 '/home/stack/templates/nodes_data.yaml 文件,确保所有角色都具有分配的类别和节点数。也请检查每个 leaf 的所有节点都已正确标记。
运行
openstack overcloud deploy命令,以应用 spine leaf 配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
network-isolation.yaml是同一位置(network-isolation.j2.yaml)中的 Jinja2 文件内容。包含此文件,以确保 director 将每个网络与其正确的树叶隔离开来。这可确保在 overcloud 创建过程中动态创建网络。 -
在
network-isolation.yaml和其他基于网络的环境文件后面包括network-environment.yaml文件。这样可确保network-environment.yaml中定义的任何参数和资源覆盖之前在其他环境文件中定义的相同的参数和资源。 - 添加额外的环境文件。例如,包含容器镜像位置或 Ceph 集群配置的环境文件。
-
- 等待 spine-leaf enabled overcloud 部署完毕。
附录 A. network_data 文件示例 复制链接链接已复制到粘贴板!
附录 B. 自定义 NIC 模板 复制链接链接已复制到粘贴板!
以下是一个模板,供您开始使用为 spine leaf 网络配置网络接口模板。请注意,resource 部分不完整,需要您的接口定义。