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

相关推荐
tuokuac7 小时前
docker中nginx配置报错解决
linux·运维·服务器
Joren的学习记录8 小时前
【Linux运维大神系列】docker详解(四)
linux·运维·docker
Elastic 中国社区官方博客9 小时前
让我们把这个 expense 工具从 n8n 迁移到 Elastic One Workflow
大数据·运维·elasticsearch·搜索引擎·ai·信息可视化·全文检索
( •̀∀•́ )92010 小时前
GitHub Actions SSH 部署密钥
运维·ssh·github
louqle10 小时前
docker基本知识及常用命令汇总
运维·docker·容器
学烹饪的小胡桃10 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
叫致寒吧10 小时前
Docker
运维·docker·容器
杨浦老苏10 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
白露与泡影11 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
l1t12 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器