We’ve been using Qubit’s Bamboo for the last few months without too many 
issues, though we had to heavily customize the haproxy config template to 
behave the way we wanted.  I’ve also heard good things about 
https://github.com/hashicorp/consul-template which seems more powerful and 
flexible, but does require also running consul.

From: Shafay Latif [mailto:[email protected]]
Sent: Wednesday, August 05, 2015 12:26 PM
To: [email protected]
Subject: Re: Mesos-DNS host based HTTP-redirection from slave to container

But this nginx reverse proxy for docker only scales to one host. Can someone 
confirm if it has worked for multiple slaves?

What is the most common engine everyone uses for load balancing an app with 
multiple tasks/docker containers?

Shafay Latif

On Aug 3, 2015, at 9:44 AM, Itamar Ostricher 
<[email protected]<mailto:[email protected]>> wrote:
Thanks!
I also found this automated nginx reverse proxy for docker - 
http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/
Looks like a very similar process, that takes advantage of the docker events 
API.
I think I was able to get it working.
Ryan, how does this approach compares to bamboo?
Thanks a lot!

On Sun, Aug 2, 2015 at 1:21 PM Ryan Thomas 
<[email protected]<mailto:[email protected]>> wrote:
If you are going to be pulling data down yourself it would be better to do it 
from marathon, than mesos-dns as you will have additional data about the tasks 
available.

On 2 August 2015 at 11:12, tommy xiao 
<[email protected]<mailto:[email protected]>> wrote:
mesos-dns store the app's IP and ports. so you can query the mesos-dns to setup 
a route rule to define the url.

2015-08-02 17:51 GMT+08:00 Ryan Thomas 
<[email protected]<mailto:[email protected]>>:
Yes it appears that mesos-dns does use SRV records - I should really check it 
out :)

On 2 August 2015 at 10:50, Ryan Thomas 
<[email protected]<mailto:[email protected]>> wrote:
Hey Itamar,

Using DNS to redirect to a port will only be possible if you're using SRV 
records (I'm not sure what mesos-dns uses) but this doesn't really matter as it 
won't be looked up by the browser.

For this solution I have a small daemon written in go running on a number of 
hosts (that aren't slaves), this locates the marathon master, and pulls down my 
apps - I tag apps with a "Host" label (something like 
foo.example.com<http://foo.example.com>) and then I create a haproxy config 
file with backends directed by the host header. There's a few more smarts in it 
around only pulling apps with a green healthcheck etc.

This daemon manages the lifecycle of haproxy on the node - it uses a polling 
model, not an event driven one from the marathon event stream.

Another solution that uses the event-stream is this one 
https://github.com/QubitProducts/bamboo - it's been a while since I checked it 
out, but was functional back then.

Hope that helps.

ryan

On 2 August 2015 at 07:10, Itamar Ostricher 
<[email protected]<mailto:[email protected]>> wrote:
I use marathon to launch a nginx-docker-container named "my-app", and set up 
Mesos-DNS, such that "my-app.marathon.mesos" returns the IP of the slave 
running the container (e.g. 10.20.30.40).

Now, "my-app" is running on some dynamically-allocated port (e.g. 31001), but I 
would like http://my-app.marathon.mesos/foo to hit my app at 
http://10.20.30.40:31001/foo

Is there a "best practice" way to achieve this behavior?

I was thinking about a proxy running on each slave, listening on port 80, 
redirecting incoming HTTP requests based on the request host to the correct 
port on localhost. The "correct port" can be determined by querying mesos-dns 
itself.

This sounds like a pretty common use-case, so I wondered if anyone can point me 
at an existing solution for this.

Thanks!
- Itamar.





--
Deshi Xiao
Twitter: xds2000
E-mail: xiaods(AT)gmail.com<http://gmail.com>

Reply via email to