我想在具有不同路径的两个域上使用相同的服务。 在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/auth和 http://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
答案 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所说; - )