如何设置mesos dns解决交叉群集

pxy2qtax  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(341)

我用vm机器、机器a(主机+代理)和机器b(仅代理)设置了一个mesos集群,我还在机器a上运行marathon和mesos dns,这两个代理都支持docker。
我用docker通过marathon启动了一个web应用程序,docker容器使用网桥网络模式运行。
当我运行一个示例时,容器正常启动,mesos dns用docker服务内部ip正确解析(例如172.17.0.2),但是因为我只运行一个示例,mesos集群中有两个代理,所以只有一个代理得到容器,另一个没有,如果客户端访问没有运行的mesos代理,则会出现错误。
这意味着,容器在机器b上运行,而不是在机器a上运行,我的docker应用程序名为test,并且在我运行“curl”后使用端口5000侦听http://test.marathon.mesos:5000/“在机器b上,我得到正确的响应,但在机器a上运行相同的命令时,出现错误“curl:(7)未能连接到test.marathon.mesos端口5000:没有到主机的路由”,mesos dns解析域到docker内部ip 172.17.0.2,但此ip未出现在计算机a上,因为计算机a上没有运行任何容器。
我也可以在同一个代理节点上运行多个示例而没有任何问题,但是我知道,mesos cluster和marathon在代理节点上运行应用程序是随机的,所以负载均衡器后面的所有代理节点都可以被访问,如果客户端通过负载均衡器访问没有容器的代理节点,这对客户端来说是个问题。
我的mesos dns配置文件如下:

{
   "zk":"zk://10.11.54.103:2181,10.11.54.103:2182,10.11.54.103:2183/mesos",
  "masters": ["10.11.54.103:5050"],
  "refreshSeconds": 60,
  "ttl": 60,
  "domain": "mesos",
  "port": 53,
  "resolvers": ["10.11.255.1","10.11.255.2","4.2.2.2"],
  "timeout": 5,
  "httpon": true,
  "dnson": true,
  "httpport": 8123,
  "externalon": true,
  "listener": "10.11.54.103",
  "SOAMname": "ns1.mesos",
  "SOARname": "root.ns1.mesos",
  "SOARefresh": 60,
  "SOARetry":   600,
  "SOAExpire":  86400,
  "SOAMinttl": 60,
  "IPSources": ["netinfo", "mesos", "host"]
}

我希望mesos dns可以跨整个mesos集群解析域,有什么想法吗?

4jb9z9bj

4jb9z9bj1#

根据文件:

带docker的mesos dns

如果您选择在docker中使用mesos dns,并且mesos版本在0.25之后,请注意有一些注意事项。默认情况下,docker executor将docker容器的ip发布到networkinfo字段中。不幸的是,除非您运行某种sdn解决方案、桥接或与docker进行主机联网,否则这可能会导致无法访问容器。
config.json.sample中mesos dns附带的默认配置省略 netinfo 从源头上。如果从配置中省略此字段,则默认选项包括 netinfo . 如果docker有问题,请确保选中ipsources字段以忽略netinfo。 IPSources 定义任务记录的ip源的回退列表,按优先级排序。如果使用docker,并启用 netinfo ipsource,它可能导致无法访问任务,因为在mesos 0.25之后,docker executor在networkinfo中发布容器的内部ip。

相关问题