一次生产docker MTU=1500问题排查解决

和业务方进行联调,业务方调用我方服务, 我方服务部署在虚拟机的docker容器中 提供grpc服务, 通过公网vip lvs到宿主机端口

联调发现 ping 和 telnet我方端口都正常, 但是通过grpc协议调用不通,一直超时

在容器上和lvs上tcpdump抓包发现了问题

tcpdump -i any host 11.53.192.102 and port 9370 -nn and not host 10.225.64.89 and not host 10.225.64.72 and not host 10.225.64.7 and not host 10.225.64.43 -A

容器内抓包:
容器内抓包
lvs上抓包到宿主机:
lvs抓包到宿主机
从抓包看lvs上将包转发到了宿主机,且一直在重发, 说明在到宿主机丢包了,看宿主机上监控只是收到了小包,大包没有收到

推测也就是lvs 到后端服务这块出了问题 小报文没事,大报文丢失, 说明网络配置上有问题, 百度查询解释最多就是MTU设置有问题

MTU(Maximum Transmission Unit,最大传输单元),是网络链路节点的管控值。大于该值的数据帧,或分片,或丢弃。

排查宿主机和docker的MTU设置

宿主机eth0端口是1450
docker 相关的都是 1500

百度相关资料看 说让docker 设置1400 合适
按照教程修改 我的服务是通过docker compse 部署 找到网络设置进行添加

--- 
version: '3'
networks:
  fate-network:
    driver_opts:
      com.docker.network.driver.mtu: "1400"    --- 增加的 mtu大小
    ipam:
      config:
      - subnet: 192.167.0.0/16 

-- 设置docker0为
ip link set dev docker0 mtu 1400

重启服务
docker-compose up -d 重新部署服务

在观察 宿主机和docker 的 mtu docker都为1400
在这里插入图片描述
业务方再重新调用已经通了

原因:

Docker容器内无法使用宿主机网络,很大原因是Docker网桥mtu与宿主机mtu不一致导致的。
docker1.10版本后采用的方案是仅使用默认值1500,不再根据主机默认网卡mtu设定dockermtu,但是如果主机的mtu不是1500,
如何调整mtu的值?

而 docker0 bridge 默认 MTU 为 1500,当 docker0 bridge MTU 1500 大于 Host MTU(如 1400)时,会出现「即小包可通,大包不通」的情况,直观来说就是 ping 8.8.8.8 能通,但是网站打不开、apt update 卡住不动、更无法下载文件

参考

虚拟网络环境中 Docker MTU 问题及解决方式
docker内curl外部https失败
kubernetes集群中pod访问外网丢包严重问题排查:mtu值设置不对
一次网络问题排查

相关推荐

  1. 事务失效问题排查

    2024-04-02 04:40:02       49 阅读
  2. 解决el-radio-group只触发问题

    2024-04-02 04:40:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 04:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 04:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 04:40:02       87 阅读
  4. Python语言-面向对象

    2024-04-02 04:40:02       96 阅读

热门阅读

  1. 利用DNDC模型分析温室气体排放的建模方法与实践

    2024-04-02 04:40:02       32 阅读
  2. Docker 安装PostgreSQL容器

    2024-04-02 04:40:02       33 阅读
  3. 如何在VSCode中高效使用Git:完全指南

    2024-04-02 04:40:02       39 阅读
  4. 关于比尔·盖茨 Bill·Gates 的那些事儿

    2024-04-02 04:40:02       31 阅读
  5. 洛谷 马的遍历(BFS广度优先搜索,队列)

    2024-04-02 04:40:02       31 阅读
  6. 121.联合体学习

    2024-04-02 04:40:02       30 阅读
  7. fpga_hdmi

    2024-04-02 04:40:02       32 阅读
  8. MySql判断表是否被锁定、如何解锁

    2024-04-02 04:40:02       40 阅读
  9. 6.游戏。

    2024-04-02 04:40:02       37 阅读