【问题标题】:Docker Swarm Overlay Network Not Working Between NodesDocker Swarm Overlay 网络在节点之间不起作用
【发布时间】:2018-04-12 17:59:24
【问题描述】:

我正在尝试在 docker swarm 中将我的 docker 服务连接在一起。

网络由 2 个树莓派组成。

我可以创建一个名为 test-overlay 的覆盖网络,我可以看到任一树莓派节点上的服务都可以连接到网络。

我的问题:

我无法通过覆盖网络链接到节点之间的服务。

给定以下节点和服务的配置,service1 可以使用地址http://service2 连接到service2。但它不适用于http://service3。但是http://service3 可以从service4 访问。

node1:
  - service1
  - service2
node2:
  - service3
  - service4

我是 docker swarm 的新手,不胜感激。

检查叠加层

我在两个节点上都运行了命令sudo docker inspect network test-overlay

在主节点上,这将返回以下内容:

[
    {
        "Name": "test-overlay",
        "Id": "skxhz8sb3f82dhh9jt9t3j5yl",
        "Created": "2018-04-15T20:31:20.629719732Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "3acb436a0cc9a4d584d537edb1546988d334afa4793cc4fae4dd6ac9b48828ea": {
                "Name": "docker-registry.1.la1myuodpkq0x5h39pqo6lt7f",
                "EndpointID": "66887fb1f5f253c6cbec149aa51ab85168903fdd2290719f26d2bcd8d6c68dc8",
                "MacAddress": "02:42:0a:00:00:04",
                "IPv4Address": "10.0.0.4/24",
                "IPv6Address": ""
            },
            "786e1fee538f81fe41ccd082800c646a0e191b0fd912e5c15530e61c248e81ac": {
                "Name": "portainer.1.qyvvlcdqo5sewuku3eiykaplz",
                "EndpointID": "0d29e5452c208ed637ae2e7dcec026f39d2431e8e0e20765a9e0e6d6dfdc60ca",
                "MacAddress": "02:42:0a:00:00:15",
                "IPv4Address": "10.0.0.21/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4101"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "d049fc8f8ae1",
                "IP": "192.168.1.2"
            },
            {
                "Name": "6c0da128f308",
                "IP": "192.168.1.3"
            }
        ]
    }
]

在工作节点上,这将返回以下内容:

[
    {
        "Name": "test-overlay",
        "Id": "skxhz8sb3f82dhh9jt9t3j5yl",
        "Created": "2018-04-20T14:04:57.870696195Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "4cb50161119e4b58a472e1b5c380c301bbb00a23fc99fc2e0712a8c4bde6d9d4": {
                "Name": "minio.1.fo2su2quv8herbmnxqfi3g8w2",
                "EndpointID": "3e85786304ed08f02c09b8e1ed6a153a3b4c2ef7afe503a1b0ca6cf341521645",
                "MacAddress": "02:42:0a:00:00:d6",
                "IPv4Address": "10.0.0.214/24",
                "IPv6Address": ""
            },
            "ce99b3788a4f9438e276e0f52a8f4d29fa09179e3e93b31b14f45339ce3c5315": {
                "Name": "load-balancer.1.j64h1eecsc05b7d397ejvedv3",
                "EndpointID": "3b7e73d27fe30151f2dc2a0ba8a5afc7f74fd283159a03a592be10e297f58d51",
                "MacAddress": "02:42:0a:00:00:d0",
                "IPv4Address": "10.0.0.208/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4101"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "d049fc8f8ae1",
                "IP": "192.168.1.2"
            },
            {
                "Name": "6c0da128f308",
                "IP": "192.168.1.3"
            }
        ]
    }
]

【问题讨论】:

  • 你能验证你的node2是你node1的worker吗? docker node ls
  • 这两个节点是同一个swarm吗?
  • node2 绝对是node1 的worker,并且在同一个swarm 中。我可以确认这一点,因为我可以将服务从主服务器部署到具有放置约束node.role == worker 的工作人员。 sudo docker node ls 按预期返回包含两个节点的表。
  • @X0r0N - 你解决了这个问题吗?我最近有一个类似的 - 它工作得很好,但一段时间后覆盖网络“分裂”并且来自管理节点的容器无法与工作节点通信。令人惊讶的是,重新启动工作节点有所帮助,但这不应该发生。您是否对此进行了更多研究?
  • @Miq 不幸的是我根本没有让它工作。与您的解决方案不同,我的集群节点永远无法通过覆盖网络相互通信。我通过输入hosts 文件来解决我的问题,Portainer 允许您直接在 UI 中配置该文件(因此没有卷安装)。这不是一个好的解决方案,但它必须这样做。

标签: docker networking docker-swarm docker-swarm-mode


【解决方案1】:

这个问题似乎是因为节点无法在所需端口上相互连接。

TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic

在您打开这些端口之前。

更好更简单的解决方案是使用 docker 镜像portainer/agent。就像文档说的那样,

The Portainer Agent is a workaround for a Docker API limitation when using the Docker API to manage a Docker environment.

https://portainer.readthedocs.io/en/stable/agent.html

我希望这可以帮助其他遇到此问题的人。

【讨论】:

  • 非常感谢,X0r0N。那是我需要解决我的问题的提示。作为记录,我偶然发现本教程提到了相同的端口以及如何将它们添加到例如。防火墙D:digitalocean.com/community/tutorials/…
  • 抱歉,看不懂,公布了地址和打开的端口,使用portainer.readthedocs.io/en/stable/deployment.html#quick-start部署,在portainer网络中仍然看不到对等点,但可以从UI访问对等点..
  • 好的,重启有帮助。花了这 6 个小时。生气了。
  • 这对我不起作用,所以我禁用了防火墙ufw disable
  • 我假设您也可以使用ufw allow 来明确允许端口(如上所述),而不是禁用整个防火墙。
【解决方案2】:

我还不能发表评论,但我设法用 X0r0N 提供的解决方案解决了这个问题,我留下这个评论是为了帮助处于我地位的人在未来找到解决方案。

我在 DigitalOcean 中部署了 10 个 Droplet,使用 Docker 提供的默认 Docker 映像。它在描述中说它关闭了所有端口,但它们与 Docker 有关。这显然不包括 Swarm 用例。

在 ufw 中允许端口 2377、4789 和 7946 后,Docker Swarm 现在可以按预期工作。

为了使这个答案独立,端口映射到以下功能:

TCP 端口 2377:集群管理通信 TCP 和 UDP 端口 7649:节点之间的通信 UDP 端口 4789:覆盖网络流量

【讨论】:

    【解决方案3】:

    检查您的节点是否有 swarm 需要正常运行的端口,如“先决条件”中的https://docs.docker.com/network/overlay/ 所述:

    TCP port 2377 for cluster management communications
    TCP and UDP port 7946 for communication among nodes
    UDP port 4789 for overlay network traffic
    

    【讨论】:

    • 感谢您的回复。我已经在文档中看到了该页面并使用 UFW 打开了这些端口。这并不能解决问题。
    • 这确实是个问题。我的解决方案是使用 docker image portainer/agent。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多