2016-05-25 40 views
1

我想在不同路徑的兩個域名中使用相同的服務。 配置在馬拉松磅多個域名differen路徑馬拉松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被忽略

回答

3

你正在尋找沒有在美國職棒大聯盟相當有邏輯。這聽起來像你想要的東西:

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" 
    } 
} 

應該這樣做。檢查從MLB生成的HAProxy配置curl marathon-lb.marathon.mesos:9090/_haproxy_getconfig

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

2

請記住標籤中的{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-代理配置在

curl marathon-lb.marathon.mesos:9090/_haproxy_getconfig 

正如Brenden Mathews所述;-)