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

标签 docker marathon dcos

我有一个由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/

相关文章:

docker - GitLab CI 对 Docker 构建作业的无效参数

node.js - 从Angle 8向Express.js后端Docker容器发送HTTP请求时,跨域请求被阻止(原因:CORS请求未成功)

maven - --mount=type=cache 在 buildkit

docker - Mesos,马拉松,Docker,Wildfly

Mesosphere (dc/os) 代理重新连接失败

dcos - 如何在 dc/os 集群中重启 Marathon 或任何 DC/OS 服务

windows - 有没有一种方法可以自动批准Bamboo远程代理,而无需在Bamboo服务器上手动批准它?

docker - 当Marathon在同一主机上运行所有docker应用程序时,docker服务停止

azure - Azure 容器服务上的 Marathon - 无法扩展到所有节点

docker - Docker 容器中的自动缩放