如何让DockerparsingDMZ主机?

想象一下,我有这样的设置:

  • 应用程序服务器
    • 私有IP: 1.0.0.1 ; 私有主机名machine1.internal.domain
    • 公共IP: 2.0.0.1 ; 公共主机名: machine1.example.com
  • 数据库服务器
    • 私有IP: 1.0.0.2 ; 私有主机名: machine2.internal.domain
    • 公共IP: 2.0.0.2 ; 公共主机名: machine2.example.com

这两台机器都在DMZ中。

Machine1需要使用内部主机名连接到machine2。 有一点很重要:我们不希望这两者之间有任何交通stream量进入非军事区。 并且主机名machine2.internal.domain在机器#1上运行的应用程序中被硬编码。

没有Dockerized设置:

  • 案例#1:如果名称parsing适用于machine2.internal.domain ,一切都已经好了。
  • 案例#2:否则,我会在machine1中的/etc/hosts中添加一个条目: machine2.internal.domain 1.0.0.2

使用Docker化设置,我知道名称parsing不起作用时,Docker容器无法访问machine2,因为它不会inheritance/etc/hosts/etc/hosts的条目。

我怎样才能使这件事情最好的方式? …对于这两种情况:DNSparsing工作,不工作。

我已经审查了案例2的以下选项:

  • 将machine2的IP传递给machine1中的Docker容器: docker run --add-host machine2.internal.domain:1.0.0.2 ...
    • 我必须定义两次machine2.internal.domain IP:一次在/etc/hosts ,一次在Docker中运行命令
  • 不包含在machine1中的容器的networking: docker blabla --net=host
    • 虽然我不知道后果会是什么,但这并不正确。

如果你有一个内部的DNS服务器,你可以使用–dns = []选项运行docker应用程序。

当名称查找失败时,将您的内部DNS服务器设置为真实DNS的转发器,这样任何内部名称都将使用内部地址。

另一个select是将自定义主机文件写入您的泊坞窗图像,如果它们是固定的,但是并不总是理想的。

第三种方法是考虑使用像skydns的东西。 如果你的docker主机运行的是CoreOS,或者你有一个etcd2集群也可以。

到目前为止,最好的select是让你的主机通过一些发现机制来解决问题,而不依赖于DNS。 但是,他们通常会要求etcd2或consul。