如何以编程方式指定由 Marathon 创建的依赖 docker 容器的 IP 和端口?
How to programmatically specify the IP and port of a dependent docker container created by Marathon?
我正在通过编写一个小型网络应用程序来学习微服务架构。该应用程序具有以下组件,每个组件都将由一个 docker 容器托管。
在我用 NodeJS 编写的 API 网关中,有一些地方我会调用:
request('http://service_b_ip_addr:port/get_service_b', callback);
但是,在 Marathon 创建服务 B 的 docker 容器之前,service_b_ip_addr
和 port
都是未知的。
有了一些服务发现机制,例如 mesos-dns 或 marathon-lb,我想我可以改变 service_b_ip_addr
到 service_b.marathon.com
之类的东西。
但我不知道应该如何将 port
放入我的程序中。
在此先感谢您的帮助。
PS:
- 我正在使用 BRIDGED 网络模式,因为服务的多个实例可以位于同一个 Mesos 从站上。所以
port
是一个NATted随机数。
看看this answer.
如果您使用 marathon-lb,则无需传递端口,因为它是一个代理,它会知道服务的名称。
如果您使用 mesos-dns,您应该发出 SRV 请求以获取 ip 和端口。在节点中,您可以使用 dns.resolveSrv(hostname, callback)
来完成,但您的 DNS 必须在默认 (53) 端口上公开并支持 SRV 请求(mesos-dns 支持它)。
我正在通过编写一个小型网络应用程序来学习微服务架构。该应用程序具有以下组件,每个组件都将由一个 docker 容器托管。
在我用 NodeJS 编写的 API 网关中,有一些地方我会调用:
request('http://service_b_ip_addr:port/get_service_b', callback);
但是,在 Marathon 创建服务 B 的 docker 容器之前,service_b_ip_addr
和 port
都是未知的。
有了一些服务发现机制,例如 mesos-dns 或 marathon-lb,我想我可以改变 service_b_ip_addr
到 service_b.marathon.com
之类的东西。
但我不知道应该如何将 port
放入我的程序中。
在此先感谢您的帮助。
PS:
- 我正在使用 BRIDGED 网络模式,因为服务的多个实例可以位于同一个 Mesos 从站上。所以
port
是一个NATted随机数。
看看this answer.
如果您使用 marathon-lb,则无需传递端口,因为它是一个代理,它会知道服务的名称。
如果您使用 mesos-dns,您应该发出 SRV 请求以获取 ip 和端口。在节点中,您可以使用 dns.resolveSrv(hostname, callback)
来完成,但您的 DNS 必须在默认 (53) 端口上公开并支持 SRV 请求(mesos-dns 支持它)。