0

我们正在运行一个由 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$ 

起初 - 你可以看到没有 anwer 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) 我们知道覆盖网络不是问题,因为流量正在到达容器所在的目标机器 (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. consul leave, 3. 清理其他机器上 consul keystore 中的所有条目(没有被 leave 删除) 3. 启动 consul 4. 重启所有 enigines 5. 重启 nginx 容器 ... gotcha ,网络正在工作。

4

2 回答 2

0

我遇到了覆盖网络 Docker Swarm 设置的确切问题。我发现这不是操作系统或 Docker 问题。受影响的服务器正在使用 Intel NIC X 系列。其他带 I 系列网卡的服务器工作正常。您使用本地服务器吗?或者任何云提供商?我们使用 OVH,它可能是由某些数据中心网络配置错误引起的。

于 2019-11-26T22:27:33.297 回答
0

同样的问题再次袭击了我们。我们有 7 台服务器(每个都运行 docker,如上所述),两个 nginx 入口点。

看起来,领事密钥库中的一些错误是导致 docker 网络显示奇怪行为的真正问题(如上所述)。

在我们的配置中,所有 7 个服务器都有自己的本地 consul 实例,与其他服务器同步。对于网络设置,每个 docker 服务都在其本地领事密钥存储中进行查找。

在上周,我们注意到在网络可达性问题的同时,领事客户也报告了同步问题(领导选举问题、重复等)。

最终的解决方案是停止 docker 引擎和 consul 客户端。删除某些服务器上的 consul 数据库,再次将其加入其他服务器。启动 docker 引擎。

看起来领事服务是网络配置的关键部分......

进行中...

于 2019-03-03T08:19:52.227 回答