1. 方案背景和挑战
裸金属服务器作为一类特别设计的计算类云服务,向最终用户提供了云端部署的专属物理服务器,这意味着最终用户不再需要与其他租户共享硬件资源,从而确保了资源的独占性、性能的最优化以及数据的最高级别安全。
裸金属服务器作为云上资源的重要部分,其网络需要与云主机和容器同样连接在VPC下,并且能够像云主机和容器一样使用云上的网络功能和能力。
当前,基于OpenStack的裸金属服务实现主要依赖于Ironic组件,并通过OpenStack的Neutron网络组件来实现裸金属服务器的网络连接。在该方案下,裸金属服务器的网络使用的是物理网卡,因此网络配置依赖于物理上的网络拓扑(例如需要知道裸金属网卡连接到交换机的端口编号),物理网络拓扑连接完成后就确定了,为了实现 VPC 等网络功能,需要对裸金属服务器的上联交换机做一些动态配置,以实现网络的切换。
Neutron原本是为虚拟机网络环境设计的,因此在应用于裸金属服务时,便暴露出了不足之处,带来了一系列的问题与挑战,具体体现在以下几个方面:
a. 网络管理复杂性增加,提高了管理难度
- VLAN支持要求:Ironic的网络实现需要物理交换机的VLAN支持,并且要实现VLAN和VPC的匹配和转换,以确保裸金属服务器能够正确地接入网络。这不仅增加了网络配置的复杂性,也提高了管理难度。
- 拓扑要求:物理网络拓扑需要能够支持VLAN的划分和管理,这可能涉及到复杂的网络设备配置和维护。
b. SDN集成困难,降低网络性能
- 流量转换需求:在裸金属场景下,直接使用软件定义网络(SDN)技术存在困难。通常需要将网络流量引导到一个特定的网络节点进行转换,这不仅会降低网络性能,还会增加网络管理的复杂度。
- 性能与管理权衡:这种流量转换机制可能导致网络性能下降,同时也增加了网络管理和维护的工作量。
c. 安全组实现困难,增加运维成本
- 安全组规则不适用:传统裸金属服务器直接连接到物理交换机,导致OpenStack的安全组规则无法直接应用于裸金属服务器。安全组是OpenStack中用于控制网络流量的安全机制,其规则定义了允许或拒绝的网络流量类型。
- 交换机防火墙规则影响:如果尝试通过物理交换机的防火墙规则来实现类似的安全控制,可能会影响到其他业务的正常运行,并且会大幅增加运维成本。
d. 网卡热插拔支持不足,限制了系统灵活性
- 物理限制:传统裸金属服务器的物理网卡不支持热插拔功能。这意味着在不关闭服务器的情况下,无法添加或移除网络适配器,这限制了系统的灵活性和服务的可用性。
- 维护与更新挑战:缺乏热插拔支持使得网络维护和更新变得更加困难,可能需要计划停机时间,从而影响服务的连续性和用户体验。
基于OpenStack的裸金属服务网络实现,虽然借助Ironic和Neutron组件获得了良好的表现,但在网络管理、SDN集成、安全组应用以及网卡热插拔支持等方面仍面临一系列挑战。这些挑战需要通过技术创新和架构优化来逐步解决,以提高裸金属服务的性能、安全性和管理效率。
2. 方案介绍
2.1. 整体方案架构
为了解决上文提到的问题与挑战,本方案创新性的引入了DPU组件,并仍然使用Openstack Ironic node资源来管理裸金属实例。在开源Ironic组件(ironic-api、ironic-conductor)之外,我们自研了Ironic-dpu-agent组件,运行在每个裸金属节点的DPU Soc中,用于管理裸金属实例的存储、网络资源。
整体方案架构如下图:
各组件作用如下:
- Ironic-api:裸金属rest api服务。
- Ironic-conductor:裸金属实例的任务控制服务,负责裸金属开关机、重启、部署等任务。
- Ironic-dpu-agent:运行在DPU Soc上,与Ironic-conductor通过RPC通信,负责管理本节点裸金属实例的存储、网络资源。
- Neutron-server:OpenStack网络服务,为裸金属实例提供network、subnet、port管理功能。
2.2. 方案详细描述
在基于DPU的OpenStack裸金属网络方案中,裸金属服务器的网络配置完全由DPU卡负责,裸金属服务器本身不需要任何传统的物理网卡。DPU卡为裸金属服务器提供物理功能(PF)、虚拟功能(VF)或可分割功能(SF)设备,作为网络接口。这些网络接口完全由DPU的系统级芯片(SOC)侧的Open vSwitch(OVS)进行配置,无需依赖外部物理交换机即可实现网络连接。
在该方案中,DPU负责处理包括VXLAN、Geneve等在内的各种虚拟网络协议,能够支持虚拟机与裸金属服务器之间的网络互通,保证灵活且高效的网络连接。这种网络拓扑简化了裸金属服务器的部署流程,因为服务器无需依赖外部交换设备,所有的网络管理和配置工作都在DPU卡上完成,大大减少了对传统物理网络基础设施的依赖。
在控制节点上,OpenStack的Neutron组件负责网络服务的管理,并通过OVN(Open Virtual Network)来与DPU通信。DPU的SOC上运行着OVS(Open vSwitch),这是整个方案中负责网络流量转发和管理的关键组件。同时,DPU的SOC侧还运行着OVN控制器(ovn-controller)和Ironic-dpu-agent,分别负责虚拟网络的控制和裸金属网络的管理。
OVN控制器:负责与Neutron进行通信,并根据网络需求配置OVS,实现裸金属服务器与虚拟机之间的网络连接。
Ironic-dpu-agent:这是Ironic服务的一个代理,它通过控制和配置OVS上的端口,管理DPU网络资源,负责为裸金属服务器分配和管理网络接口。
在这个架构下,DPU卡上提供的PF、VF等网络设备通过其代表接口(pfRep和vfRep)连接到OVS。裸金属服务器通过这些网络设备与DPU卡通信,进而连接到整个虚拟网络系统中。OVS通过在SOC上运行的p0和p1端口负责管理所有的网络流量,从而使裸金属服务器能够无缝地加入虚拟网络。
这种架构极大地提升了裸金属服务器的网络性能,同时减少了对外部交换机的依赖,降低了部署成本和复杂度。在实际应用中,这种基于DPU的网络架构可以大幅提高数据中心的资源利用率,并为多租户环境下的虚拟机和裸金属服务器提供高效、安全的网络隔离和互通。
裸金属node节点绑定创建的虚拟port,Neutron Server 通过 OVN Plugin 将端口信息写入 OVN NB DB,当Ironic-dpu-agent 获得node绑定port信息后,配置OVS的interface中的iface-id,然后通过ovn-controller下发流表,跟虚拟机网络流标下发方式一致。
网卡热插拔
在原生Ironic中,可以实现一定程度网卡热插拔,但是要求机器上有冗余的网卡设备,这些网卡设备可以在需要的时候被启用/禁用。这种方式也有一些缺陷,一方面这不够灵活,不同的用户需求不一样,冗余多少块网卡不便于确定。另一方面,如果冗余的网卡没有得到使用,造成了资源浪费。
在基于 DPU 的方案中,如前文所述,裸金属的网卡是由DPU的 PF/VF/SF 设备提供的,而 DPU 往往提供了大量的 VF/SF(数百个以上),足够满足用户的需求。那么网卡的热插拔就变成了 PF/VF/SF 设备的动态插拔和配置问题,这仍然是由 Ironic-dpu-agent组件完成的。
3. 测试与验证
3.1. 网络拓扑
以下是示例网络拓扑:
其中,普通业务流量和存储流量最好划分VLAN。BMC 带外管理网和千兆管理网需要打通,测试时也可简单用同一个网络。
3.2. 软件环境
依赖以下软件环境:
类别 | 名称 | 版本 | 来源 | 备注 |
OpenStack集群 | OpenStack | zed | 开源社区 | |
网络 | neutron | zed | 内部版本 | |
存储 | volume-attacher | cloudV5.4-6 | 内部版本 | |
opi-bridge | cloudV2-4 | 内部版本 | ||
裸金属组件 | ironic | zed | 内部版本 | |
ironic-dpu-agent | cloudV1.0 | 内部版本 |
3.3. 测试用例及结果
3.3.1. 创建资源
- 创建网络、子网、路由器、链接路由器和子网
openstack network create <network_name>
openstack subnet create --network <network_name> --subnet-range <subnet_cidr> --gateway <gateway_ip> --dns-nameserver <dns_ip> <subnet_name> ##路由器 openstack router create <router_name> ###链接 openstack router add subnet <router_name> <subnet_name> |
- 创建flavor
openstack flavor create <flavor_name> --ram <ram_in_mb> --vcpus <vcpus> --disk <disk_in_gb>
###裸机属性设置 openstack flavor set --property resources:VCPU=<vcpus> --property resources:MEMORY_MB=<ram_in_mb> --property resources:DISK_GB=<disk_in_gb> --property capabilities:boot_option=local <flavor_name> |
- 创建镜像
openstack image create <image_name>
--disk-format raw --container-format bare --file <path_to_image_file> --public |
- 创建node
openstack baremetal node create
--driver <driver_name> --driver-info ipmi_address=<bmc_ip_address> --driver-info ipmi_username=<bmc_username> --driver-info ipmi_password=<bmc_password> --property cpus=<cpu_count> --property memory_mb=<memory_in_mb> --property local_gb=<disk_size_in_gb> --property cpu_arch=<architecture> |
3.3.2. 创建裸金属服务器实例
创建裸金属实例与创建虚拟机操作流程一致,选择裸金属的flavor即可:
openstack server create --flavor bm-flavor-01 --image centos8.5 --boot-from-volume --network net01 bm-01 |
3.3.3. 安全组
创建裸金属实例与创建虚拟机安全组添加一样,创建port的时候选择一个安全组即可:
openstack port create --network net01 --vnic-type direct port01 --security-group default |
3.3.4. 连通性验证
在同一个net01下创建VM、BM,然后验证BM和VM的网络互通情况
创建VM:
openstack port create --network net01 --vnic-type direct port01
openstack server create --flavor test-flavor- --image centos8.5 --port port01 vm01 |
登录通过bmc登录裸机bm-01验证:
ping <vm_ip> |
3.3.5. 网卡热插拔
先卸载port,再添加port:
openstack port delete-port01
openstack baremetal port set --node <node_id> --port <neutron_port_id> |
4. 方案总结
DPU赋能的Openstack裸金属网络解决方案,在以下几个方面具有显著优势:
1)Overlay网络终结在DPU侧,降低网络的复杂性:通过在DPU侧终结Overlay网络,可以减少中间网络元素,摆脱了对物理交换机的依赖,简化整体网络拓扑架构。这种方式不仅降低了网络的复杂性,提高了网络的可管理性,还减少了设备成本和运维成本,使整个网络更加经济高效。
2)支持统一的SDN控制器,提升网络灵活性和响应速度:采用统一的SDN控制器实现策略下发和调度,SDN网络不仅支持VLAN还可以使用Vxlan和Geneve,摆脱VLAN网络4096的限制。同时,有效简化SDN软件架构,提高网络的灵活性和响应速度,降低维护和管理的复杂性。
3)通过SDN实现安全组,降低运维成本:通过SDN网络的ACL功能,可以在不依赖物理交换机的情况下实现安全组功能。这样可以直接在DPU上应用安全规则,而不需要通过物理交换机的防火墙规则,从而避免对其他业务的影响并降低运维成本。
4)支持网络接口热插拔,提升网络设备灵活性:利用DPU的动态特性,可以实现网络接口的热插拔。这意味着在不影响服务器运行的情况下,可以增加新的网络接口或移除现有接口,从而提高系统的灵活性和服务的可用性。
综上所述,DPU驱动的Openstack裸金属网络方案通过一系列创新设计,不仅提高了网络的可管理性、可扩展性和安全性,还增强了系统的灵活性和服务的可用性,从而为裸金属服务器提供了更加强大和高效的网络支持。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。