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

相关推荐
Cx330❀1 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
薛定谔的悦1 小时前
储能系统(EMS)核心架构解析:充放电控制、防逆流、防过载与 PID 调节
linux·运维·架构
志栋智能1 小时前
超自动化运维的终极目标:让系统自治运行
运维·网络·人工智能·安全·自动化
阿 才2 小时前
WSL2 + TFTP + 网络启动(Linux开发板与WSL2建立网络连接)
linux·运维·网络
Benszen3 小时前
Docker容器化技术全解析
运维·docker·容器
IMPYLH3 小时前
Linux 的 false 命令
linux·运维·服务器·bash
小江的记录本3 小时前
【Linux】《Linux常用命令汇总表》
linux·运维·服务器·前端·windows·后端·macos
一匹电信狗3 小时前
【Linux我做主】进程程序替换和exec函数族
linux·运维·服务器·c++·ubuntu·小程序·开源
加农炮手Jinx3 小时前
Flutter 三方库 cli_script 鸿蒙化极简命令行执行引擎适配探索:在多维沙盒终端环境注入异构 Shell 串联逻辑彻底拔高全自动化容器脚本运维及-适配鸿蒙 HarmonyOS ohos
运维·flutter·harmonyos
JoyCong19983 小时前
纳睿雷达×ToDesk:突破时空限制,远程运维让“中国智造”雷达更高效
运维·科技·电脑·远程操作