Docker Swarm 覆盖网络在节点之间不工作
Docker Swarm Overlay Network Not Working Between Nodes
我正在尝试将我的 docker 服务连接到 docker 集群中。
网络由 2 raspberry pi 组成。
我可以创建一个名为 test-overlay
的覆盖网络,我可以看到任一 raspberry pi 节点上的服务都可以连接到网络。
我的问题:
我不能link到覆盖网络节点之间的服务。
给定以下节点和服务配置,service1
可以使用地址 http://service2
连接到 service2
。但它不适用于 http://service3
。但是 http://service3
可以从 service4
.
访问
node1:
- service1
- service2
node2:
- service3
- service4
我是 docker swarm 的新手,非常感谢您的帮助。
正在检查叠加层
我在两个节点上都有 运行 命令 sudo docker inspect network test-overlay
。
在主节点上 returns 以下内容:
[
{
"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"
}
]
}
]
在工作节点上 returns 以下内容:
[
{
"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"
}
]
}
]
检查您的节点是否有 swarm 需要正确打开的端口,如 https://docs.docker.com/network/overlay/ 在 "Prerequisites" 中所述:
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
这个问题似乎是因为节点无法在所需端口上相互连接。
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 提供的解决方案解决了这个问题,我留下这条评论是为了帮助像我这样的人将来找到解决方案。
我在 DigitalOcean 中部署了 10 个 Droplets,默认 Docker 图像由 Docker 提供。它在描述中说它关闭了所有端口,但它们与 Docker 相关。这显然不包括 Swarm 用例。
在 ufw 中允许端口 2377、4789 和 7946 之后,Docker Swarm 现在可以正常工作了。
为了使这个答案独立存在,端口映射到以下功能:
TCP 端口 2377:集群管理通信
TCP 和 UDP 端口 7649:节点间通信
UDP 端口 4789:覆盖网络流量
我正在尝试将我的 docker 服务连接到 docker 集群中。
网络由 2 raspberry pi 组成。
我可以创建一个名为 test-overlay
的覆盖网络,我可以看到任一 raspberry pi 节点上的服务都可以连接到网络。
我的问题:
我不能link到覆盖网络节点之间的服务。
给定以下节点和服务配置,service1
可以使用地址 http://service2
连接到 service2
。但它不适用于 http://service3
。但是 http://service3
可以从 service4
.
node1:
- service1
- service2
node2:
- service3
- service4
我是 docker swarm 的新手,非常感谢您的帮助。
正在检查叠加层
我在两个节点上都有 运行 命令 sudo docker inspect network test-overlay
。
在主节点上 returns 以下内容:
[
{
"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"
}
]
}
]
在工作节点上 returns 以下内容:
[
{
"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"
}
]
}
]
检查您的节点是否有 swarm 需要正确打开的端口,如 https://docs.docker.com/network/overlay/ 在 "Prerequisites" 中所述:
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
这个问题似乎是因为节点无法在所需端口上相互连接。
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 提供的解决方案解决了这个问题,我留下这条评论是为了帮助像我这样的人将来找到解决方案。
我在 DigitalOcean 中部署了 10 个 Droplets,默认 Docker 图像由 Docker 提供。它在描述中说它关闭了所有端口,但它们与 Docker 相关。这显然不包括 Swarm 用例。
在 ufw 中允许端口 2377、4789 和 7946 之后,Docker Swarm 现在可以正常工作了。
为了使这个答案独立存在,端口映射到以下功能:
TCP 端口 2377:集群管理通信 TCP 和 UDP 端口 7649:节点间通信 UDP 端口 4789:覆盖网络流量