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

这篇具有很好参考价值的文章主要介绍了一次生产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

容器内抓包:
一次生产docker MTU=1500问题排查解决,计算机理论,编程语言,docker,容器,运维
lvs上抓包到宿主机:
一次生产docker MTU=1500问题排查解决,计算机理论,编程语言,docker,容器,运维
从抓包看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 MTU=1500问题排查解决,计算机理论,编程语言,docker,容器,运维
业务方再重新调用已经通了

原因:

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值设置不对
一次网络问题排查文章来源地址https://www.toymoban.com/news/detail-852930.html

到了这里,关于一次生产docker MTU=1500问题排查解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 主机MTU值和Docker MTU值不一致导致Harbor无法推送问题

    ​ 最近收到需求需要在一台主机上部署Habrbor仓库。该主机因为是虚拟机在其环境得特殊性他的MTU得配置必须为1420。使用harbor安装脚本部署后。发现该harbor服务运页面可以正常访问,但是在使用中发现了两个问题。 1、与该harbor不在一个网段得主机,可以docker login,但是无法

    2024年01月20日
    浏览(44)
  • 一次服务启动慢问题排查

    随着时间推移,参与开发的人员越来越多,项目代码也会越来越复杂,需要我们有意识的定期对代码进行优化,有问题及时解决,避免技术债务越积越多。 这不本人就遇到一个服务启动慢的问题,印象中服务启动是比较快的,一般也就20几秒,但这次开发一个需求发现服务启

    2024年02月16日
    浏览(45)
  • 【记一次线上事故的排查思路】- CPU飙升问题排查

    由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。 问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点。 由于是线上导致的问题,CPU超限后,会自动重启项目,未能保

    2024年01月23日
    浏览(52)
  • 一次日志配置未生效问题排查记录

    某天排查业务问题时,在我司的日志收集平台上,未能发现相关业务服务接口访问日志。经过和相关同事确定,发现业务服务未能将接口访问日志吐到日志收集平台,由此开启一段有点漫长的排查之旅。 业务服务是典型的SpringBoot web应用,日志记录采用slf4j+log4j2组合。 通过applica

    2024年02月11日
    浏览(43)
  • 宿主机无法连接docker里的redis问题解决(生产环境慎用)

    1.连接超时 2.连接能连上但马上断开并报错 3.提示保护模式什么的 链接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168…)这个链接 1.打开配置文件把下面对应的注释掉 2.Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进

    2024年04月13日
    浏览(60)
  • 记一次Apache HTTP Client问题排查

    通过日志查看,存在两种异常情况。 第一种:开始的时候HTTP请求会报超时异常。 762663363 [2023-07-21 06:04:25] [executor-64] ERROR - com.xxl.CucmTool - CucmTool|sendRisPortSoap error,url:https://xxxxxx/realtimeservice/services/RisPort org.apache.http.conn.HttpHostConnectException: Connect to xxx [/xxx] failed: 连接超时 第二种

    2024年02月12日
    浏览(64)
  • 记一次jedis连接池顽固问题排查与修改

    这辈子不想再看到jedisBrokenPipe!!   测试环境运行16天后报错信息: 05:42:32.629 [http-nio-8093-exec-2] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is redis.clients.jedis.exceptions.JedisCon

    2023年04月21日
    浏览(62)
  • 记一次问题解决:通过http启动docker容器报500错误

    问题描述 在打开防火墙的情况下,通过http启动docker容器报500错误 解决过程 1.查看2375端口是否开放 2.检查外部网络是否可以访问服务器 直接在浏览器输入 http://192.xxx.xxx.xxx:2375/containers/json?all=true 看是否有返回 结果是有返回,代表外部网络连接服务器没问题 3.查看ip转发 坑

    2024年02月13日
    浏览(57)
  • 【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究

    作者:京东科技 王长春 小编工作中负责业务的一个服务端系统,使用了 Elasticsearch 服务做数据存储,业务运营人员反馈,用户在使用该产品时发现, 用户后台统计的订单笔数和导出的订单笔数不一致 ! 交易订单笔数不对,出现差错订单了?这一听极为震撼!出现这样的问

    2024年02月03日
    浏览(40)
  • 记一次 .Net+SqlSugar 查询超时的问题排查过程

    环境和版本:.Net 6 + SqlSuger 5.1.4.*   ,数据库是mysql 5.7 ,数据量在2000多条左右 业务是一个非常简单的查询,代码如下: tb_name 下配置了一对多的关系导航,但是执行时没有include导航属性,当执行上述代码时,查询非常慢,甚至会超时报错: The Command Timeout expired before the o

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包