【发布时间】:2018-12-07 17:45:16
【问题描述】:
我们正在运行一个由 6 个引擎组成的环境,每个引擎包含 30 个容器。 两个引擎正在使用 nginx 代理运行容器。这两个容器是进入网络的唯一途径。
现在是我们第二次在这种环境中面临一组容器的重大问题:
两个 nginx 容器都无法访问其他机器上的某些容器。只有一个物理引擎有这个问题,其他都很好。一开始是一些机器超时,现在24小时后,那台机器上的所有容器都有问题。
更多细节:
Nginx 正在机器 prod-3 上运行。 第二个 Nginx 在机器 prod-6 上运行。 有问题的容器在 prod-7 上运行。 两个 nginx 都无法到达容器,但容器可以通过“ping”到达 nginx。
在开始时和今天早上,我们可以到达一些集装箱,但不能。它从超时开始,现在我们无法 ping 覆盖网络中的容器。这次我们可以使用 tcpdump 查看流量:
在 nginx 容器(prod-3 上的 10.10.0.37)上,我们开始 ping 并 如您所见:100% 丢包:
root@e89c16296e76:/# ping ew-engine-evwx-intro
PING ew-engine-evwx-intro (10.10.0.177) 56(84) bytes of data.
--- ew-engine-evwx-intro ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7056ms
root@e89c16296e76:/#
在目标机器 prod-7 上(不在容器内) - 我们看到所有 ping 包都已收到(因此覆盖网络正确路由到 prod-7):
wurzel@rv_____:~/eventworx-admin$ sudo tcpdump -i ens3 dst port 4789 |grep 10.10.0.177
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 10.10.0.37.35270 > 10.10.0.177.http: Flags [S], seq 2637350294, win 28200, options [mss 1410,sackOK,TS val 1897214191 ecr 0,nop,wscale 7], length 0
IP 10.10.0.37.35270 > 10.10.0.177.http: Flags [S], seq 2637350294, win 28200, options [mss 1410,sackOK,TS val 1897214441 ecr 0,nop,wscale 7], length 0
IP 10.10.0.37.35326 > 10.10.0.177.http: Flags [S], seq 2595436822, win 28200, options [mss 1410,sackOK,TS val 1897214453 ecr 0,nop,wscale 7], length 0
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 1, length 64
IP 10.10.0.37.35326 > 10.10.0.177.http: Flags [S], seq 2595436822, win 28200, options [mss 1410,sackOK,TS val 1897214703 ecr 0,nop,wscale 7], length 0
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 2, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 3, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 4, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 5, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 6, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 7, length 64
IP 10.10.0.37 > 10.10.0.177: ICMP echo request, id 83, seq 8, length 64
^C304 packets captured
309 packets received by filter
0 packets dropped by kernel
wurzel@_______:~/eventworx-admin$
起初 - 你可以看到没有任何 ICMP(防火墙不负责任,也不是 appamor)。
在负责的容器 (evwx-intro = 10.10.0.177) 内没有收到任何东西,接口 eth0 (10.10.0.0) 只是静默:
root@ew-engine-evwx-intro:/home/XXXXX# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
root@ew-engine-evwx-intro:/home/XXXXX#
真的很奇怪。
docker 的任何其他工具可以帮助我们了解发生了什么?
我们没有对防火墙进行任何更改,也没有自动更新系统(也许是安全性)。
唯一的活动是,一些旧容器在很长一段时间(可能 1-2 个月不活动)后被重新激活。
我们真的很迷茫,如果您经历过类似的事情,了解您采取的步骤将非常有帮助。
非常感谢您对此提供的任何帮助。
================================================ ===============
6 小时后
在尝试了一整天几乎所有东西之后,我们进行了最后一次尝试: (1) 停止所有容器 (2)停止docker服务 (3)停止docker socket服务 (4)重启机器 (5) 启动容器
...现在看起来不错。 总结: (1) 我们不知道是什么导致了问题。这是不好的。 (2) 我们了解到overlay网络不是问题,因为流量正在到达容器所在的目标机器 (3) 我们能够跟踪网络流量,直到它到达目标机器。不知何故,它没有“进入”容器。因为在容器内部,网络接口根本没有显示任何活动。
我们对docker使用的vxnet虚拟网络一无所知,所以如果有人有提示,你能帮我们提供一个链接或工具吗?
提前非常感谢。 安德烈
================================================ ======= 4 天后...
刚刚将 docker-ce 18.06 更新到 18.09 后又出现了同样的情况。
我们有两台机器使用 docker-ce 18 和 ubuntu 18.04,由于这个问题,我刚刚将 docker-ce 更新到 18.09(Docker 容器不应该在 Ubuntu 18.04 中解析 DNS ...新的已解析服务)。
我停止了所有机器,更新了 docker,重新启动机器,启动了所有机器。
问题:与本文中描述的问题相同。目标主机操作系统收到 ping,但未转发到容器。
解决方案: 1.停止所有容器和docker 2.领事离开, 3.清理其他机器上consul keystore中的所有条目(没有被leave删除) 3.启动领事 4.重启所有引擎 5. 重启 nginx 容器 ... 明白了,网络现在可以工作了。
【问题讨论】:
-
在尝试了几乎一整天之后,我们做了最后一次尝试:(1)停止所有容器(2)停止 docker 服务(3)停止 docker socket 服务(4)重启机器(5 ) 启动容器...现在看起来不错。
-
这看起来像是 vxlan 配置中的一些损坏。我不会第一次看到这种情况。如果您可以重现它,那么使用 libnetwork 打开的问题将是获得帮助的更好地方。
-
刚刚将docker-ce 18.06更新到18.09后又出现了同样的情况。
-
不知何故我也遇到了类似的问题。在 3 个树莓派 4、1 个经理、2 个工人的堆栈上使用 docker swarm。多个服务通过标签约束分布(每个 swarm 节点都被标记为主机名)。问题是从 php 服务(管理节点 1)到达 mysql 服务(在工作节点 2 上)。容器响应 ping 和 nslookup 命令,但它似乎是端口 EXPOSE 问题,但我无法弄清楚。 (使用 Ubuntu 20.04 焦点和 Docker 19.03.13 API 1.40)。该解决方案一直有效,直到几天前我更新了所有主机包。
标签: docker networking tcp docker-swarm virtual-network