Conversation
|
I wanted to add tests for that scenario, but it seems that OVN isn't tested at all? |
02547c7 to
81589b3
Compare
Signed-off-by: Jakob Mueller <me@jakobm.de> When enabled, each incus node only announces prefixes for the ovn networks that also have their active ovn gateway on that node. Also generally disables pushing ovn prefixes with no uplink to BGP.
81589b3 to
84c181b
Compare
|
OVN is tested but through daily tests run on Jenkins instead. |
|
I wonder if it wouldn't be cleaner to have something like It should also be possible to just do it automatically in some scenarios. For example if the uplink is an Incus managed bridge (like |
|
I could imagine that even if you have a shared L2 uplink network, one could still want to enable that option to have the traffic routed more efficient (directly to the node having the gw). So I would be fine with renaming it, but maybe "independent" wouldn't fit that good in the mentioned setup. |
That's not how this works :) On a shared L2, all Incus servers advertise the EXACT same route over BGP, the next-hop is the virtual router's address on the uplink network so all traffic always flow through the server running that virtual router. The reason for having those prefixes advertised by all servers is redundancy. If something goes wrong with the Incus daemon itself, the traffic will still flow correctly as the other active servers can still advertise it. The only routes that we advertise only from specific servers are those tied to a resource that only exists on that server, specifically instances. That's because we can generally assume that a problem preventing that server from advertising those instance-specific routes may also be affecting said instance and that it probably shouldn't be getting traffic (particularly important in ECMP setups). |
But still, if the OVN Gateway of an OVN network resides at Node B and traffic for a VM (on Node A) in that network comes in over Node A (because advertised on all nodes), The flow is So my point vanished and I think "independent" could be a fitting naming. But as you just mentioned it, the redundancy for the L3-only setup isn't that optimal, as it highly depends on the incus daemon (while the ovn on a node where the incusd crashed still works, so the prefixes aren't announced somewhere else). |
No it's not. Say your uplink is 10.100.100.0/24 and your virtual router for the network got 10.100.100.10 and the network itself is 10.200.0.0/24, every server will then advertise:
Incus never advertises itself as the next hop, it advertises the IP address of the OVN router within the uplink network as the next hop. The router it advertises to sits on that L2 so the traffic correctly goes |
|
|
Or even more clearly: |
|
Ah sorry, you are totally right. |
|
The hard dependency on incusd running for the networking to work made me think about everything again and I came to the conclusion that this wouldn't be a good solution. To remove this dependency I would suggest another change:
This lets OVN directly install the active prefixes of a node into a selected routing table on the host. I already tested this locally in my test setup and can confirm it works, so I will spin up a new PR for that can then this one can probably be closed. |
|
See #3557 |
When enabled, each incus node only announces prefixes for the ovn networks that also have their active ovn gateway on that node.
Also generally disables pushing ovn prefixes with no uplink to BGP (as there is never a valid next-hop).
Why?
We have a setup where our incus nodes do not have a shared L2 connection but we would still want to use OVN networks with uplink.
My plan was to configure the same transit uplink network on each node, but its not connected between the nodes.
Currently all nodes announce all OVN prefixes. However, this requires that the Uplink network is shared between all nodes, which isn't the case in our setup.
This MR adds the option that only the active OVN chassis announces the OVN prefix.
I am also open to other suggestions on how we can solve our problem.
(We are currently using routed NICs, but this doesn't work well with Kubernetes CAPI, etc. as it requires quite complex configuration of the incus instance, and routed NICs can't be supplied by a managed network (see #2702))