docker swarm多主机之间的端口无法访问,但能ping通 问题排查及解决

已排查:1.ufw status 防火墙已关闭 2.selinux已关闭 3.netstat -ntpl :::8088 未限制ip

问题:docker swarm多主机之间的端口无法访问,但能ping通,同一主机下的端口也可以访问。

原因:docker overlay网络内部使用vxlan技术实现网络内部互通,通过 udp 4789 端口进行流量转发,此端口可以在swarm初始化时修改。

解决:tcpdump每台机器物理网卡的4789端口的流量:tcpdump -i ens160 udp port 4789 -vv -X;

在worker节点上访问manager节点的tcp 9999服务,可以看到如下报文:

tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes

13:40:49.011232 IP (tos 0x0, ttl 64, id 25866, offset 0, flags none, proto UDP (17), length 110)

master-01.41787 > 10.168.1.181.4789: bad udp cksum 0x174d -\> 0x4773! UDP, length 82

0x0000: 4500 006e 650a 0000 4011 fcc6 0aa8 01aa E..ne...@.......

显示udp报文异常:bad udp cksum 0x174d -> 0x4773,原因是linux默认开启了内核计算cksum和网卡计算cksum,此处一般为网卡计算cksum错误,需要关闭网卡计算的功能;

命令 ethtool -k ens160 查看开启的情况。

其中tx-checksumming为网卡计算cksum的配置项,需要将其关闭:

ethtool --offload ens160 tx off

同时需要将manager节点的此配置也关闭,步骤同上;

最后检查是否可以连通即可

开机自动关闭:修改 /root/.bashrc 文件,添加如下行:

disable ts-checksumming on boot

/sbin/ethtool --offload ens160 tx off

注意:修改/root/.bashrc 文件只会在以 root 用户身份登录时生效。对所有用户生效可以修改/etc/bashrc

相关推荐
“码”力全开17 分钟前
【架构深探】基于Docker与GB28181/RTSP的边缘计算AI视频管理平台:异构算力调度与源码交付实践
人工智能·docker·架构
月巴月巴白勺合鸟月半21 分钟前
在Linux下开发桌面程序
linux·运维·服务器
zh路西法22 分钟前
【tmux入门】终端分屏、SSH远程守护与一键启动脚本
linux·运维·ssh·bash
A_humble_scholar33 分钟前
Linux(八) 进程内存全景:环境变量、main 函数参数与虚拟地址空间全链路深度解析
linux·运维·服务器
遇见小修修35 分钟前
如何找到专业的电脑上门维修供应商?
运维·电脑·负载均衡
qq7590353661 小时前
2026 docker run启动的容器通过命令导出为docker-composer.yml文件
docker·eureka·composer
普马萨特1 小时前
Wi-Fi (802.11) 协议演进
运维·服务器·网络
vortex51 小时前
深入探讨 Linux/Unix 传统设计哲学
linux·运维·unix
袁小皮皮不皮1 小时前
2.HCIP OSPF路由基础(优化版)
运维·服务器·网络·网络协议·智能路由器
JieDavid1 小时前
专利流程岗上岸实录|奇智创达知识产权系统实操经验分享
大数据·运维·人工智能·经验分享·产品运营·产品经理