如何从外部访问 Weave DNS-Server?

Posted

技术标签:

【中文标题】如何从外部访问 Weave DNS-Server?【英文标题】:How to access Weave DNS-Server from external? 【发布时间】:2016-04-19 14:20:34 【问题描述】:

我在 Docker-Swarm 上使用 Wea​​ve 网络插件。

我创建了一个具有特定 IP 范围的 docker 网络,不同于默认的 Weave 网络,我从内部网络路由到该网络。

为了使容器更易于访问,我使用 weave 附加 DNS 名称,例如 containername.auto.mycompany.de。现在我想从我的公司网络访问那些。问题是,weave 只允许从本地主机访问 weave 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)

但是我没有找到一种方法可以让 weave 容器在这个 (10.40.130/24) docker 网络中的一个 IP 上可访问,或者将端口暴露给 swarm 节点。

我能想到但不喜欢的唯一方法是做这样的事情:

iptables -t nat -A  DOCKER -p tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53

(这行不通,这只是想法)

或篡改 weave 脚本,使其在 weave 容器启动时暴露端口。

有人知道更好的解决方案吗?

【问题讨论】:

【参考方案1】:

其实就是制定规则

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

做到了。当我第一次尝试这样做时,我只是错过了看到我的请求将来自服务器“外部”工作,而不是从内部到环回设备。

仍然不是一个很好的解决方案,但它可以完成工作。我期待看到你们提供更好的解决方案。

(赏金站!)

【讨论】:

以上是关于如何从外部访问 Weave DNS-Server?的主要内容,如果未能解决你的问题,请参考以下文章

Weave 如何与外网通信?- 每天5分钟玩转 Docker 容器技术(66)

如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器

61-如何使用 Weave 网络?

如何使用 Weave 网络?- 每天5分钟玩转 Docker 容器技术(63)

如何使用 Weave 网络?- 每天5分钟玩转 Docker 容器技术(63)

从 scipy 的 weave.inline 将 C 数组返回到 python 范围