配置 MTU
在 Kube-OVN 中,MTU(Maximum Transmission Unit,最大传输单元)设置对于确保最佳网络性能并避免数据包分片至关重要。 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 - 当数据包超过
ovn0的 MTU 时,使用更大 MTU 的 Pod 发出的流量会被丢弃
解决方案: 在提高 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 设置。