【问题标题】:Accessing microservices deployed on apache mesos agents访问部署在 apache mesos 代理上的微服务
【发布时间】:2017-03-13 14:57:58
【问题描述】:

客户端如何不指定主机代理 IP 地址和相关映射端口的情况下访问已部署的微服务。

如果我们添加 Mesos-DNS 作为客户端解析器,我们只能获取代理 ip-addresses,但它不会返回微服务实例及其相关端口的列表。

假设我们有以下三个 webapp1 实例:

+---------+---------+
| agent1  | agent2  |
+---------+---------+
|         |         |
| ins1:11 | ins3:13 |
|         |         |
| ins2:12 |         |
|         |         |
+---------+---------+

客户端应该能够直接访问其中一个实例(不涉及代理 1 和代理 2 的 IP 地址或那些 11、12 和 13 端口号)。例如:

$ lynx webapp1.marathon.mesos

【问题讨论】:

标签: dns load-balancing microservices mesos marathon


【解决方案1】:

看看this answer

当您发出DNS SRV 请求时,DNS 可以提供有关服务端口的信息。它与大多数客户端不兼容,因此您需要手动操作。 Mesos DNS 有whole section dedicate to SRV records

以下是文档中的示例:

SRV 记录

SRV 记录将服务名称与主机名和 IP 端口相关联。 对于由框架framework 启动的任务task,Mesos-DNS 生成服务名称_task._protocol.framework.domain 的SRV 记录,其中protocoludptcp。 例如,其他 Mesos 任务可以通过查找_search._tcp.marathon.mesos 来发现marathon 框架启动的服务search

$ dig _search._tcp.marathon.mesos SRV

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> _search._tcp.marathon.mesos SRV
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33793
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;_search._tcp.marathon.mesos.   IN SRV

;; ANSWER SECTION:
_search._tcp.marathon.mesos.    60 IN SRV 0 0 31302 10.254.132.41.

Mesos-DNS 支持使用任务的 DiscoveryInfo 来生成 SRV 记录。 如果没有可用的 DiscoveryInfo,那么 Mesos-DNS 将回退到为任务分配的那些“端口”资源。 下表说明了管理 SRV 生成的规则:

【讨论】:

    【解决方案2】:

    请使用马拉松负载平衡器检查标题X-Marathon-App-Id

    例子:

    curl -v -H "X-Marathon-App-Id: /your-app-id-in-marahton" -X GET \
      http://marathon-lb.marathon.mesos:9091/yourAppEndPoint
    

    更多信息marathon-lb docs

    【讨论】:

    • 问题是关于 Mesos-DNS 而不是 marathon-lb
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2017-06-07
    • 1970-01-01
    • 2013-04-13
    • 2022-11-05
    • 2020-07-11
    相关资源
    最近更新 更多