summaryrefslogtreecommitdiffstats
path: root/docs/development/openstack-networking-ovn.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/development/openstack-networking-ovn.rst')
-rw-r--r--docs/development/openstack-networking-ovn.rst400
1 files changed, 400 insertions, 0 deletions
diff --git a/docs/development/openstack-networking-ovn.rst b/docs/development/openstack-networking-ovn.rst
new file mode 100644
index 0000000..9fa3766
--- /dev/null
+++ b/docs/development/openstack-networking-ovn.rst
@@ -0,0 +1,400 @@
+===============
+OVN information
+===============
+
+The original OVN project announcement can be found here:
+
+* http://networkheresy.com/2015/01/13/ovn-bringing-native-virtual-networking-to-ovs/
+
+The OVN architecture is described here:
+
+* http://openvswitch.org/support/dist-docs/ovn-architecture.7.html
+
+Here are two tutorials that help with learning different aspects of OVN:
+
+* http://blog.spinhirne.com/p/blog-series.html#introToOVN
+* http://docs.openvswitch.org/en/latest/tutorials/ovn-sandbox/
+
+There is also an in depth tutorial on using OVN with OpenStack:
+
+* http://docs.openvswitch.org/en/latest/tutorials/ovn-openstack/
+
+OVN DB schemas and other man pages:
+
+* http://openvswitch.org/support/dist-docs/ovn-nb.5.html
+* http://openvswitch.org/support/dist-docs/ovn-sb.5.html
+* http://openvswitch.org/support/dist-docs/ovn-nbctl.8.html
+* http://openvswitch.org/support/dist-docs/ovn-sbctl.8.html
+* http://openvswitch.org/support/dist-docs/ovn-northd.8.html
+* http://openvswitch.org/support/dist-docs/ovn-controller.8.html
+* http://openvswitch.org/support/dist-docs/ovn-controller-vtep.8.html
+
+or find a full list of OVS and OVN man pages here:
+
+* http://docs.openvswitch.org/en/latest/ref/
+
+The openvswitch web page includes a list of presentations, some of which are
+about OVN:
+
+* http://openvswitch.org/support/
+
+Here are some direct links to past OVN presentations:
+
+* `OVN talk at OpenStack Summit in Boston, Spring 2017
+ <https://www.youtube.com/watch?v=sgc7myiX6ts>`_
+* `OVN talk at OpenStack Summit in Barcelona, Fall 2016
+ <https://www.youtube.com/watch?v=q3cJ6ezPnCU>`_
+* `OVN talk at OpenStack Summit in Austin, Spring 2016
+ <https://www.youtube.com/watch?v=okralc7LrZo>`_
+* OVN Project Update at the OpenStack Summit in Tokyo, Fall 2015 -
+ `Slides <http://openvswitch.org/support/slides/OVN_Tokyo.pdf>`__ -
+ `Video <https://www.youtube.com/watch?v=3IrG2xghJjs>`__
+* OVN at OpenStack Summit in Vancouver, Sping 2015 -
+ `Slides <http://openvswitch.org/support/slides/OVN-Vancouver.pdf>`__ -
+ `Video <https://www.youtube.com/watch?v=kEzXTq2fPDg>`__
+* `OVS Conference 2015 <https://www.youtube.com/watch?v=JLGZOYi_Cqc>`_
+
+These blog resources may also help with testing and understanding OVN:
+
+* http://networkop.co.uk/blog/2016/11/27/ovn-part1/
+* http://networkop.co.uk/blog/2016/12/10/ovn-part2/
+* https://blog.russellbryant.net/2016/12/19/comparing-openstack-neutron-ml2ovs-and-ovn-control-plane/
+* https://blog.russellbryant.net/2016/11/11/ovn-logical-flows-and-ovn-trace/
+* https://blog.russellbryant.net/2016/09/29/ovs-2-6-and-the-first-release-of-ovn/
+* http://galsagie.github.io/2015/11/23/ovn-l3-deepdive/
+* http://blog.russellbryant.net/2015/10/22/openstack-security-groups-using-ovn-acls/
+* http://galsagie.github.io/sdn/openstack/ovs/2015/05/30/ovn-deep-dive/
+* http://blog.russellbryant.net/2015/05/14/an-ez-bake-ovn-for-openstack/
+* http://galsagie.github.io/sdn/openstack/ovs/2015/04/26/ovn-containers/
+* http://blog.russellbryant.net/2015/04/21/ovn-and-openstack-status-2015-04-21/
+* http://blog.russellbryant.net/2015/04/08/ovn-and-openstack-integration-development-update/
+
+
+
+Install & Configuration
+=======================
+
+The ``networking-ovn`` repository includes integration with DevStack that
+enables creation of a simple Open Virtual Network (OVN) development and test
+environment. This document discusses what is required for manual installation
+or integration into a production OpenStack deployment tool of conventional
+architectures that include the following types of nodes:
+
+* Controller - Runs OpenStack control plane services such as REST APIs
+ and databases.
+
+* Network - Runs the layer-2, layer-3 (routing), DHCP, and metadata agents
+ for the Networking service. Some agents optional. Usually provides
+ connectivity between provider (public) and project (private) networks
+ via NAT and floating IP addresses.
+
+ .. note::
+
+ Some tools deploy these services on controller nodes.
+
+* Compute - Runs the hypervisor and layer-2 agent for the Networking
+ service.
+
+Packaging
+---------
+
+Open vSwitch (OVS) includes OVN beginning with version 2.5 and considers
+it experimental. The Networking service integration for OVN uses an
+independent package, typically ``networking-ovn``.
+
+Building OVS from source automatically installs OVN. For deployment tools
+using distribution packages, the ``openvswitch-ovn`` package for RHEL/CentOS
+and compatible distributions automatically installs ``openvswitch`` as a
+dependency. Ubuntu/Debian includes ``ovn-central``, ``ovn-host``,
+``ovn-docker``, and ``ovn-common`` packages that pull in the appropriate Open
+vSwitch dependencies as needed.
+
+A ``python-networking-ovn`` RPM may be obtained for Fedora or CentOS from
+the RDO project. A package based on the ``master`` branch of
+``networking-ovn`` can be found at https://trunk.rdoproject.org/.
+
+Fedora and CentOS RPM builds of OVS and OVN from the ``master`` branch of
+``ovs`` can be found in this COPR repository:
+https://copr.fedorainfracloud.org/coprs/leifmadsen/ovs-master/.
+
+Controller nodes
+----------------
+
+Each controller node runs the OVS service (including dependent services such
+as ``ovsdb-server``) and the ``ovn-northd`` service. However, only a single
+instance of the ``ovsdb-server`` and ``ovn-northd`` services can operate in
+a deployment. However, deployment tools can implement active/passive
+high-availability using a management tool that monitors service health
+and automatically starts these services on another node after failure of the
+primary node. See the :ref:`faq` for more information.
+
+#. Install the ``openvswitch-ovn`` and ``networking-ovn`` packages.
+
+#. Start the OVS service. The central OVS service starts the ``ovsdb-server``
+ service that manages OVN databases.
+
+ Using the *systemd* unit:
+
+ .. code-block:: console
+
+ # systemctl start openvswitch
+
+ Using the ``ovs-ctl`` script:
+
+ .. code-block:: console
+
+ # /usr/share/openvswitch/scripts/ovs-ctl start --system-id="random"
+
+#. Configure the ``ovsdb-server`` component. By default, the ``ovsdb-server``
+ service only permits local access to databases via Unix socket. However,
+ OVN services on compute nodes require access to these databases.
+
+ * Permit remote database access.
+
+ .. code-block:: console
+
+ # ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640:IP_ADDRESS
+
+ Replace ``IP_ADDRESS`` with the IP address of the management network
+ interface on the controller node.
+
+ .. note::
+
+ Permit remote access to TCP port 6640 on any host firewall.
+
+#. Start the ``ovn-northd`` service.
+
+ Using the *systemd* unit:
+
+ .. code-block:: console
+
+ # systemctl start ovn-northd
+
+ Using the ``ovn-ctl`` script:
+
+ .. code-block:: console
+
+ # /usr/share/openvswitch/scripts/ovn-ctl start_northd
+
+ Options for *start_northd*:
+
+ .. code-block:: console
+
+ # /usr/share/openvswitch/scripts/ovn-ctl start_northd --help
+ # ...
+ # DB_NB_SOCK="/usr/local/etc/openvswitch/nb_db.sock"
+ # DB_NB_PID="/usr/local/etc/openvswitch/ovnnb_db.pid"
+ # DB_SB_SOCK="usr/local/etc/openvswitch/sb_db.sock"
+ # DB_SB_PID="/usr/local/etc/openvswitch/ovnsb_db.pid"
+ # ...
+
+#. Configure the Networking server component. The Networking service
+ implements OVN as an ML2 driver. Edit the ``/etc/neutron/neutron.conf``
+ file:
+
+ * Enable the ML2 core plug-in.
+
+ .. code-block:: ini
+
+ [DEFAULT]
+ ...
+ core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
+
+ * Enable the OVN layer-3 service.
+
+ .. code-block:: ini
+
+ [DEFAULT]
+ ...
+ service_plugins = networking_ovn.l3.l3_ovn.OVNL3RouterPlugin
+
+#. Configure the ML2 plug-in. Edit the
+ ``/etc/neutron/plugins/ml2/ml2_conf.ini`` file:
+
+ * Configure the OVN mechanism driver, network type drivers, self-service
+ (tenant) network types, and enable the port security extension.
+
+ .. code-block:: ini
+
+ [ml2]
+ ...
+ mechanism_drivers = ovn
+ type_drivers = local,flat,vlan,geneve
+ tenant_network_types = geneve
+ extension_drivers = port_security
+ overlay_ip_version = 4
+
+ .. note::
+
+ To enable VLAN self-service networks, add ``vlan`` to the
+ ``tenant_network_types`` option. The first network type
+ in the list becomes the default self-service network type.
+
+ To use IPv6 for all overlay (tunnel) network endpoints,
+ set the ``overlay_ip_version`` option to ``6``.
+
+ * Configure the Geneve ID range and maximum header size. The IP version
+ overhead (20 bytes for IPv4 (default) or 40 bytes for IPv6) is added
+ to the maximum header size based on the ML2 ``overlay_ip_version``
+ option.
+
+ .. code-block:: ini
+
+ [ml2_type_geneve]
+ ...
+ vni_ranges = 1:65536
+ max_header_size = 38
+
+ .. note::
+
+ The Networking service uses the ``vni_ranges`` option to allocate
+ network segments. However, OVN ignores the actual values. Thus, the ID
+ range only determines the quantity of Geneve networks in the
+ environment. For example, a range of ``5001:6000`` defines a maximum
+ of 1000 Geneve networks.
+
+ * Optionally, enable support for VLAN provider and self-service
+ networks on one or more physical networks. If you specify only
+ the physical network, only administrative (privileged) users can
+ manage VLAN networks. Additionally specifying a VLAN ID range for
+ a physical network enables regular (non-privileged) users to
+ manage VLAN networks. The Networking service allocates the VLAN ID
+ for each self-service network using the VLAN ID range for the
+ physical network.
+
+ .. code-block:: ini
+
+ [ml2_type_vlan]
+ ...
+ network_vlan_ranges = PHYSICAL_NETWORK:MIN_VLAN_ID:MAX_VLAN_ID
+
+ Replace ``PHYSICAL_NETWORK`` with the physical network name and
+ optionally define the minimum and maximum VLAN IDs. Use a comma
+ to separate each physical network.
+
+ For example, to enable support for administrative VLAN networks
+ on the ``physnet1`` network and self-service VLAN networks on
+ the ``physnet2`` network using VLAN IDs 1001 to 2000:
+
+ .. code-block:: ini
+
+ network_vlan_ranges = physnet1,physnet2:1001:2000
+
+ * Enable security groups.
+
+ .. code-block:: ini
+
+ [securitygroup]
+ ...
+ enable_security_group = true
+
+ .. note::
+
+ The ``firewall_driver`` option under ``[securitygroup]`` is ignored
+ since the OVN ML2 driver itself handles security groups.
+
+ * Configure OVS database access and L3 scheduler
+
+ .. code-block:: ini
+
+ [ovn]
+ ...
+ ovn_nb_connection = tcp:IP_ADDRESS:6641
+ ovn_sb_connection = tcp:IP_ADDRESS:6642
+ ovn_l3_scheduler = OVN_L3_SCHEDULER
+
+ .. note::
+
+ Replace ``IP_ADDRESS`` with the IP address of the controller node that
+ runs the ``ovsdb-server`` service. Replace ``OVN_L3_SCHEDULER`` with
+ ``leastloaded`` if you want the scheduler to select a compute node with
+ the least number of gateway ports or ``chance`` if you want the
+ scheduler to randomly select a compute node from the available list of
+ compute nodes.
+
+#. Start the ``neutron-server`` service.
+
+Network nodes
+-------------
+
+Deployments using OVN native layer-3 and DHCP services do not require
+conventional network nodes because connectivity to external networks
+(including VTEP gateways) and routing occurs on compute nodes.
+
+Compute nodes
+-------------
+
+Each compute node runs the OVS and ``ovn-controller`` services. The
+``ovn-controller`` service replaces the conventional OVS layer-2 agent.
+
+#. Install the ``openvswitch-ovn`` and ``networking-ovn`` packages.
+
+#. Start the OVS service.
+
+ Using the *systemd* unit:
+
+ .. code-block:: console
+
+ # systemctl start openvswitch
+
+ Using the ``ovs-ctl`` script:
+
+ .. code-block:: console
+
+ # /usr/share/openvswitch/scripts/ovs-ctl start --system-id="random"
+
+#. Configure the OVS service.
+
+ * Use OVS databases on the controller node.
+
+ .. code-block:: console
+
+ # ovs-vsctl set open . external-ids:ovn-remote=tcp:IP_ADDRESS:6642
+
+ Replace ``IP_ADDRESS`` with the IP address of the controller node
+ that runs the ``ovsdb-server`` service.
+
+ * Enable one or more overlay network protocols. At a minimum, OVN requires
+ enabling the ``geneve`` protocol. Deployments using VTEP gateways should
+ also enable the ``vxlan`` protocol.
+
+ .. code-block:: console
+
+ # ovs-vsctl set open . external-ids:ovn-encap-type=geneve,vxlan
+
+ .. note::
+
+ Deployments without VTEP gateways can safely enable both protocols.
+
+ * Configure the overlay network local endpoint IP address.
+
+ .. code-block:: console
+
+ # ovs-vsctl set open . external-ids:ovn-encap-ip=IP_ADDRESS
+
+ Replace ``IP_ADDRESS`` with the IP address of the overlay network
+ interface on the compute node.
+
+#. Start the ``ovn-controller`` service.
+
+ Using the *systemd* unit:
+
+ .. code-block:: console
+
+ # systemctl start ovn-controller
+
+ Using the ``ovn-ctl`` script:
+
+ .. code-block:: console
+
+ # /usr/share/openvswitch/scripts/ovn-ctl start_controller
+
+Verify operation
+----------------
+
+#. Each compute node should contain an ``ovn-controller`` instance.
+
+ .. code-block:: console
+
+ # ovn-sbctl show
+ <output>