配置 MTU
在 Kube-OVN 中,MTU(最大传输单元)设置对于确保网络性能的最佳状态和避免数据包分片至关重要。MTU 定义了网络中可传输的最大数据包大小。
默认情况下,Kube-OVN 会检测底层物理网络接口的 MTU,并相应地为虚拟网络接口设置 MTU。 但是,在某些场景下,您可能需要自定义 Kube-OVN 网络组件的 MTU 设置。
默认 MTU 行为
Kube-OVN 会自动检测主机物理网络接口的 MTU, 并相应地为 Pod 和 OVS 接口设置 MTU。
在覆盖网络中,Kube-OVN 会降低 MTU 以适应 VXLAN 或 Geneve 封装的开销。 MTU 的计算方式如下:
在底层网络中,MTU 设置为与物理网络接口 MTU 相匹配。
自定义 MTU 设置
MTU 设置可以针对覆盖网络进行全局自定义,也可以针对单个子网进行配置。
错误调整 MTU 设置可能导致网络性能问题, 包括数据包丢失和分片。请确保 MTU 设置与您的底层网络基础设施兼容后再进行更改。
当将 MTU 从较小值增加到较大值时,必须重启所有 Pod,以确保新 MTU 在整个集群中统一生效。
为什么需要这样做?
OVS 内部端口(如 ovn0)会自动采用连接到 br-int 桥的所有接口中 最小的 MTU 作为自身 MTU。此行为在以下场景中可能导致问题:
- 您为新 Pod 配置了更大的 MTU 值
- 部分现有 Pod 仍使用原来的较小 MTU
- 由于最小 MTU 规则,
ovn0接口保持较小的 MTU - 来自较大 MTU Pod 的流量在数据包超过
ovn0MTU 时被丢弃
解决方案: 增加 MTU 设置后,重新创建所有 Pod,确保整个网络路径中的 MTU 配置一致。
MTU 配置更改仅对新创建的 Pod 生效。 现有 Pod 会保留原有的 MTU 设置,直到它们被重新创建。 建议在更改 MTU 设置时规划 Pod 重启。
全局 MTU 配置
要为覆盖网络设置全局 MTU,可以修改 kube-ovn-cni DaemonSet 的命令参数。
例如,要将全局 MTU 设置为 1400,可以按如下方式更新 DaemonSet:
然后,在容器参数中添加或更新 --mtu=1400 参数:
全局 MTU 设置仅影响覆盖网络。对于底层网络, MTU 默认保持与物理网络接口 MTU 一致。
按子网配置 MTU
您也可以通过在子网配置中指定 mtu 字段,为单个子网设置 MTU。
例如,要将某个子网的 MTU 设置为 1450,可以使用以下命令:
此设置将覆盖该子网的全局 MTU 配置。