与许多组织一样,我们拥有大量内部基础设施,这些基础设施都映射到内部 DNS 名称 (int.organization.com)。此 DNS 命名空间采用拆分 DNS 配置,其中防火墙内的设备可以使用我们的 DNS 服务器来解析内部名称,而外部系统无法解析这些名称。
随着我们的团队扩展到使用 AppEngine,我们在寻找一种模式时遇到了问题,在该模式中我们可以继续利用内部/受保护的 DNS 条目(config.int.organization.com),而不是无意中将我们的基础架构暴露给公共 DNS。
通常在云实例 (VM) 上,我们只需覆盖 /etc/resolv.conf 即可使用我们的内部 DNS 服务器(通过 VPN)。这很有效。
对于 AppEngine(托管 VM)和容器引擎,我们似乎没有可以覆盖 resolv.conf 的工具(它以只读方式从 docker 主机映射)。我们简要研究了使用 Java 覆盖 DNS 服务器,但无法证明该功能。
使用内部/私有 DNS 服务器是否不是一种与 AppEngine/ContainerEngine 兼容的模式?人们正在实施哪些模式来保护其基础设施/命名?
答案1
Java 专用 DNS
您还可以使用以下命令在您的应用程序中专门覆盖 DNS 服务器:
sun.net.spi.nameservice.nameservers=<server1_ipaddr,server2_ipaddr ...>
每http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html
答案2
您可以在Dockerfile的灵活的环境(曾经是“托管虚拟机”)实例来编辑系统文件,例如 /etc/resolv.conf。