多域不同路径马拉松 lb
Multiple domains differen paths marathon lb
我想在两个不同路径的域上访问相同的服务。
配置马拉松 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 被忽略
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.
请记住,标签中的 {n}
索引是指服务本身的 servicePort
索引。
因此,要使单独的 VHOST 标签起作用,您必须为服务创建额外的端口映射和端口定义(总共两套)。
例如
"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 配置
curl marathon-lb.marathon.mesos:9090/_haproxy_getconfig
如Brenden Mathews所说;-)
我想在两个不同路径的域上访问相同的服务。 配置马拉松 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 被忽略
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
.
如果您使用的是 HTTPS,则还需要更新等效的 HTTPS 前端 ACL。 Look here for a full list of the templates.
请记住,标签中的 {n}
索引是指服务本身的 servicePort
索引。
因此,要使单独的 VHOST 标签起作用,您必须为服务创建额外的端口映射和端口定义(总共两套)。
例如
"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 配置curl marathon-lb.marathon.mesos:9090/_haproxy_getconfig
如Brenden Mathews所说;-)