<p dir="ltr">>It seems to me that the existence of the multiprovider extension is an important point for this discussion.  Multiprovider, as I understand it, allows describing a network composed of multiple L2 segments with implicit east-west routing between them.</p>
<p dir="ltr">Not quite. Multiprovider is to describe different L2 segments that are all connected together via some kind of translator (e.g. l2 gateway) that ensures they are all part of the same broadcast domain. It doesn't fit with what we are looking to achieve because all of the segments are supposed to be part of the same broadcast domain so there is only one DHCP instance for all segments, subnets are shared between all of them, a router only attaches to one, etc.</p>
<p dir="ltr">>But I was suggesting that there might be some scenarios where routing<br>
happened without a corresponding router object, and in fact it appears<br>
that this is already the case: between the segments of a multiprovider<br>
network.</p>
<p dir="ltr">There isn't routing between different subnets for multiprovider networks. A multiprovider network is just an l2 broadcast domain realized on multiple encapsulation mediums.<br></p>
<p dir="ltr">>I think Ian's posts have now clarified this.  The current order of<br>
events is:<br>
>- Neutron creates an unbound port, associated with a network, and<br>
allocates an IP address for it.<br>
>- Nova chooses a host for the new VM.<br>
>- The port is bound and plugged on that host.</p>
<p dir="ltr">This is only the case if someone passes a port UUID into Nova to use. If Nova creates the port itself, it will wait until it's scheduled to a compute node so the port creation request should already have the host_id field set.</p>
<p dir="ltr">Supporting the case a pre-created port and migration will be the issue. We would essentially need to allow ports to be re-assigned to different networks to handle these scenarios.</p>
<p dir="ltr">Cheers,<br>
Kevin Benton</p>
<div class="gmail_quot<blockquote class=" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 21/07/15 15:45, Salvatore Orlando wrote:<br>
> On 21 July 2015 at 14:21, Neil Jerram <<a href="mailto:Neil.Jerram@metaswitch.com">Neil.Jerram@metaswitch.com</a><br>
> <mailto:<a href="mailto:Neil.Jerram@metaswitch.com">Neil.Jerram@metaswitch.com</a>>> wrote:<br>
><br>
><br>
>     You've probably seen Robert Kukura's comment on the related bug at<br>
>     <a href="https://bugs.launchpad.net/neutron/+bug/1458890/comments/30" rel="noreferrer" target="_blank">https://bugs.launchpad.net/neutron/+bug/1458890/comments/30</a>, and there<br>
>     is a useful detailed description of how the multiprovider extension<br>
>     works at<br>
>     <a href="https://bugs.launchpad.net/openstack-api-site/+bug/1242019/comments/3" rel="noreferrer" target="_blank">https://bugs.launchpad.net/openstack-api-site/+bug/1242019/comments/3</a>.<br>
>     I believe it is correct to say that using multiprovider would be an<br>
>     effective substitute for using multiple backing networks with<br>
>     different<br>
>     {network_type, physical_network, segmentation_id}, and that logically<br>
>     multiprovider is aiming to describe the same thing as this email<br>
>     thread<br>
>     is, i.e. non-overlay mapping onto a physical network composed of<br>
>     multiple segments.<br>
><br>
><br>
>     However, I believe multiprovider does not (per se) address the IP<br>
>     addressing requirement(s) of the multi-segment scenario.<br>
><br>
><br>
> Indeed it does not. The multiprovider extension simply indicates that<br>
> a network can be built using different L2 segments.<br>
> It is then up to the operator to ensure that these segments are<br>
> correct, and it's up to whatever is running in the backend to ensure<br>
> that instances on the various segments can communicate each other.<br>
<br>
It seems to me that the existence of the multiprovider extension is an<br>
important point for this discussion.  Multiprovider, as I understand it,<br>
allows describing a network composed of multiple L2 segments with<br>
implicit east-west routing between them.  Which is a large part<br>
(although not all) of the requirement that the current discussion is<br>
trying to meet.  Given that multiprovider already exists - and assuming<br>
that it is generally accepted and approved of - surely we should not add<br>
a competing model for the same thing, but should instead look at adding<br>
any additional features to multiprovider that are needed to meet the<br>
complete set of requirements?<br>
<br>
><br>
> I believe the ask here is for Neutron to provide this capability (the<br>
> neutron reference control plane currently doesn't).<br>
<br>
What exactly do you mean here?  I don't think the operators are asking<br>
for a software implementation of the implicit east-west routing, for<br>
example, because they already have physical kit that does that.<br>
(Although perhaps that kit might need some kind of instruction.)  For<br>
the DHCP function (as I think you've written elsewhere) all that's<br>
needed is to run a DHCP agent in each segment.<br>
<br>
I don't know if the operators were aware of multiprovider - AFAIK, it<br>
wasn't mentioned as a possible ingredient for this work, before Robert<br>
Kukura's comment cited above - but if they were, I think they might just<br>
be asking for the IP addressing points on top of that; both<br>
segment-based and mobile.<br>
<br>
<br>
> It is not yet entirely clear to me whether there's a real need of<br>
> changing the logical model, but IP addressing implications might be a<br>
> reason, as pointed out by Neil.<br>
><br>
><br>
><br>
>     ><br>
>     > This proposal offers a clear separation between the statically bound<br>
>     > and the mobile address blocks by associating the former with the<br>
>     > backing networks and the latter with the front network.  The mobile<br>
>     > addresses are modeled just like floating IPs are today but are<br>
>     > implemented by some plugin code (possibly without NAT).<br>
><br>
>     Couldn't the mobile addresses be _exactly_ like floating IPs already<br>
>     are?  Why is anything different from floating IPs needed here?<br>
><br>
>     ><br>
>     > This proposal also provides some advantages for integrating dynamic<br>
>     > routing.  Since each backing network will, by necessity, have a<br>
>     > corresponding router in the infrastructure, the relationship between<br>
>     > dynamic routing speaker, router, and network is clear in the model:<br>
>     > network <-> speaker <-> router.<br>
><br>
><br>
> Ok. But how that changes because of backing networks? I believe the<br>
> same relationship holds true for every network, or am I wrong?<br>
<br>
Even if not for every network, it's presumably also an interesting<br>
question for multiprovider networks.  (And so there may already be an<br>
answer!)<br>
<br>
><br>
><br>
><br>
>     I'm not sure exactly what you mean here by 'dynamic routing', but I<br>
>     think this touches on a key point: can IP routing happen anywhere in a<br>
>     Neutron network, without being explicitly represented by a router<br>
>     object<br>
>     in the model?<br>
><br>
>     I think the answer to that should be yes.<br>
><br>
><br>
> But this would also mean that we should consider doing without the<br>
> very concept of router in Neutron.<br>
> If we look at the scenarios we're describing here, I'd agree with you,<br>
> but unfortunately Neutron is required to serve a wide variety of<br>
> scenarios.<br>
<br>
I didn't mean that there should _never_ be explicit router objects in<br>
Neutron.  Clearly those already exist, for good reasons, and should<br>
continue to serve their scenarios.<br>
<br>
But I was suggesting that there might be some scenarios where routing<br>
happened without a corresponding router object, and in fact it appears<br>
that this is already the case: between the segments of a multiprovider<br>
network.  (Note that the API/data model documentation should still make<br>
it clear in such cases that the routing behavior is expected.)<br>
<br>
><br>
><br>
>     Right.  A key requirement, for this to be possible, is that Nova's<br>
>     host<br>
>     selection happens before the IPAM system is asked to allocate an IP<br>
>     address.  I have an action to investigate that, but if anyone<br>
>     happens to<br>
>     know already, please do say.<br>
><br>
><br>
> I am 99.99% sure this is not possible at the moment unless something<br>
> is done to make nova scheduler network aware.<br>
> Also, this will add a point of coupling between the instance boot and<br>
> network provisioning processes, which are independent at the moment.<br>
<br>
I think Ian's posts have now clarified this.  The current order of<br>
events is:<br>
<br>
- Neutron creates an unbound port, associated with a network, and<br>
allocates an IP address for it.<br>
- Nova chooses a host for the new VM.<br>
- The port is bound and plugged on that host.<br>
<br>
Therefore we at least need an enhancement to defer the IP address<br>
allocation until later than it is at the moment.<br>
<br>
In addition, it seems everyone agrees that the Nova scheduler should<br>
eventually be network aware; but perhaps quite a lot can be achieved in<br>
a first phase without that.<br>
<br>
><br>
><br>
>     ><br>
>     > 1. This alternate model offers no way to distinguish the two<br>
>     types of<br>
>     > address blocks.<br>
><br>
>     Agreed.  But I wonder if normal floating IPs can be used for the<br>
>     mobile<br>
>     IP addresses (as also suggested above).<br>
><br>
><br>
> I get the concept, but it's not really a floating IP in neutron terms,<br>
> as that implies SNAT/DNAT.<br>
> Also, from what I gather it's not about single mobile addresses, but<br>
> we're talking about entire subnets that can be moved around.<br>
<br>
Ah, I see now.  If an IP address from a mobile block is used, that's the<br>
fixed IP that the VM sees.  Agree that that's different from a floating<br>
IP, then.<br>
<br>
><br>
><br>
><br>
>     > 2. We don't have the benefit of modeling the segments with<br>
>     Neutron networks.<br>
><br>
>     Agreed, but it appears that multiprovider has already taken a<br>
>     different<br>
>     view here, and already provides the ability for a network to map to<br>
>     multiple {network_type, physical_network, segmentation_id} tuples.<br>
><br>
><br>
> Modelling segments as logical networks is not necessarily a benefit in<br>
> my opinion;<br>
> it's more a convenience. For instance the reference control plane<br>
> might implement provider networks in a way such that:<br>
> 1) a "ghost router" is created in the l3 agent to ensure E-W traffic<br>
> across all segments (the router is "ghost" because it's not exposed as<br>
> neutron logical router<br>
> 2) a distinct dnsmasq instance is started on every segment of the<br>
> network to ensure DHCP functionality<br>
> 3) metadata services can be provided through the ghost router rather<br>
> than using isolated metadata<br>
<br>
Agree with this detail, but ...<br>
<br>
><br>
> I think this alternative is worth exploring anyway.<br>
<br>
... not sure what you're suggesting to explore.  Do you mean explore<br>
meeting the requirement with a multiprovider network, instead of with<br>
the front and backing networks proposal?<br>
<br>
Regards,<br>
    Neil<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>
</div>