如何以编程方式指定由Marathon创build的相关Docker容器的IP和端口?

我正在通过编写一个小型的networking应用程序来学习微服务架构。 该应用程序具有以下组件,每个组件将由一个泊坞窗容器托pipe。

在这里输入图像说明

在我用NodeJS编写的API网关中,有一些地方我会打电话:

request('http://service_b_ip_addr:port/get_service_b', callback); 

但是,在Marathon创build服务B的泊坞窗容器之前, service_b_ip_addrport都是未知的。

通过一些服务发现机制,比如mesos-dns或者marathon-lb ,我想我可以把service_b_ip_addr改成像service_b.marathon.com这样的东西。

但是我不知道我该如何把port放到我的程序中。

在此先感谢您的帮助。


PS:

  1. 我使用BRIDGEDnetworking模式,因为一个服务的多个实例可以定位在同一个Mesos从站上。 所以port是一个NAT的随机数。

看看这个答案 。

如果你使用marathon-lb,那么不需要传递一个端口,因为它是一个代理服务器,它将知道服务的名称。

如果使用mesos-dns,则应该发出SRV请求以获取IP和端口。 在节点中,您可以使用dns.resolveSrv(hostname, callback)来执行此操作,但是您的DNS必须在默认端口(53)上公开,并且支持SRV请求(mesos-dns支持它)。