Overlay配置中如何设置MTU
导读:Overlay 网络 MTU 设置指南 一、通用原则与计算 隧道封装会额外增加报文头部开销,导致外层 IP 包变大。为避免分片与丢包,需让承载网络(物理/Underlay)MTU ≥ 工作负载看到的 MTU + 封装开销。 常见开销与建议...
Overlay 网络 MTU 设置指南
一、通用原则与计算
- 隧道封装会额外增加报文头部开销,导致外层 IP 包变大。为避免分片与丢包,需让承载网络(物理/Underlay)MTU ≥ 工作负载看到的 MTU + 封装开销。
- 常见开销与建议值如下(以物理网络 MTU 为基准):
- VXLAN:开销约50 字节 → 建议工作负载/隧道 MTU = 物理 MTU - 50
- IP-in-IP:开销约20 字节 → 建议工作负载/隧道 MTU = 物理 MTU - 20
- Geneve(NSX-T 常用):开销约50–58 字节(以太网 14 + Geneve 8 + UDP 8 + IP 20,部分实现还含选项字段),通常按物理 MTU - 50 规划,并将承载网络提升到≥1600以留足余量
- 同一 Overlay 域内所有节点与工作负载的 MTU 应保持一致;若无法统一承载 MTU,可在端点将 MTU 调小以适配最小路径 MTU,但需评估对 TCP/UDP 的影响(UDP 场景尤为敏感)。
二、Docker Swarm Overlay 设置
- 自定义业务 Overlay 网络
- 创建时指定 MTU(示例为 1450):
- docker network create -d overlay --opt com.docker.network.driver.mtu=1450 my-overlay
- 在 Compose 中使用外部网络:
- networks: app-net: external: true name: my-overlay
- 创建时指定 MTU(示例为 1450):
- Swarm 控制面与节点路由相关网络
- 需在初始化/加入 Swarm 之前完成,且所有节点保持一致:
- 重建 docker_gwbridge(先记录 Subnet)
- docker network rm docker_gwbridge
- docker network create --subnet 172.18.0.0/16 --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)
- docker network rm ingress
- docker network create --driver overlay --ingress --subnet 10.255.0.0/16 --gateway 10.255.0.1 --opt com.docker.network.driver.mtu=1450 ingress
- 重建 docker_gwbridge(先记录 Subnet)
- 需在初始化/加入 Swarm 之前完成,且所有节点保持一致:
- 验证
- 在容器内查看网卡 MTU(如 eth0 应为设定的 1450)。
三、Kubernetes/Calico 设置
- 计算与选择
- 物理 MTU 1500 时:VXLAN 建议 1450;IPIP 建议 1480;物理 9000 时:VXLAN 8950、IPIP 8980。
- 配置方式
- 工作负载网卡 MTU(Felix 配置,影响新建 Pod):
- kubectl patch configmap/calico-config -n kube-system --type merge -p ‘{ “data”:{ “veth_mtu”: “1440”} } ’
- 隧道/Overlay MTU(与 veth MTU 保持一致):
- 在 FelixConfiguration 中设置 tunnel_mtu(示例 1440),使隧道接口与 Pod 接口 MTU 一致,避免分片与性能问题。
- 工作负载网卡 MTU(Felix 配置,影响新建 Pod):
- 变更生效
- 对现有工作负载,变更 MTU 后需重启相关 calico-node 才能生效。
四、NSX-T 环境设置
- 承载网络要求
- 由于 Geneve 封装,建议将物理网络/VTEP 路径 MTU 提升到≥1600,以避免封装后报文被丢弃。
- 验证方法
- Underlay TEP 大包测试(ESXi/Edge):
- vmkping ++netstack=vxlan -d -s 1570 (发送 IP 包约 1598,小于 1600 便于验证)
- Overlay 端到端测试(虚拟机内):
- Linux:ping -M do -s 1472 < 目标IP> (ICMP 载荷 1472 + 8 头 = 1480,适配 1500 路径)
- Windows:ping -f -l 1472 < 目标IP>
- Underlay TEP 大包测试(ESXi/Edge):
- 现象与建议
- 若承载 MTU 不足,可能出现跨主机通信异常、丢包或性能劣化;统一调高承载 MTU 是最稳妥方案。
五、Rancher IPsec Overlay 设置
- IPsec 封装开销约98 字节,容器接口 MTU 计算为:容器 MTU = 网络 MTU - 98。
- 配置要点
- 同一环境中的全部主机需保持一致的 MTU 配置;需在主机、Docker Daemon、IPsec/VXLAN 基础服务等多处统一设置,否则会出现随机网络错误。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Overlay配置中如何设置MTU
本文地址: https://pptw.com/jishu/763627.html
