如何让Docker解析DMZ主机?

如何让Docker解析DMZ主机?

假设我有这样的设置:

  • 应用服务器
    • 私有 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。有一点很重要:我们不希望这两台机器之间的任何流量流出 DMZ。并且主机名machine2.internal.domain在机器 #1 上运行的应用程序中被硬编码。

无需 Dockerized 设置:

  • 案例#1:如果名称解析有效machine2.internal.domain,则所有事情都已很好。
  • 案例#2:否则,我将在机器 1 中添加一个条目/etc/hostsmachine2.internal.domain 1.0.0.2

通过 Dockerized 设置,我知道当名称解析不起作用时,Docker 容器无法到达 machine2,因为它没有继承/etc/hosts主机中的条目。

我怎样才能使这个东西以最好的方式工作?......对于两种情况:DNS解析工作和不工作。

我已经审查了情况 2 的以下选项:

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

答案1

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

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

另一个选择是将自定义主机文件写入您的 docker 镜像中,如果它们是固定的,这是可以的,但并不总是理想的。

第三种方法是考虑使用类似 skydns 的东西。如果您的 docker 主机正在运行 CoreOS,或者您有一个 etcd2 集群,那么它也可以工作。

到目前为止,最好的选择是让您的主机通过某种发现机制来找出事物所在位置,而不依赖于 DNS。但是,它们通常需要 etcd2 或 consul 之类的东西。

相关内容