什么是覆盖networking,DNSparsing如何工作?
我无法连接到我的docker swarm
集中的外部mongodb
服务器。
据我所知,这是因为群集使用覆盖networking驱动程序。 我对吗?
如果不是,docker overlay驱动程序是如何工作的,我怎样才能从集群连接到外部的mongodb
服务器?
问:docker overlay驱动程序如何工作?
我会build议这个很好的参考,以了解docker群networking覆盖,以及更多的全球,如何docker架构 。
这说明:
Docker使用embedded式DNS为在单个Docker引擎上运行的容器以及在Docker Swarm中运行的任务提供服务发现。 Docker Engine有一个内部的DNS服务器,为用户定义的网桥,覆盖networking和MACVLANnetworking上的主机上的所有容器提供名称parsing。
每个Docker容器(或Swarm模式下的任务)都有一个DNSparsing器,用于将DNS查询转发到作为DNS服务器的Docker引擎。
因此,在多主机docker swarm mode
,通过以下示例设置:
在这个例子中有一个叫做
myservice
的两个容器的服务。 第二个服务(client
)存在于同一个networking上。client
为docker.com和myservice
执行两个curl
操作。这些是由此产生的行动:
- DNS查询由
client
为docker.com
和myservice
启动。- 容器的内置parsing器拦截
127.0.0.11:53
上的DNS查询并将它们发送到Docker Engine的DNS服务器。myservice
parsing为该服务的虚拟IP(VIP),该服务在内部对各个任务IP地址进行负载平衡。 容器名称也可以parsing,尽pipe直接到它们的IP地址。docker.com
在mynetnetworking中不存在作为服务名称,所以请求被转发到configuration的默认DNS服务器 。
回到你的问题:
我如何连接到外部MongoDB服务器表单集群?
对于你的外部mongodb
(假设你有一个用于mongodb.mydomain.com
的DNS),你和上面的架构中的client
一样,想连接到docker.com
,除了你肯定不会“ t把mongodb.mydomain.com
公开给整个networking,所以你可能已经在你的内部集群DNS服务器上声明了它。
那么,如何告诉docker引擎使用这个内部DNS服务器来parsingmongodb.mydomain.com
?
您必须在您的docker service
任务中指出您要使用内部DNS服务器 ,如下所示:
docker service create \ --name myservice \ --network my-overlay-network \ --dns=10.0.0.2 \ myservice:latest
这里最重要的是--dns=10.0.0.2
。 这将告诉docker引擎在10.0.0.2:53
使用DNS服务器作为默认,如果它不能parsingVIP中的DNS名称。
最后,当你说:
我无法连接到我的Docker群集中的外部MongoDB服务器。 据我所知,这是因为群集使用覆盖networking驱动程序。 我对吗?
我会说不,因为在docker engine
有一个内置的方法来转发来自overlay network
未知DNS名称到你想要的DNS服务器。
希望这可以帮助!