DC/OS 虚拟网络无法跨代理工作
DC/OS virtual network doesn't work across agents
我已经毫无问题地成功创建了主机和桥接模式马拉松应用程序,并使用 l4lb 和 marathon-lb 来托管它们。一切正常。
我现在正在尝试使用 USER 模式网络,使用默认的 "dcos" 9.0.0.0/8 网络。在这种模式下,我的应用程序只能与同一代理上的其他容器通信。主机 OS 只能与自己托管的容器通信。节点似乎无法在虚拟网络上相互路由流量。
为了测试,我在不同的主机上使用了 docker "nginx:alpine" 容器,其中有 2 个实例。他们的 IP 是 9.0.6.130 和 9.0.3.130。没有 L4LB 或 Marathon-LB 配置,没有服务端点,没有暴露在主机网络上的端口。基本上:
"container": {
"docker": {
"image": "nginx:alpine",
"forcePullImage": false,
"privileged": false,
"network": "USER"
}
},
"labels": null,
"ipAddress": {
"networkName": "dcos"
},
}
在其中一个 shell 中,我有:
/ # ip addr list | grep 'inet 9'
inet 9.0.6.130/25 scope global eth0
/ # nc -vz 9.0.6.130:80
9.0.6.130:80 (9.0.6.130:80) open
/ # nc -vz 9.0.3.130:80
nc: 9.0.3.130:80 (9.0.3.130:80): Operation timed out
/ # traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
1 9.0.6.129 (9.0.6.129) 0.006 ms 0.002 ms 0.001 ms
2 44.128.0.4 (44.128.0.4) 0.287 ms 0.272 ms 0.100 ms
3 * * *
4 * * *
从另一边:
/ # ip addr list | grep 'inet 9'
inet 9.0.3.130/25 scope global eth0
/ # nc -vz 9.0.3.130:80
9.0.3.130:80 (9.0.3.130:80) open
/ # nc -vz 9.0.6.130:80
/ # traceroute 9.0.6.130
traceroute to 9.0.6.130 (9.0.6.130), 30 hops max, 46 byte packets
1 9.0.3.129 (9.0.3.129) 0.005 ms 0.003 ms 0.001 ms
2 44.128.0.7 (44.128.0.7) 0.299 ms 0.241 ms 0.098 ms
3 * * *
4 * * *
有趣的是,尽管 traceroute 没有显示,但我可以 ping 通我认为应该是下一个(虚拟)跃点和所有中间跃点的内容。唯一不能 ping 通的是终端容器的虚拟 IP。 (这些来自其中一个容器)
64 bytes from 44.128.0.7: seq=0 ttl=63 time=0.269 ms
64 bytes from 44.128.0.4: seq=0 ttl=64 time=0.094 ms
64 bytes from 9.0.3.129: seq=0 ttl=64 time=0.072 ms
64 bytes from 9.0.6.129: seq=0 ttl=63 time=0.399 ms
PING 9.0.6.130 (9.0.6.130): 56 data bytes (no response)
有什么想法吗?
在 DC/OS 社区邮件列表的帮助下解决了这个问题。
RHEL7 默认安装 firewalld,DC/OS 需要禁用。我已经这样做了,但是在节点重新启动之前,FORWARD 策略仍然保留为 DROP。 DC/OS 的防火墙操作只会更改规则,不会更改默认策略。
这修复了它:
iptables -P FORWARD ACCEPT
除非在某处指定(如 firewalld),否则这是重启时的默认设置,因此它应该在重启后持续存在,无需任何进一步操作。
我已经毫无问题地成功创建了主机和桥接模式马拉松应用程序,并使用 l4lb 和 marathon-lb 来托管它们。一切正常。
我现在正在尝试使用 USER 模式网络,使用默认的 "dcos" 9.0.0.0/8 网络。在这种模式下,我的应用程序只能与同一代理上的其他容器通信。主机 OS 只能与自己托管的容器通信。节点似乎无法在虚拟网络上相互路由流量。
为了测试,我在不同的主机上使用了 docker "nginx:alpine" 容器,其中有 2 个实例。他们的 IP 是 9.0.6.130 和 9.0.3.130。没有 L4LB 或 Marathon-LB 配置,没有服务端点,没有暴露在主机网络上的端口。基本上:
"container": {
"docker": {
"image": "nginx:alpine",
"forcePullImage": false,
"privileged": false,
"network": "USER"
}
},
"labels": null,
"ipAddress": {
"networkName": "dcos"
},
}
在其中一个 shell 中,我有:
/ # ip addr list | grep 'inet 9'
inet 9.0.6.130/25 scope global eth0
/ # nc -vz 9.0.6.130:80
9.0.6.130:80 (9.0.6.130:80) open
/ # nc -vz 9.0.3.130:80
nc: 9.0.3.130:80 (9.0.3.130:80): Operation timed out
/ # traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
1 9.0.6.129 (9.0.6.129) 0.006 ms 0.002 ms 0.001 ms
2 44.128.0.4 (44.128.0.4) 0.287 ms 0.272 ms 0.100 ms
3 * * *
4 * * *
从另一边:
/ # ip addr list | grep 'inet 9'
inet 9.0.3.130/25 scope global eth0
/ # nc -vz 9.0.3.130:80
9.0.3.130:80 (9.0.3.130:80) open
/ # nc -vz 9.0.6.130:80
/ # traceroute 9.0.6.130
traceroute to 9.0.6.130 (9.0.6.130), 30 hops max, 46 byte packets
1 9.0.3.129 (9.0.3.129) 0.005 ms 0.003 ms 0.001 ms
2 44.128.0.7 (44.128.0.7) 0.299 ms 0.241 ms 0.098 ms
3 * * *
4 * * *
有趣的是,尽管 traceroute 没有显示,但我可以 ping 通我认为应该是下一个(虚拟)跃点和所有中间跃点的内容。唯一不能 ping 通的是终端容器的虚拟 IP。 (这些来自其中一个容器)
64 bytes from 44.128.0.7: seq=0 ttl=63 time=0.269 ms
64 bytes from 44.128.0.4: seq=0 ttl=64 time=0.094 ms
64 bytes from 9.0.3.129: seq=0 ttl=64 time=0.072 ms
64 bytes from 9.0.6.129: seq=0 ttl=63 time=0.399 ms
PING 9.0.6.130 (9.0.6.130): 56 data bytes (no response)
有什么想法吗?
在 DC/OS 社区邮件列表的帮助下解决了这个问题。
RHEL7 默认安装 firewalld,DC/OS 需要禁用。我已经这样做了,但是在节点重新启动之前,FORWARD 策略仍然保留为 DROP。 DC/OS 的防火墙操作只会更改规则,不会更改默认策略。
这修复了它:
iptables -P FORWARD ACCEPT
除非在某处指定(如 firewalld),否则这是重启时的默认设置,因此它应该在重启后持续存在,无需任何进一步操作。