多个域不同的路径marathon lb

时间:2016-05-25 07:13:45

标签: marathon service-discovery

我想在具有不同路径的两个域上使用相同的服务。 在marathon lb。

中配置

http://front-dev.marathon.ice.mesos/auth

http://auth-dev.marathon.ice.mesos

我试过了:

HAPROXY_0_VHOST=front-dev.marathon.ice.mesos,auth-dev.marathon.ice.mesos
HAPROXY_0_PATH=/auth

这会让我点击

http://front-dev.marathon.ice.mesos/authhttp://auth-dev.marathon.ice.mesos/auth

不完全是我想要的。

我也试过

HAPROXY_0_VHOST=front-dev.marathon.ice.mesos,auth-dev.marathon.ice.mesos
HAPROXY_0_PATH=/auth
HAPROXY_1_PATH=/

没有任何改变。

两个单独的VHOST标签不起作用

HAPROXY_0_VHOST=front-dev.marathon.ice.mesos
HAPROXY_1_VHOST=auth-dev.marathon.ice.mesos
HAPROXY_0_PATH=/auth
HAPROXY_1_PATH=/

忽略1_VHOST和1_PATH

2 个答案:

答案 0 :(得分:3)

你在寻找的逻辑在MLB中并不存在。这听起来像你想要的东西:

if (vhostA) use backend
else if (vhostB && pathB) use backend

完成上述代码的诀窍。如果查看生成的配置,您应该在HTTP和HTTPS的前端看到一组ACL。要摆脱无关配置,请将配置为一个虚拟主机并切换到更简单的HAPROXY_HTTP_FRONTEND_ACL。我们需要覆盖默认值,如下所示:

{
  "labels": {
    "HAPROXY_0_HTTP_FRONTEND_ACL"="  acl path_is_auth path_beg /auth\n  acl host_is_front_dev hdr(host) -i front-dev.marathon.ice.mesos\n  acl host_is_auth_dev hdr(host) -i auth-dev.marathon.ice.mesos\n  use_backend {backend} if host_is_auth_dev or host_is_front_dev path_is_auth\n"
  }
}

应该这样做。使用curl marathon-lb.marathon.mesos:9090/_haproxy_getconfig检查MLB生成的HAProxy配置。

如果您正在使用HTTPS,您还需要更新等效的HTTPS前端ACL。 Look here for a full list of the templates

答案 1 :(得分:2)

请记住,标签中的function convertToIntegers(lst) { //lst.split(' '); var lst_array = lst.split(' '); var len = lst_array .length; var count = 0; while (count < len) { lst_array[count] = parseInt(lst_array[count]); count++} } // //for loop code // //for(i=0;i<lst_array.length;i++){ // lst_arry[i] = parseInt(lst_array[i]); //} 索引是指服务本身的{n}索引。

因此,要使单独的VHOST标签起作用,您必须为服务创建一个额外的端口映射和端口定义(总共两组)。

例如

servicePort

"portMappings": [
    {
      "containerPort": 80,
      "hostPort": 0,
      "servicePort": 10010,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "containerPort": 80,
      "hostPort": 0,
      "servicePort": 10011,
      "protocol": "tcp",
      "labels": {}
    }
  ],

然后,您可以按照预期的方式将标签添加到服务中

"portDefinitions": [
    {
      "port": 10010,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10011,
      "protocol": "tcp",
      "labels": {}
    }
]

... HAPROXY_0_VHOST=front-dev.marathon.ice.mesos HAPROXY_0_PATH=/auth HAPROXY_0_HTTP_BACKEND_PROXYPASS_PATH=/auth HAPROXY_1_VHOST=auth-dev.marathon.ice.mesos 标签不是必需的; - )

如果您使用的是HAPROXY_1_PATH=/标签,则肯定需要设置一个额外的标签HAPROXY_{n}_PATH,以便将路径(在我们的示例中为HAPROXY_{n}_HTTP_BACKEND_PROXYPASS_PATH)映射到根级别您的应用(在我们的示例中为/auth

当然,请检查

上的HA-Proxy配置
/

正如Brenden Mathews所说; - )