如何配置Overlay网络的MTU
导读:Overlay 网络 MTU 配置指南 一、先确定正确的 MTU 值 基本原则:Overlay 的封装会在原始数据包外增加头部,导致可用的负载变小。因此覆盖网络的 MTU 必须低于物理网卡(NIC)MTU,预留封装开销。常见取值: VX...
Overlay 网络 MTU 配置指南
一、先确定正确的 MTU 值
- 基本原则:Overlay 的封装会在原始数据包外增加头部,导致可用的负载变小。因此覆盖网络的 MTU 必须低于物理网卡(NIC)MTU,预留封装开销。常见取值:
- VXLAN:预留约50 字节,公式为“覆盖 MTU = 物理 MTU − 50”。例如物理 1500 → 1450,9000 → 8950。
- IP-in-IP:预留约20 字节,公式为“覆盖 MTU = 物理 MTU − 20”。
- Geneve:预留约100 字节,公式为“覆盖 MTU = 物理 MTU − 100”。
- 其他封装(如 NVGRE)也需按实际封装头开销预留。以上规则在容器与 SDN 场景中通用,用于避免分片与性能劣化。
二、Docker Swarm 场景
- 何时需要调整:当物理网络 MTU 为1500且未启用覆盖加密时,通常无需调整;若启用加密或物理网络为巨帧,则需按上节规则下调覆盖 MTU。
- 关键网络与位置:
- ingress 网络(Swarm 服务发布端口的负载均衡网):需重建并指定 MTU。
- docker_gwbridge(容器到外部网络的网桥):需重建并指定 MTU。
- 自定义 overlay 网络:创建时通过驱动选项指定 MTU。
- 操作步骤(示例将覆盖 MTU 设为 1450,物理 MTU 为 1500):
- 在 Swarm 初始化/加入前,清理并重建 docker_gwbridge(保留原 Subnet):
- 记录 Subnet:docker network inspect docker_gwbridge
- 停用并删除旧网桥:ip link set docker_gwbridge down;ip link del dev docker_gwbridge
- 重启 Docker 后重建:docker network create --subnet < 原Subnet> --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.enable_ip_masquerade=true --opt com.docker.network.driver.mtu=1450 docker_gwbridge
- 删除并重建 ingress 网络(保留原 Subnet/Gateway):
- 记录 Subnet/Gateway:docker network inspect ingress
- 删除:docker network rm ingress
- 重建:docker network create --driver overlay --ingress --subnet=< 原Subnet> --gateway=< 原Gateway> --opt com.docker.network.driver.mtu=1450 ingress
- 创建自定义 overlay 网络:
- docker network create -d overlay --opt com.docker.network.driver.mtu=1450 --attachable my-overlay
- 验证:ip link 与 docker network inspect 应显示各接口 MTU 为 1450。
- 注意:修改 ingress 前需先停止所有发布端口的服务;重建 docker_gwbridge 需在节点加入 Swarm 之前完成。
- 在 Swarm 初始化/加入前,清理并重建 docker_gwbridge(保留原 Subnet):
三、Kubernetes 常见方案
- Calico(VXLAN 或 IPIP 覆盖)
- 推荐值:物理 1500 → 1450(VXLAN)/ 1480(IPIP);物理 9000 → 8950(VXLAN)/ 8980(IPIP)。
- 配置方式:
- 工作负载接口 MTU:kubectl patch configmap/calico-config -n kube-system --type merge -p ‘{ “data”:{ “veth_mtu”: “1440”} } ’
- 隧道 MTU(与 veth_mtu 一致):在 FelixConfiguration 中设置 tunnel MTU(或使用节点选择器/节点标签统一下发)。
- 变更后需重启 calico-node 使既有 Pod 生效。
- OpenShift SDN(VXLAN)与 OVN-Kubernetes(Geneve)
- SDN(VXLAN):覆盖 MTU 至少比 NIC MTU 小50 字节(如 1500 → 1450,9000 → 8950)。
- OVN-Kubernetes(Geneve):覆盖 MTU 至少比 NIC MTU 小100 字节(如 1500 → 1400,9000 → 8900)。
- 建议:若需超过 1 Gbps 或降低 CPU 占用,启用网卡 VXLAN offload;注意 offload 不降低延迟。
四、OpenStack Neutron 场景
- 控制面配置:在 /etc/neutron/plugins/ml2/ml2_conf.ini 中设置全局或按物理网络映射的 MTU:
- 示例:vxlan_mtu = 1450;或 physical_network_mtus = physnet1:1600(为指定物理网络设置不同 MTU)。
- 生效与验证:重启 neutron-server 等服务,创建/更新网络后通过 neutron net-show 或实例内 ip link 校验 MTU。
- 提示:若物理网络启用巨帧,覆盖与物理侧需一致规划,避免中间设备不支持导致分片或性能问题。
五、Windows 与硬件卸载场景
- Windows Server NVGRE:在未启用巨帧时,虚拟机网卡(vmNIC)MTU 会自动下调约42 字节(如 1500 → 1458)以避免封装后分片;若提供网络启用巨帧,则不下调。
- 硬件卸载与 SDN:部分网卡/驱动支持通过 *EncapOverhead 关键字自动计入封装开销(如设为 160),与 *JumboPacket 共同决定播发 MTU;可用 PowerShell 的 Test-EncapOverheadSettings 与 Test-LogicalNetworkSupportsJumboPacket 验证端到端巨帧支持。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何配置Overlay网络的MTU
本文地址: https://pptw.com/jishu/752659.html
