I realized last night that I had a hole in my understanding of how the
data path between VMs works, with a routed/segmented network. Then
while writing this comment I think I worked out the answer - so now
this is just a request for people to review and check that the
following is correct.
> Example: The typical use case is L2 segments that are restrained to a
> single rack (or some subnet of compute hosts), but are still part of a
> larger L3 network. In this case, the overall Neutron network would
> describe the L3 network, and the network segments would be used to
> describe the L2 segments.
So here is the data path between two VMs that are in in the same L3
network but on different L2 segments (=> different racks or pods):
VM A ---- Host B ----------- router ----------- Host B ---- VM D
10.0.1.2 L2 segment #1 L2 segment #2 10.0.2.2 10.0.1/24 10.0.2/24
My worry last night was: When a data packet is sent from A to D,
doesn't it need to be routed on B - as opposed to being bridged - in
order to know that its next hop is the router?
But actually I suppose routing must happen even before that, on VM A,
and everything will work, with B bridging, if the routes on A look
like:
I realized last night that I had a hole in my understanding of how the
data path between VMs works, with a routed/segmented network. Then
while writing this comment I think I worked out the answer - so now
this is just a request for people to review and check that the
following is correct.
> Example: The typical use case is L2 segments that are restrained to a
> single rack (or some subnet of compute hosts), but are still part of a
> larger L3 network. In this case, the overall Neutron network would
> describe the L3 network, and the network segments would be used to
> describe the L2 segments.
So here is the data path between two VMs that are in in the same L3
network but on different L2 segments (=> different racks or pods):
VM A ---- Host B ----------- router ----------- Host B ---- VM D
10. 0.1/24 10.0.2/24
10.0.1.2 L2 segment #1 L2 segment #2 10.0.2.2
My worry last night was: When a data packet is sent from A to D,
doesn't it need to be routed on B - as opposed to being bridged - in
order to know that its next hop is the router?
But actually I suppose routing must happen even before that, on VM A,
and everything will work, with B bridging, if the routes on A look
like:
10.0.1/24 dev eth0
default via 10.0.1.1
Is that all correct? Thanks - Neil