什么是覆盖网络以及 DNS 解析如何工作?

Posted

技术标签:

【中文标题】什么是覆盖网络以及 DNS 解析如何工作?【英文标题】:What is overlay network and how does DNS resolution work? 【发布时间】:2017-11-27 05:09:03 【问题描述】:

我无法从我的docker swarm 集群连接到外部mongodb 服务器。

据我了解,这是因为集群使用了覆盖网络驱动程序。我说的对吗?

如果没有,docker 覆盖驱动程序如何工作以及如何从集群连接到外部mongodb 服务器?

【问题讨论】:

【参考方案1】:

问。 docker 覆盖驱动是如何工作的?

我会推荐this good reference for understanding docker swarm network overlay, and more globally, Docker's architecture。

这表明:

Docker 使用嵌入式 DNS 为在单个 Docker 引擎上运行的容器和在 Docker Swarm 中运行的任务提供服务发现。 Docker 引擎有一个内部 DNS 服务器,可为用户定义的桥接、覆盖和 MACVLAN 网络中主机上的所有容器提供名称解析。

每个 Docker 容器(或 Swarm 模式下的任务)都有一个 DNS 解析器,它将 DNS 查询转发到充当 DNS 服务器的 Docker 引擎。

因此,在多主机 docker swarm mode 中,使用此示例设置:

在这个例子中,有一个名为myservice 的两个容器的服务。第二个服务 (client) 存在于同一网络上。 client 为 docker.com 和 myservice 执行两个 curl 操作。

这些是产生的动作:

DNS 查询由client 发起,用于docker.commyservice。 容器的内置解析器拦截 127.0.0.11:53 上的 DNS 查询并将它们发送到 Docker 引擎的 DNS 服务器。 myservice 解析为该服务的虚拟 IP (VIP),该服务在内部负载平衡到各个任务 IP 地址。容器名称也可以解析,尽管直接解析为它们的 IP 地址。 docker.com 在 mynet 网络中不作为服务名称存在,因此请求转发到配置的默认 DNS 服务器

回到你的问题:

如何从集群连接到外部 mongodb 服务器?

对于您的外部mongodb(假设您有一个用于该mongodb.mydomain.com 的DNS),您与上述架构中的client 处于相同的情况,想要连接到docker.com,除了您肯定不想将 mongodb.mydomain.com 暴露给整个网络,因此您可能已经在内部集群 DNS 服务器中声明了它。

那么,如何告诉 docker 引擎使用这个内部 DNS 服务器来解析mongodb.mydomain.com

您必须在您的docker service 任务中指明您要使用internal DNS server,如下所示:

docker service create \
--name myservice \
--network my-overlay-network \
--dns=10.0.0.2 \
myservice:latest

这里重要的是--dns=10.0.0.2。这将告诉 Docker 引擎在无法解析 VIP 中的 DNS 名称时默认使用位于 10.0.0.2:53 的 DNS 服务器。

最后,当你说:

我无法从我的 docker swarm 集群连接到外部 mongodb 服务器。据我了解,这是因为集群使用了覆盖网络驱动程序。我说的对吗?

我会说不,因为docker engine 中有一个内置方法可以将来自overlay network 的未知 DNS 名称转发到您想要的 DNS 服务器。

希望这会有所帮助!

【讨论】:

您好弗朗索瓦,感谢您非常有帮助的回复。我正在尝试将 Swarm 作为 K8s 的一种更简单的替代方案,但我错过了一个关键特性:命名空间。有没有办法让 DNS 查找包含某种命名空间?假设我想在同一个 swarm 中多次运行一个应用程序堆栈,我将不得不为每个堆栈的服务命名:app_dev、app_staging、app_production 等等...... @F***Te 我想你是对的,据我所知,swarm 中没有命名空间。因此,您必须以不同的方式命名同一个应用程序。我在专业项目中切换到 K8s 进行生产,但 swarm 对于小型基础架构仍然是一个不错的选择,你必须权衡每种解决方案的优缺点。

以上是关于什么是覆盖网络以及 DNS 解析如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

DNS和ARP的工作原理以及一些网络故障排除

网络面试--

Coredns+Nodelocaldns cache解决Coredns域名解析延迟

什么是DNS

DNS 是如何影响你冲浪速度的?

什么是DNS劫持?如何进行有效应对?