gpt4 book ai didi

docker - 如何配置Marathon-lb以平衡在HOST网络中启动的服务?

转载 作者:行者123 更新时间:2023-12-02 19:38:34 24 4
gpt4 key购买 nike

我有一个由DC / OS管理的集群和一个要通过Marathon部署的dockerized服务。我已经有一个marathon-lb用于服务发现和其他现有服务的负载平衡。所有这些服务都使用BRIDGE网络进行部署。

新服务公开了多个端口。端口A用于服务实例之间的通信,而端口B用于接受来自世界的请求。我想使用主机(而非BRIGE)网络来部署服务。

我想知道如何配置服务的json,以便marathon-lb进行负载平衡并在外部公开端口B。

我已经尝试过各种方案和配置,但是都没有用。我构造的json是下面的。

{
"id": "/cassandra-seed",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "HOST",
"requirePorts": true,
"privileged": true,
"forcePullImage": false
}
},
"constraints": [["hostname","UNIQUE"]],
"labels": {
"HAPROXY_GROUP": "external"
},
"portDefinitions": [
{ "port": portA,"protocol": "tcp"},
{ "port": portB,"protocol": "tcp"}
]
}

Marathon documentation中声明,通过在portDefitions中显式定义端口B并将requirePorts设置为true,服务端口等于主机端口。另外,我部署了新版本的marathon-lb,其中端口B是其portDefinitions部分(违反了10000-10100的默认范围)。

因此,我假设通过在服务json中提供HAPROXY_GROUP标签,marathon-lb将根据需要公开端口B。但是,似乎并非如此。如果我部署服务并使用 curl http://marathon-lb.marathon.mesos:portB,则响应为“来自服务器的空回复”。但是,如果我 curl http://physicalNodeIP:portB,我可以连接到服务实例。

先感谢您。

最佳答案

看起来您在应用程序定义的错误部分中包含requirePorts。它应该在顶层,如下所示:

{
"id": "/cassandra-seed",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "HOST",
"privileged": true,
"forcePullImage": false
}
},
"constraints": [["hostname","UNIQUE"]],
"labels": {
"HAPROXY_GROUP": "external"
},
"requirePorts": true,
"portDefinitions": [
{ "port": portA,"protocol": "tcp"},
{ "port": portB,"protocol": "tcp"}
]
}

作为旁注,您应该考虑使用Cassandra框架,而不是在Marathon上运行Cassandra。

关于docker - 如何配置Marathon-lb以平衡在HOST网络中启动的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com