<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p
{mso-style-priority:99;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">No, I mean with VIP the original meaning more akin to a Floating IP…<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">German<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Stephen Balukoff [mailto:sbalukoff@bluebox.net]
<br>
<b>Sent:</b> Monday, August 18, 2014 2:43 PM<br>
<b>To:</b> OpenStack Development Mailing List (not for usage questions)<br>
<b>Subject:</b> Re: [openstack-dev] [Octavia] Object Model and DB Structure<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">German--<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">By 'VIP' do you mean something roughly equivalent to 'loadbalancer' in the Neutron LBaaS object model (as we've discussed in the past)? That is to say, is this thingy a parent object to the Listener in the hierarchy? If so, then what we're
describing definitely accommodates that.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">(And yes, we commonly see deployments with listeners on port 80 and port 443 on the same virtual IP address.)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Stephen<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Mon, Aug 18, 2014 at 2:16 PM, Eichberger, German <<a href="mailto:german.eichberger@hp.com" target="_blank">german.eichberger@hp.com</a>> wrote:<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Steven,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">In my example we don’t share anything except the VIP
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> So my motivation is if we can have two listeners share the same VIP. Hope that makes sense.
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">German</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Stephen Balukoff [mailto:<a href="mailto:sbalukoff@bluebox.net" target="_blank">sbalukoff@bluebox.net</a>]
<br>
<b>Sent:</b> Monday, August 18, 2014 1:39 PM<br>
<b>To:</b> OpenStack Development Mailing List (not for usage questions)</span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
<b>Subject:</b> Re: [openstack-dev] [Octavia] Object Model and DB Structure<o:p></o:p></p>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Yes, I'm advocating keeping each listener in a separate haproxy configuration (and separate running instance). This includes the example I mentioned: One that listens on port 80
for HTTP requests and redirects everything to the HTTPS listener on port 443. (The port 80 listener is a simple configuration with no pool or members, and it doesn't take much to have it run on the same host as the port 443 listener.)<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I've not explored haproxy's new redirect scheme capabilities in 1.5 yet. Though I doubt it would have a significant impact on the operational model where each listener is a separate
haproxy configuration and instance.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">German: Are you saying that the port 80 listener and port 443 listener would have the exact same back-end configuration? If so, then what we're discussing here with no sharing of
child entities, would mean that the customer has to set up and manage these duplicate pools and members. If that's not acceptable, now is the time to register that opinion, eh!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Stephen<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On Mon, Aug 18, 2014 at 11:37 AM, Brandon Logan <<a href="mailto:brandon.logan@rackspace.com" target="_blank">brandon.logan@rackspace.com</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi German,<br>
I don't think it is a requirement that those two frontend sections (or<br>
listen sections) have to live in the same config. I thought if they<br>
were listening on the same IP but different ports it could be in two<br>
different haproxy instances. I could be wrong though.<br>
<br>
Thanks,<br>
Brandon<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><br>
On Mon, 2014-08-18 at 17:21 +0000, Eichberger, German wrote:<br>
> Hi,<br>
><br>
> My 2 cents for the multiple listeners per load balancer discussion: We have customers who like to have a listener on port 80 and one on port 443 on the same VIP (we had to patch libra to allow two "listeners" in one single haproxy) - so having that would
be great.<br>
><br>
> I like the proposed status :-)<br>
><br>
> Thanks,<br>
> German<br>
><br>
> -----Original Message-----<br>
> From: Brandon Logan [mailto:<a href="mailto:brandon.logan@RACKSPACE.COM" target="_blank">brandon.logan@RACKSPACE.COM</a>]<br>
> Sent: Sunday, August 17, 2014 8:57 PM<br>
> To: <a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a><br>
> Subject: Re: [openstack-dev] [Octavia] Object Model and DB Structure<br>
><br>
> Oh hello again!<br>
><br>
> You know the drill!<br>
><br>
> On Sat, 2014-08-16 at 11:42 -0700, Stephen Balukoff wrote:<br>
> > Hi Brandon,<br>
> ><br>
> ><br>
> > Responses in-line:<br>
> ><br>
> > On Fri, Aug 15, 2014 at 9:43 PM, Brandon Logan<br>
> > <<a href="mailto:brandon.logan@rackspace.com" target="_blank">brandon.logan@rackspace.com</a>> wrote:<br>
> > Comments in-line<br>
> ><br>
> > On Fri, 2014-08-15 at 17:18 -0700, Stephen Balukoff wrote:<br>
> > > Hi folks,<br>
> > ><br>
> > ><br>
> > > I'm OK with going with no shareable child entities<br>
> > (Listeners, Pools,<br>
> > > Members, TLS-related objects, L7-related objects, etc.).<br>
> > This will<br>
> > > simplify a lot of things (like status reporting), and we can<br>
> > probably<br>
> > > safely work under the assumption that any user who has a use<br>
> > case in<br>
> > > which a shared entity is useful is probably also technically<br>
> > savvy<br>
> > > enough to not only be able to manage consistency problems<br>
> > themselves,<br>
> > > but is also likely to want to have that level of control.<br>
> > ><br>
> > ><br>
> > > Also, an haproxy instance should map to a single listener.<br>
> > This makes<br>
> > > management of the configuration template simpler and the<br>
> > behavior of a<br>
> > > single haproxy instance more predictable. Also, when it<br>
> > comes to<br>
> > > configuration updates (as will happen, say, when a new<br>
> > member gets<br>
> > > added to a pool), it's less risky and error prone to restart<br>
> > the<br>
> > > haproxy instance for just the affected listener, and not for<br>
> > all<br>
> > > listeners on the Octavia VM. The only down-sides I see are<br>
> > that we<br>
> > > consume slightly more memory, we don't have the advantage of<br>
> > a shared<br>
> > > SSL session cache (probably doesn't matter for 99.99% of<br>
> > sites using<br>
> > > TLS anyway), and certain types of persistence wouldn't carry<br>
> > over<br>
> > > between different listeners if they're implemented poorly by<br>
> > the<br>
> > > user. :/ (In other words, negligible down-sides to this.)<br>
> ><br>
> ><br>
> > This is fine by me for now, but I think this might be<br>
> > something we can<br>
> > revisit later after we have the advantage of hindsight. Maybe<br>
> > a<br>
> > configurable option.<br>
> ><br>
> ><br>
> > Sounds good, as long as we agree on a path forward. In the mean time,<br>
> > is there anything I'm missing which would be a significant advantage<br>
> > of having multiple Listeners configured in a single haproxy instance?<br>
> > (Or rather, where a single haproxy instance maps to a loadbalancer<br>
> > object?)<br>
><br>
> No particular reason as of now. Just feel like that could be something that could hinder a particular feature or even performance in the future. It's not rooted in any fact or past experience.<br>
><br>
> ><br>
> > I have no problem with this. However, one thing I often do<br>
> > think about<br>
> > is that it's not really ever going to be load balancing<br>
> > anything with<br>
> > just a load balancer and listener. It has to have a pool and<br>
> > members as<br>
> > well. So having ACTIVE on the load balancer and listener, and<br>
> > still not<br>
> > really load balancing anything is a bit odd. Which is why I'm<br>
> > in favor<br>
> > of only doing creates by specifying the entire tree in one<br>
> > call<br>
> > (loadbalancer->listeners->pool->members). Feel free to<br>
> > disagree with me<br>
> > on this because I know this not something everyone likes. I'm<br>
> > sure I am<br>
> > forgetting something that makes this a hard thing to do. But<br>
> > if this<br>
> > were the case, then I think only having the provisioning<br>
> > status on the<br>
> > load balancer makes sense again. The reason I am advocating<br>
> > for the<br>
> > provisioning status on the load balancer is because it still<br>
> > simpler,<br>
> > and only one place to look to see if everything were<br>
> > successful or if<br>
> > there was an issue.<br>
> ><br>
> ><br>
> > Actually, there is one case where it makes sense to have an ACTIVE<br>
> > Listener when that listener has no pools or members: Probably the 2nd<br>
> > or 3rd most common type of "load balancing" service we deploy is just<br>
> > an HTTP listener on port 80 that redirects all requests to the HTTPS<br>
> > listener on port 443. While this can be done using a (small) pool of<br>
> > back-end servers responding to the port 80 requests, there's really no<br>
> > point in not having the haproxy instance do this redirect directly for<br>
> > sites that want all access to happen over SSL. (For users that want<br>
> > them we also insert HSTS headers when we do this... but I digress. ;)<br>
> > )<br>
> ><br>
> ><br>
> > Anyway, my point is that there is a common production use case that<br>
> > calls for a listener with no pools or members.<br>
><br>
> Yeah we do HTTPS redirect too (or HTTP redirect as I would call it...I could digress myself). I don't think its common for our customers, but it obviously should still be supported. Also, wouldn't that break the only one listener per instance rule? Also
also, I think haproxy 1.5 has "redirect scheme" option that might do away with the extra frontend section. I could be wrong though.<br>
><br>
> ><br>
> ><br>
> > Again though, what you've proposed I am entirely fine with<br>
> > because it<br>
> > works great with having to create a load balancer first, then<br>
> > listener,<br>
> > and so forth. It would also work fine with a single create<br>
> > call as<br>
> > well.<br>
> ><br>
> ><br>
> > We should probably create more formal API documentation, eh. :) (Let<br>
> > me pull up my drafts from 5 months ago...)<br>
><br>
> What I'm hoping the API will look like will be different than those drafts, similar though. So they're probably a good starting point.<br>
> Then again the neutron lbaas api google doc is probably a good one too.<br>
><br>
> ><br>
> > ><br>
> > > I don't think that these kinds of status are useful /<br>
> > appropriate for<br>
> > > Pool, Member, Healthmonitor, TLS certificate id, or L7<br>
> > Policy / Rule<br>
> > > objects, as ultimately this boils down to configuration<br>
> > lines in an<br>
> > > haproxy config somewhere, and really the Listener status is<br>
> > what will<br>
> > > be affected when things are changed.<br>
> ><br>
> ><br>
> > Total agreement on this.<br>
> > ><br>
> > > I'm basically in agreement with Brandon on his points with<br>
> > operational<br>
> > > status, though I would like to see these broken out into<br>
> > their various<br>
> > > meanings for the different object types. I also think some<br>
> > object<br>
> > > types won't need an operational status (eg. L7 Policies,<br>
> > > healthmonitors, etc.) since these essentially boil down to<br>
> > lines in an<br>
> > > haproxy configuration file.<br>
> ><br>
> ><br>
> > Yeah I was thinking could be more descriptive status names for<br>
> > the load<br>
> > balancer and listener statuses. I was thinking load balancer<br>
> > could have<br>
> > PENDING_VIP_CREATE/UPDATE/DELETE, but then that'd be painting<br>
> > us into a<br>
> > corner. More general is needed. With that in mind, the<br>
> > generic<br>
> > PENDING_CREATE/UPDATE/DELETE is adequate enough as long as the<br>
> > docs<br>
> > explain what they mean for each object clearly.<br>
> ><br>
> ><br>
> > Right. Let's get this documented. :) Or rather-- let's get drafts of<br>
> > this documentation going in gerrit so people can give specific<br>
> > feedback. (I'm happy to work on this, so long as I'm not a blocker on<br>
> > anything else-- I want to make sure anyone who wants to put time into<br>
> > the Octavia project knows how they can be useful, eh. It's a major pet<br>
> > peeve of mine to find out after the fact that somebody was waiting on<br>
> > something for me, and that this was a blocker for them being<br>
> > productive.)<br>
><br>
> I like your documentation skills and attention to detail. If you don't mind doing it, unless someone else wants something to do.<br>
><br>
> ><br>
> > Stephen<br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > Stephen Balukoff<br>
> > Blue Box Group, LLC<br>
> > <a href="tel:%28800%29613-4305%20x807" target="_blank">(800)613-4305 x807</a><br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > <a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
><br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
><br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">--
<br>
Stephen Balukoff <br>
Blue Box Group, LLC <br>
<a href="tel:%28800%29613-4305%20x807" target="_blank">(800)613-4305 x807</a> <o:p>
</o:p></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <br>
Stephen Balukoff <br>
Blue Box Group, LLC <br>
(800)613-4305 x807 <o:p></o:p></p>
</div>
</div>
</body>
</html>