Multiple backend support for L3 routers in ML2/OVN

This spec proposes to support multiple back-ends for routers in the
ML2/OVN mechanism driver

Partial-Bug: #2020823

Change-Id: Ic7f84d8252ef5197b4d1851f7296e237bf581503
This commit is contained in:
Miguel Lavalle 2023-06-05 19:09:03 -05:00
parent ec0a0fb2a2
commit 12da15f23f
1 changed files with 118 additions and 0 deletions

View File

@ -0,0 +1,118 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
====================================================================
Flavor/service provider support for routers in the ML2/OVN L3 plugin
====================================================================
https://bugs.launchpad.net/neutron/+bug/2020823
In `Multiple L3 backends`_, functionality was added to the ML2/OVS mechanism
driver to support L3 routers implemented by different back-end drivers.
Recently, OpenStack deployers in the Telco / 5G industry have expressed a
strong interest to have the same support with the ML2/OVN mechanism driver.
This specification proposes to implement that functionality.
Problem Description
===================
Since early in the development of Neutron, the community has recognized the
need to provide frameworks to enable operators and users of a cloud deployment
to configure and select from a set of options different implementations of
services such as VPNs, firewalls, routers, etc. This has led over the years to
proposals and additions to Neutron such as `Neutron/Service Type Framework`_,
`Service Flavor Framework`_ and the aforementioned `Multiple L3 backends`_.
All this is represented in the API by `Networking Flavors Framework`_,
`Service Providers`_ and the `L3 flavors extension`_.
As of the writing of this specification, operators using ML2/OVN cannot take
advantage of all these existing framworks to offer different implementations
(flavors from here on) of routers. As a consequence, Neutron cannot serve a use
case where Telco operators want to provide different grades of vrouters, such
as:
* OVN vrouters for their IT / back-office workloads.
* Specialized vrouters outside OVN for their 5G mobile networks.
* Specialized vrouters outside OVN for their 4G mobile networks.
* Other types of specialized vrouters.
Proposed Change
===============
The proposal is to add to the ML2/OVN L3 plugin the ability to process
different flavors of vrouters. The default flavor will be the native OVN
vrouter.
To achieve this, all the OVN specific functionality in the ML2/OVN L3 plugin
will be refactored to a separate driver. Once this is done, the L3 plugin will
be responsible for performing only the Neutron DB processing steps related to
vrouters and floating IPs, while letting separate drivers to take care of all
the backend processing. Users will configure, load and associate with flavor
names drivers for backends different to OVN. The following diagram illustrates
the proposed scenario:
::
+--------+ +------------+ +------------+ +------+ +------+ +----------------+
| | | | Event | |--->| NBDB |--->| SBDB |--->| OVN Controller |
| | | | Notifications | Driver for | +------+ +------+ +----------------+
| | | |-------------->| flavor OVN |
| | | | | |
| | | | +------------+
| | | |
| | | | +------------+ +-----------+
| | | | Event | |--->| Backend A |
| ReST | Requests | L3 | Notifications | Driver for | +-----------+
| API |--------->| plugin |-------------->| flavor A |
| | | | | |
| | | | +------------+
| | | |
| | | | +------------+ +-----------+
| | | | Event | |--->| Backend B |
| | | | Notifications | Driver for | +-----------+
| | | |-------------->| flavor B |
| | | | | |
+--------+ +------------+ +------------+
| |
| +-------------+ |
| | | |
Updates +------>| Neutron |<------+ Reads
| databse |
| |
+-------------+
Based on this diagram, the following gives more details on the proposed
implementation:
* Users will specify the required flavor when creating vrouters. The OVN flavor
will be the default and will be denoted by specifying no flavor in the create
request. The following command illustrates how to create a non-OVN flavor
router:
* The OVN driver will be loaded automatically by a drivers controller that will
be implemented by the work related to this specification
* The following commands illustrate an example cloud administrator workflow to
to configure a router flavor:
* Maintenace job
* What is meant by backend
* Drivers listen to events and they decide whether the request is for their
flavor. The required events already exist.
* Handling of user defined drivers backends is out of scope
* Backend may mean DB and agents to setup the data plane
References
==========
Provided inline in the text above.
.. _Multiple L3 backends: https://review.opendev.org/q/topic:bp%252Fmulti-l3-backends
.. _Neutron/Service Type Framework: https://wiki.openstack.org/wiki/Neutron/ServiceTypeFramework
.. _Service Flavor Framework: https://specs.openstack.org/openstack/neutron-specs/specs/liberty/neutron-flavor-framework.html
.. _Networking Flavors Framework: https://docs.openstack.org/api-ref/network/v2/index.html#networking-flavors-framework-v2-0-current-flavor-service-profile
.. _Service Providers: https://docs.openstack.org/api-ref/network/v2/index.html#service-providers
.. _L3 flavors extension: https://docs.openstack.org/api-ref/network/v2/index.html#l3-flavors-extension-l3-flavors