配置 Multus 多网卡网络
本文介绍如何使用 Multus 将 ACP 分布式存储(Ceph)连接到专用容器网络,从而将 Ceph public 和 cluster 流量分配到不同的网络接口(NIC)。
目录
概述两个管理界面限制和前提条件在创建集群时配置多网卡网络验证(新控制台)检查 StorageCluster 网络设置检查生效的 CephCluster 网络设置检查 Ceph Pod 是否已连接到网络检查工作负载挂载故障排除建议概述
默认情况下,ACP Ceph 存储集群使用主机网络(provider: host)。从 Web 控制台创建存储集群时,也可以选择容器网络,将 Ceph 流量置于单个容器网络上(分配给 rook-ceph 命名空间的单个 NetworkAttachmentDefinition)。有关基本的单网络选项,请参阅创建标准存储服务。
Multus 多网卡网络扩展了容器网络模型,使你可以将两个 Ceph 网络角色映射到不同的网络:
- public network — Ceph 客户端(CSI、原生应用)与集群之间的客户端流量。
- cluster network — OSD 之间的内部流量,例如复制和恢复流量。
将这两个角色分配到不同的网卡可以增强隔离性,并避免大量复制/恢复流量与客户端 I/O 争用资源。
所有流入和流出 OSD 的流量都使用 Multus 网络——这是主要的存储数据路径:RBD 客户端 I/O、CephFS 数据和元数据(MDS)、对象数据(RGW 在 OSD 上读取/写入对象),以及 OSD 复制流量。通过 Kubernetes Service 访问的端点——monitors(客户端使用 mon Service 获取集群映射)、manager 和 RGW S3 端点——通过默认网络提供服务;即使这些守护进程的 Pod 连接了 Multus 接口,它们面向 Service 的监听器仍使用默认网络。这是 Rook 的行为,并非配置错误。因此,Multus 隔离的是存储数据路径,而不是由 Service 提供服务的控制和入口端点。
两个管理界面
ACP 提供旧版和新版 Web 控制台,它们通过不同的资源管理 Ceph 存储。请在管理集群的资源上配置网络:
要确定哪个资源管理特定集群,请检查是否存在 StorageCluster:
- 如果集群存在
StorageCluster,则由新版控制台管理 — 请在 StorageCluster 上配置网络(operator 会还原对底层CephCluster的手动修改)。 - 如果不存在
StorageCluster,则集群由旧版控制台作为 CephCluster 直接管理 — 请在CephCluster上配置网络。
这两种资源都公开相同的网络字段(provider、selectors、addressRanges)。以下各节提供了每种管理界面对应的清单。
网络角色与网络之间的映射通过 selectors 声明:
你可以仅指定 public,也可以同时指定 public 和 cluster。当 provider 为 multus 时,至少需要一个选择器。
限制和前提条件
配置 Multus 多网卡网络之前,请注意以下限制:
-
仅限创建时配置
- 必须在创建存储集群时配置 Multus 多网卡网络。不支持更改运行中集群的网络提供程序:应用新的网络模型需要 Ceph 将所有监视器故障转移,而且 API 不允许直接从一个非空提供程序切换到另一个非空提供程序(必须先将提供程序恢复为空值)。请将网络模型视为集群的固定属性。
-
已安装 Multus CNI 插件
- 集群必须使用 Kube-OVN 作为网络插件,并且必须安装 Multus CNI 插件。这是一次性集群范围设置。若要安装,请导航至管理员 > Marketplace > 集群插件,搜索
multus,然后安装 Alauda Container Platform Multi-Network。详情请参阅配置 Kube-OVN 网络以支持 Pod 多网络接口。
- 集群必须使用 Kube-OVN 作为网络插件,并且必须安装 Multus CNI 插件。这是一次性集群范围设置。若要安装,请导航至管理员 > Marketplace > 集群插件,搜索
-
单一 IP 地址族
- Multus 网络必须使用单一 IP 地址族。IPv4 和 IPv6 均受支持,但 Multus 不支持双栈(同时使用 IPv4 和 IPv6)。若要使用 IPv6,请在网络块中设置
ipFamily: IPv6。 - 这与创建标准存储服务中的基本容器网络选项不同;该选项不支持 IPv6。此限制仅适用于该单网络表单选项;此处介绍的 Multus 多网卡操作步骤支持 IPv6。
- Multus 网络必须使用单一 IP 地址族。IPv4 和 IPv6 均受支持,但 Multus 不支持双栈(同时使用 IPv4 和 IPv6)。若要使用 IPv6,请在网络块中设置
Multus 会将存储数据路径(OSD 流量)移至专用网卡,但不会改变工作负载使用存储的方式:应用 Pod 无需加入 Multus 网络。客户端通过默认网络(经由 mon Service)访问监视器,而 Ceph CSI 驱动程序在每个节点上以主机网络模式运行,负责处理到 OSD 的数据路径。因此,真正的要求是存储节点能够路由到底层网络,而不是工作负载 Pod 已连接到该网络。请在部署前规划网络角色、NAD 和节点路由。
在创建集群时配置多网卡网络
向导的表单字段无法表达多网卡设置,但创建集群向导提供了 YAML 模式。建议的操作流程是:照常完成向导,让它自动填充清单;然后切换到 YAML 模式,仅编辑网络部分,并在 YAML 模式下提交。这样就无需手动编写整个清单。
YAML 模式中显示的清单取决于所使用的控制台(请参阅两个管理界面):新控制台显示 StorageCluster,旧版控制台显示 CephCluster。请在对应路径编辑网络块。
创建 Multus 网络
若要以接近主机的速度通过专用物理网卡传输存储流量,请使用 Kube-OVN Underlay 网络,而非 Overlay 网络。Underlay 会将专用物理网卡直接桥接到存储网络,不产生封装开销。
Underlay 要求预先准备物理网络:每个存储节点都需要专用网卡(不能承载 SSH 等其他流量),并且必须配置上游交换机端口/VLAN 和网关。然后创建一个桥接网络(ProviderNetwork)和一个 VLAN(Vlan),供存储子网接入。有关物理环境的前提条件以及如何创建桥接网络和 VLAN,请参阅准备 Kube-OVN Underlay 物理网络和配置子网。
对于要隔离的每个 Ceph 网络角色,请在 rook-ceph 命名空间中创建一个 NetworkAttachmentDefinition,并创建一个后端 Underlay 子网。以下示例创建公共网络;如果还要隔离复制流量,请使用不同的名称和不同的 CIDR/VLAN,为集群网络重复此操作。
创建 NetworkAttachmentDefinition。provider 字段必须使用 <name>.<namespace>.ovn 格式:
创建提供该网络所需地址的 Underlay Kube-OVN 子网。将 vlan 设置为已准备好的 Vlan,使用与物理网络匹配的 cidrBlock/gateway,并使 provider 与 NetworkAttachmentDefinition 中的值一致:
应用这两个资源,然后确认 NetworkAttachmentDefinition 已存在:
后续步骤中设置的 selectors 会以 <namespace>/<name> 格式引用这些 NAD,例如 rook-ceph/ceph-public-net。
打开创建集群向导
按照创建标准存储服务中的说明,开始创建分布式存储集群。在创建集群步骤中,照常配置设备类别、存储设备和组件放置方式,让向导填充清单的其余部分。
切换到 YAML 模式
将向导从表单模式切换为 YAML 模式。清单已根据你的选择填充完毕。
编辑网络部分
在清单中添加或替换网络块。设置 provider: multus 和 selectors,将 Ceph 公共/集群角色映射到你的 NAD。
-
新 Web 控制台 — 清单为
StorageCluster;编辑spec.ceph.network: -
旧版 Web 控制台 — 清单为
CephCluster;编辑spec.network(字段相同,但不包含spec.ceph封装):
如果只需要将客户端流量迁移到专用网络,请仅保留 public 选择器,并省略 cluster。
在与 selectors 同级的位置添加 addressRanges 块,明确指定 CIDR 范围。Rook 会尝试自动检测所接入网络的 CIDR,但在 Kube-OVN Underlay 网络上,此检测并不可靠,可能会失败,导致集群卡在“Configuring Ceph Mons”状态。指定 addressRanges 可避免此问题:
使用已创建的 Underlay 子网的 CIDR(如果没有单独隔离集群网络,则只需 public)。
如果 StorageCluster 一直处于 Progressing 状态,且底层 CephCluster 报告 failed to discover network CIDRs for multus,请添加或更正 addressRanges。
在 YAML 模式下提交
保持在 YAML 模式下提交向导(点击创建集群)。提交前不要切回表单模式,否则网络字段可能无法保留。
在新控制台中,请在此处的 StorageCluster 中配置网络,不要事后编辑 CephCluster。当集群由 StorageCluster 管理时,spec.network 是受管理的字段,对 CephCluster 的手动编辑会被 operator 还原。
验证
创建存储集群后,从 ACP 和 Ceph 两侧验证网络配置。
(新控制台)检查 StorageCluster 网络设置
如果集群由 StorageCluster 管理,请确认所需的配置。Ceph StorageCluster 在 rook-ceph 命名空间中始终命名为 ceph-cluster(两者均由准入机制强制执行):
输出应包含预期的 provider 和选择器:
检查生效的 CephCluster 网络设置
此检查适用于两个控制台,因为 CephCluster 是 Rook 实际操作的资源:
provider 和 selectors 应与配置的内容一致。在新控制台中,它们还应与管理该资源的 StorageCluster 一致。
检查 Ceph Pod 是否已连接到网络
确认 Ceph 守护进程 Pod(例如 MON 和 OSD)带有 Multus 网络连接注解,并报告预期的接口:
每个 OSD Pod 都应引用 public 网络,以及(如果已配置)cluster 网络。
检查工作负载挂载
创建或重启一个同时挂载 CephFS PVC 和 RBD PVC 的测试工作负载,然后验证:
- Pod 是否成功启动
- 文件系统是否可读写
- CSI 或工作负载日志中是否未出现与挂载相关的错误
故障排除建议
如果启用 Multus 后存储集群无法变为健康状态,请先检查以下项目:
- NAD 不存在 — 选择器引用的
NetworkAttachmentDefinition在rook-ceph命名空间中缺失,或者<namespace>/<nad-name>引用拼写错误。 - 缺少选择器 — 已设置
provider: multus,但未定义public或cluster选择器。至少需要一个选择器。 - CIDR 检测失败 — Rook 无法自动检测网络范围。请显式指定
addressRanges。 - IP 耗尽 — 为 NAD 提供支持的 IPAM 池(例如配置的 CIDR 或地址范围)没有可供新 Ceph Pod 使用的空闲地址。
- 节点无法访问 Underlay — Ceph CSI driver 使用主机网络运行,因此每个节点(而不是工作负载 Pod)都必须能够通过 Underlay 网络路由到 OSD 地址。如果挂载卡住,请验证节点的 Kube-OVN Underlay 路由,并确认节点可以访问 OSD 地址。
如果集群无法恢复,请使用修正后的网络配置重新创建集群。由于运行中的集群无法切换网络模型,因此应通过重新创建存储集群来解决网络配置错误,而不是在原集群上直接修补。