配置 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 配置。