我在Docker-Swarm上使用Weave网络插件。
我创建了一个具有特定IP范围的docker网络,与我从内部网络路由的默认Weave网络不同。
为了使容器更易于访问,我使用weave附加DNS名称,如containername.auto.mycompany.de。现在我想访问我公司的网络。问题是,编织只允许从本地主机访问编织DNS。
就像在我的一个swarm节点上一样,我可以这样做:
host foobar.auto.mycompany.de 172.17.0.1
Using domain server:
Name: 172.17.0.1
Address: 172.17.0.1#53
Aliases:
foobar.auto.mycompany.de has address 10.40.13.3
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)
但我找不到一种方法可以在这个(10.40.130 / 24)泊坞网络中的一个IP上访问编织容器,或者将端口暴露给群集节点。
我能想到但却不喜欢的唯一方法是做这样的事情:
iptables -t nat -A DOCKER -p tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53
(这不起作用,这只是想法)
或者篡改编织脚本,使其在编织容器的开始处显示端口。
有人知道更好的解决方案吗?
答案 0 :(得分:2)
事实上设定规则
iptables -A DOCKER -p tcp -m tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53
iptables -A DOCKER -p udp -m udp --dport 53 -j DNAT --to-destination 172.17.0.1:53
做到了。当我第一次尝试时,我只是错过了,我的请求将来自"外部"服务器工作,而不是从内部到环回设备。
仍然不是一个漂亮的解决方案,但它完成了这项工作。我很期待看到你们更好的解决方案。
(Bounty站着!)