<div dir="ltr">Michael-- I think you're assuming that adding an external subnet ID means that the load balancing service will route requests to out an interface with a route to said external subnet. However, the model we have is actually too simple to convey this information to the load balancing service. This is because while we know the member's IP and a subnet to which the load balancing service should connect to theoretically talk to said IP, we don't have any kind of actual routing information for the IP address (like, say a default route for the subnet).<div><br></div><div>Consider this not far-fetched example: Suppose a tenant wants to add a back-end member which is reachable only over a VPN, the gateway for which lives on a tenant internal subnet. If we had a more feature-rich model to work with here, the tenant could specify the member IP, the subnet containing the VPN gateway and the gateway's IP address. In theory the load balancing service could add local routing rules to make sure that communication to that member happens on the tenant subnet and gets routed to the VPN gateway.</div><div><br></div><div>If we want to support this use case, then we'd probably need to add an optional gateway IP parameter to the member object. (And I'd still be in favor of assuming the subnet_id on the member is optional, and that default routing should be used if not specified.)</div><div><br></div><div>Let me see if I can break down several use cases we could support with this model. Let's assume the member model contains (among other things) the following attributes:</div><div><br></div><div>ip_address (member IP, required)</div><div>subnet_id (member or gateway subnet, optional)</div><div>gateway_ip (VPN or other layer-3 gateway that should be used to access the member_ip. optional)</div><div><br></div><div>Expected behaviors:</div><div><br></div><div>Scenario 1:</div><div>ip_address specified, subnet_id and gateway_ip are None:  Load balancing service assumes member IP address is reachable through default routing. Appropriate for members that are not part of the local cloud that are accessible from the internet.<br></div><div><br></div><div>Scenario 2:</div><div>ip_address and subnet_id specified, gateway_ip is None: Load balancing service assumes it needs an interface on subnet_id to talk directly to the member IP address. Appropriate for members that live on tenant networks. member_ip should exist within the subnet specified by subnet_id. This is the only scenario supported under the current model if we make subnet_id a required field and don't add a gateway_ip.</div><div><br></div><div>Scenario 3:</div><div>ip_address, subnet_id and gateway_ip are all specified:  Load balancing service assumes it needs an interface on subnet_id to talk to the gateway_ip. Load balancing service should add local routing rule (ie. to the host and / or local network namespace context of the load balancing service itself, not necessarily to Neutron or anything) to route any packets destined for member_ip to the gateway_ip. gateway_ip should exist within the subnet specified by subnet_id. Appropriate for members that are on the other side of a VPN links, or reachable via other local routing within a tenant network or local cloud.</div><div><br></div><div>Scenario 4:</div><div>ip_address and gateway_ip are specified, subnet_id is None: This is an invalid configuration.</div><div><br></div><div>So.... what do y'all think of this? Am I smoking crack with how this should work?</div><div><br></div><div>For what it's worth, I think the "member is on the other side of a VPN" scenario is not one our customers are champing at the bit to have, so I'm fine with not supporting that kind of topology if nobody else wants it. I'm still in favor of making subnet_id optional, as this supports both Scenarios 1 and 2 above.</div><div><br></div><div>Stephen</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 19, 2016 at 7:09 PM, Brandon Logan <span dir="ltr"><<a href="mailto:brandon.logan@rackspace.com" target="_blank">brandon.logan@rackspace.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So it really comes down to driver (or driver's appliance)<br>
implementation.  Here's some scenarios to consider:<br>
<br>
1) vip on tenant network, members on tenant network<br>
- if a user wants to add an external IP to this configuration, how do we<br>
handle that?  If the subnet is optional the it just uses the default<br>
routing, then it won't ever get external unless the backend<br>
implementation sets up routing to external from the load balancer.  I<br>
think this is a bad idea because the tenant would probably want these<br>
networks isolated.  But if the backend puts a load balancer on it with<br>
external connectivity, its not as isolated as it was.  So to me, if<br>
subnet is optional the best choice is to do default routing which<br>
*SHOULD* fail on default routing.   This of course is something a tenant<br>
will have to realize.  The good thing about a required subnet_id is that<br>
the tenant has explicitly stated they wanted external connectivity and<br>
the backend is not making assumptions as to whether they want it or<br>
don't.<br>
<br>
2) vip on public network, members on tenant network<br>
- defaults route should be able to route out to external IPs now so if<br>
subnet_id is optional it works.  If subnet_id is required then the<br>
tenant would have to specify the public network again, which is less<br>
than ideal and also has other issues brought up in this thread.<br>
<br>
All other scenario permutations are similar to the above ones so I don't<br>
think i need to go through them.<br>
<br>
Basically, I'm waffling on this and am currently on the optional<br>
subnet_id side but as the builders of octavia, I don't think we should<br>
allow a load balancer external access unless the tenant has in a way<br>
given permission by the configuration they've explicitly set.  Though,<br>
that too should be defined.<br>
<br>
Thanks,<br>
Brandon<br>
<div class="HOEnZb"><div class="h5">On Tue, 2016-01-19 at 12:07 -0700, Doug Wiegley wrote:<br>
> But, by requiring an external subnet, you are assuming that the packets always originate from inside a neutron network. That is not necessarily the case with a physical device.<br>
><br>
> doug<br>
><br>
><br>
> > On Jan 19, 2016, at 11:55 AM, Michael Johnson <<a href="mailto:johnsomor@gmail.com">johnsomor@gmail.com</a>> wrote:<br>
> ><br>
> > I feel that the subnet should be mandatory as there are too many<br>
> > ambiguity issues due to overlapping subnets and multiple routes.<br>
> > In the case of an IP being outside of the tenant networks, the user<br>
> > would specify an external network that has the appropriate routes.  We<br>
> > cannot always assume which tenant network with an external (or VPN)<br>
> > route is the appropriate one to use.<br>
> ><br>
> > Michael<br>
> ><br>
> > On Mon, Jan 18, 2016 at 2:45 PM, Stephen Balukoff <<a href="mailto:sbalukoff@bluebox.net">sbalukoff@bluebox.net</a>> wrote:<br>
> >> Vivek--<br>
> >><br>
> >> "Member" in this case refers to an IP address that (probably) lives on a<br>
> >> tenant back-end network. We can't specify just the IP address when talking<br>
> >> to such an IP since tenant subnets may use overlapping IP ranges (ie. in<br>
> >> this case, subnet is required). In the case of the namespace driver and<br>
> >> Octavia, we use the subnet parameter for all members to determine which<br>
> >> back-end networks the load balancing software needs a port on.<br>
> >><br>
> >> I think the original use case for making subnet optional was the idea that<br>
> >> sometimes a tenant would like to add a "member" IP that is not part of their<br>
> >> tenant networks at all--  this is more than likely an IP address that lives<br>
> >> outside the local cloud. The assumption, then, would be that this IP address<br>
> >> should be reachable through standard routing from wherever the load balancer<br>
> >> happens to live on the network. That is to say, the load balancer will try<br>
> >> to get to such an IP address via its default gateway, unless it has a more<br>
> >> specific route.<br>
> >><br>
> >> As far as I'm aware, this use case is still valid and being asked for by<br>
> >> tenants. Therefore, I'm in favor of making member subnet optional.<br>
> >><br>
> >> Stephen<br>
> >><br>
> >> On Mon, Jan 18, 2016 at 11:14 AM, Jain, Vivek <<a href="mailto:VIVEKJAIN@ebay.com">VIVEKJAIN@ebay.com</a>> wrote:<br>
> >>><br>
> >>> If member port (IP address) is allocated by neutron, then why do we need<br>
> >>> to specify it explicitly? It can be derived by LBaaS driver implicitly.<br>
> >>><br>
> >>> Thanks,<br>
> >>> Vivek<br>
> >>><br>
> >>><br>
> >>><br>
> >>><br>
> >>><br>
> >>><br>
> >>> On 1/17/16, 1:05 AM, "Samuel Bercovici" <SamuelB@Radware.com> wrote:<br>
> >>><br>
> >>>> Btw.<br>
> >>>><br>
> >>>> I am still in favor on associating the subnets to the LB and then not<br>
> >>>> specify them per node at all.<br>
> >>>><br>
> >>>> -Sam.<br>
> >>>><br>
> >>>><br>
> >>>> -----Original Message-----<br>
> >>>> From: Samuel Bercovici [mailto:<a href="mailto:SamuelB@Radware.com">SamuelB@Radware.com</a>]<br>
> >>>> Sent: Sunday, January 17, 2016 10:14 AM<br>
> >>>> To: OpenStack Development Mailing List (not for usage questions)<br>
> >>>> Subject: Re: [openstack-dev] [Neutron][LBaaS][Octavia] Should subnet be<br>
> >>>> optional on member create?<br>
> >>>><br>
> >>>> +1<br>
> >>>> Subnet should be mandatory<br>
> >>>><br>
> >>>> The only thing this makes supporting load balancing servers which are not<br>
> >>>> running in the cloud more challenging to support.<br>
> >>>> But I do not see this as a huge user story (lb in cloud load balancing<br>
> >>>> IPs outside the cloud)<br>
> >>>><br>
> >>>> -Sam.<br>
> >>>><br>
> >>>> -----Original Message-----<br>
> >>>> From: Brandon Logan [mailto:<a href="mailto:brandon.logan@RACKSPACE.COM">brandon.logan@RACKSPACE.COM</a>]<br>
> >>>> Sent: Saturday, January 16, 2016 6:56 AM<br>
> >>>> To: <a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a><br>
> >>>> Subject: [openstack-dev] [Neutron][LBaaS][Octavia] Should subnet be<br>
> >>>> optional on member create?<br>
> >>>><br>
> >>>> I filed a bug [1] a while ago that subnet_id should be an optional<br>
> >>>> parameter for member creation.  Currently it is required.  Review [2] is<br>
> >>>> makes it optional.<br>
> >>>><br>
> >>>> The original thinking was that if the load balancer is ever connected to<br>
> >>>> that same subnet, be it by another member on that subnet or the vip on that<br>
> >>>> subnet, then the user does not need to specify the subnet for new member if<br>
> >>>> that new member is on one of those subnets.<br>
> >>>><br>
> >>>> At the midcycle we discussed it and we had an informal agreement that it<br>
> >>>> required too many assumptions on the part of the end user, neutron lbaas,<br>
> >>>> and driver.<br>
> >>>><br>
> >>>> If anyone wants to voice their opinion on this matter, do so on the bug<br>
> >>>> report, review, or in response to this thread.  Otherwise, it'll probably be<br>
> >>>> abandoned and not done at some point.<br>
> >>>><br>
> >>>> Thanks,<br>
> >>>> Brandon<br>
> >>>><br>
> >>>> [1] <a href="https://bugs.launchpad.net/neutron/+bug/1426248" rel="noreferrer" target="_blank">https://bugs.launchpad.net/neutron/+bug/1426248</a><br>
> >>>> [2] <a href="https://review.openstack.org/#/c/267935/" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/267935/</a><br>
> >>><br>
> >>>>> __________________________________________________________________________<br>
> >>>> OpenStack Development Mailing List (not for usage questions)<br>
> >>>> Unsubscribe:<br>
> >>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> >>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> >>>><br>
> >>><br>
> >>>>> __________________________________________________________________________<br>
> >>>> OpenStack Development Mailing List (not for usage questions)<br>
> >>>> Unsubscribe:<br>
> >>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> >>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> >>>><br>
> >>><br>
> >>>>> __________________________________________________________________________<br>
> >>>> OpenStack Development Mailing List (not for usage questions)<br>
> >>>> Unsubscribe:<br>
> >>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> >>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> >>> __________________________________________________________________________<br>
> >>> OpenStack Development Mailing List (not for usage questions)<br>
> >>> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> >>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> >><br>
> >><br>
> >><br>
> >><br>
> >> --<br>
> >> Stephen Balukoff<br>
> >> Principal Technologist<br>
> >> Blue Box, An IBM Company<br>
> >> <a href="http://www.blueboxcloud.com" rel="noreferrer" target="_blank">www.blueboxcloud.com</a><br>
> >> <a href="mailto:sbalukoff@blueboxcloud.com">sbalukoff@blueboxcloud.com</a><br>
> >> <a href="tel:206-607-0660%20x807" value="+12066070660">206-607-0660 x807</a><br>
> >><br>
> >> __________________________________________________________________________<br>
> >> OpenStack Development Mailing List (not for usage questions)<br>
> >> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> >> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> >><br>
> ><br>
> > __________________________________________________________________________<br>
> > OpenStack Development Mailing List (not for usage questions)<br>
> > Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
><br>
><br>
> __________________________________________________________________________<br>
> OpenStack Development Mailing List (not for usage questions)<br>
> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span></span><div>Stephen Balukoff</div><div>Principal Technologist</div><div>Blue Box, An IBM Company</div><div><a href="http://www.blueboxcloud.com" target="_blank">www.blueboxcloud.com</a></div><div><a href="mailto:sbalukoff@blueboxcloud.com" target="_blank">sbalukoff@blueboxcloud.com</a></div><div>206-607-0660 x807</div></div></div></div></div></div>
</div>