Add new documentation to dragonflow

Change-Id: I28d5ed8b99948c1b321544a4ab1b2dfda25864b9
This commit is contained in:
Gal Sagie 2015-09-09 09:28:05 +03:00
parent 86202082ca
commit b5d50f6167
7 changed files with 151 additions and 200 deletions

View File

@ -1,126 +1,47 @@
SDN based Virtual Router add-on for Neutron OpenStack
Distributed SDN-based Neutron Implementation
* Free software: Apache license
* Homepage: http://launchpad.net/dragonflow
* Source: http://git.openstack.org/cgit/openstack/dragonflow
* Bugs: http://bugs.launchpad.net/dragonflow
Documentation:
--------------
* `Solution Overview Presentation <http://www.slideshare.net/gampel/dragonflow-sdn-based-distributed-virtual-router-for-openstack-neutron>`_
* `Solution Overview Blog Post <http://blog.gampel.net/2015/01/neutron-dvr-sdn-way.html>`_
* `Deep-Dive Introduction 1 Blog Post <http://galsagie.github.io/sdn/openstack/ovs/dragonflow/2015/05/09/dragonflow-1/>`_
* `Deep-Dive Introduction 2 Blog Post <http://galsagie.github.io/sdn/openstack/ovs/dragonflow/2015/05/11/dragonflow-2/>`_
* `Kilo-Release Blog Post <http://blog.gampel.net/2015/01/dragonflow-sdn-based-distributed.html>`_
* Wiki: http://docs.openstack.org/developer/dragonflow
Overview
--------
Dragonflow is an implementation of a fully distributed virtual router for
OpenStack Neutron, which is based on a Software-Defined Network Controller
(SDNC) design.
The main purpose of Dragonflow is to simplify the management of the virtual
router, while improving performance, scale and eliminating single point of
failure and the notorious network node bottleneck.
Dragonflow implements Neutron using a lightweight embedded SDN Controller.
The proposed method is based on the separation of the routing control plane
from the data plane. This is accomplished by implementing the routing logic in
distributed forwarding rules on the virtual switches. In OpenFlow these rules
are called flows. To put this simply, the virtual router is implemented using
OpenFlow flows.
Dragonflow is available in two configurations: Distributed and Centralized.
Dragonflow eliminates the use of namespaces in contrast to the standard DVR
implementation. A diagram showing Dragonflow components and overall
architecture can be seen here:
Our project mission is *to Implement advanced networking services in a manner
that is efficient, elegant and resource-nimble*
.. image:: https://raw.githubusercontent.com/openstack/dragonflow/master/doc/images/df_components.jpg
Distributed Dragonflow
======================
Comprehensive agentless implementation of the Neutron APIs and advanced
network services, such as fully distributed Switching, Routing, DHCP
and more.
This configuration is the current focus of Dragonflow.
Overview and details are available in the `Distributed Dragonflow Section`_
.. _Distributed Dragonflow Section: http://docs.openstack.org/developer/dragonflow/distributed_dragonflow.html
.. image:: https://raw.githubusercontent.com/openstack/dragonflow/master/doc/images/dragonflow_distributed_architecture.png
:alt: Solution Overview
:width: 600
:height: 525
:align: center
Perhaps the most important part of the solution is the OpenFlow pipeline which
we install into the integration bridge upon bootstrap. This is the flow that
controls all traffic in the OVS integration bridge `(br-int)`. The pipeline
works in the following manner:
Centralized Dragonflow
======================
::
An implementation of a fully distributed virtual router, which replaces
DVR and can work with any ML2 mechanism and type drivers.
1) Classify the traffic
2) Forward to the appropriate element:
1. If it is ARP, forward to the ARP Responder table
2. If routing is required (L3), forward to the L3 Forwarding table
(which implements a virtual router)
3. All L2 traffic and local subnet traffic are offloaded to the NORMAL
pipeline handled by ML2
4. North/South traffic is forwarded to the network node (SNAT)
Overview and details are available in the `Centralized Dragonflow Section`_
.. _Centralized: http://docs.openstack.org/developer/dragonflow/distributed_dragonflow.html
The following diagram shows the multi-table OpenFlow pipeline installed into
the OVS integration bridge `(br-int)` in order to represent the virtual router
using flows only:
.. image:: https://raw.githubusercontent.com/openstack/dragonflow/master/doc/images/df_of_pipeline.jpg
:alt: Pipeline
:width: 600
:height: 400
:align: center
A detailed blog post describing the solution can be found Here_.
.. _Here: http://blog.gampel.net/2015/01/neutron-dvr-sdn-way.html
How to Install
--------------
`Installation Guide <https://github.com/openstack/dragonflow/tree/master/doc/source>`_
`DevStack Single Node Configuration <https://github.com/openstack/dragonflow/tree/master/doc/source/single-node-conf>`_
`DevStack Multi Node Configuration <https://github.com/openstack/dragonflow/tree/master/doc/source/multi-node-conf>`_
Prerequisites
-------------
Install DevStack with Neutron ML2 as core plugin
Install OVS 2.3.1 or newer
Features
--------
* APIs for routing IPv4 East-West traffic
* Performance improvement for inter-subnet network by removing the amount of
kernel layers (namespaces and their TCP stack overhead)
* Scalability improvement for inter-subnet network by offloading L3 East-West
routing from the Network Node to all Compute Nodes
* Reliability improvement for inter-subnet network by removal of Network Node
from the East-West traffic
* Simplified virtual routing management
* Support for all type drivers GRE/VXLAN/VLAN
* Support for centralized shared public network (SNAT) based on the legacy L3
implementation
* Support for centralized floating IP (DNAT) based on the legacy L3
implementation
* Support for HA, in case the connection to the Controller is lost, fall back
to the legacy L3 implementation until recovery. Reused all the legacy L3 HA.
(Controller HA will be supported in the next release).
* Supports for centralized IPv6 based on the legacy L3 implementation
TODO
----
* Add support for North-South L3 IPv4 distribution (SNAT and DNAT)
* Add support for IPv6
* Support for multi controllers solution
Full description can be found in the project `Blueprints
<https://blueprints.launchpad.net/dragonflow>`_

View File

@ -0,0 +1,119 @@
SDN based Virtual Router add-on for Neutron OpenStack
Overview
--------
Dragonflow is an implementation of a fully distributed virtual router for
OpenStack Neutron, which is based on a Software-Defined Network Controller
(SDNC) design.
The main purpose of Dragonflow is to simplify the management of the virtual
router, while improving performance, scale and eliminating single point of
failure and the notorious network node bottleneck.
The proposed method is based on the separation of the routing control plane
from the data plane. This is accomplished by implementing the routing logic in
distributed forwarding rules on the virtual switches. In OpenFlow these rules
are called flows. To put this simply, the virtual router is implemented using
OpenFlow flows.
Dragonflow eliminates the use of namespaces in contrast to the standard DVR
implementation. A diagram showing Dragonflow components and overall
architecture can be seen here:
.. image:: https://raw.githubusercontent.com/openstack/dragonflow/master/doc/images/df_components.jpg
:alt: Solution Overview
:width: 600
:height: 525
:align: center
Perhaps the most important part of the solution is the OpenFlow pipeline which
we install into the integration bridge upon bootstrap. This is the flow that
controls all traffic in the OVS integration bridge `(br-int)`. The pipeline
works in the following manner:
::
1) Classify the traffic
2) Forward to the appropriate element:
1. If it is ARP, forward to the ARP Responder table
2. If routing is required (L3), forward to the L3 Forwarding table
(which implements a virtual router)
3. All L2 traffic and local subnet traffic are offloaded to the NORMAL
pipeline handled by ML2
4. North/South traffic is forwarded to the network node (SNAT)
The following diagram shows the multi-table OpenFlow pipeline installed into
the OVS integration bridge `(br-int)` in order to represent the virtual router
using flows only:
.. image:: https://raw.githubusercontent.com/openstack/dragonflow/master/doc/images/df_of_pipeline.jpg
:alt: Pipeline
:width: 600
:height: 400
:align: center
A detailed blog post describing the solution can be found Here_.
.. _Here: http://blog.gampel.net/2015/01/neutron-dvr-sdn-way.html
Documentation:
--------------
* `Solution Overview Presentation <http://www.slideshare.net/gampel/dragonflow-sdn-based-distributed-virtual-router-for-openstack-neutron>`_
* `Solution Overview Blog Post <http://blog.gampel.net/2015/01/neutron-dvr-sdn-way.html>`_
* `Deep-Dive Introduction 1 Blog Post <http://galsagie.github.io/sdn/openstack/ovs/dragonflow/2015/05/09/dragonflow-1/>`_
* `Deep-Dive Introduction 2 Blog Post <http://galsagie.github.io/sdn/openstack/ovs/dragonflow/2015/05/11/dragonflow-2/>`_
* `Kilo-Release Blog Post <http://blog.gampel.net/2015/01/dragonflow-sdn-based-distributed.html>`_
How to Install
--------------
`Installation Guide <https://github.com/openstack/dragonflow/tree/master/doc/source>`_
`DevStack Single Node Configuration <https://github.com/openstack/dragonflow/tree/master/doc/source/single-node-conf>`_
`DevStack Multi Node Configuration <https://github.com/openstack/dragonflow/tree/master/doc/source/multi-node-conf>`_
Prerequisites
-------------
Install DevStack with Neutron ML2 as core plugin
Install OVS 2.3.1 or newer
Features
--------
* APIs for routing IPv4 East-West traffic
* Performance improvement for inter-subnet network by removing the amount of
kernel layers (namespaces and their TCP stack overhead)
* Scalability improvement for inter-subnet network by offloading L3 East-West
routing from the Network Node to all Compute Nodes
* Reliability improvement for inter-subnet network by removal of Network Node
from the East-West traffic
* Simplified virtual routing management
* Support for all type drivers GRE/VXLAN/VLAN
* Support for centralized shared public network (SNAT) based on the legacy L3
implementation
* Support for centralized floating IP (DNAT) based on the legacy L3
implementation
* Support for HA, in case the connection to the Controller is lost, fall back
to the legacy L3 implementation until recovery. Reused all the legacy L3 HA.
(Controller HA will be supported in the next release).
* Supports for centralized IPv6 based on the legacy L3 implementation
TODO
----
* Add support for North-South L3 IPv4 distribution (SNAT and DNAT)
* Add support for IPv6
* Support for multi controllers solution
Full description can be found in the project `Blueprints
<https://blueprints.launchpad.net/dragonflow>`_

View File

View File

@ -3,8 +3,8 @@
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to dragonflow's documentation!
========================================================
Welcome to Dragonflow's documentation
=====================================
Contents:
@ -13,6 +13,8 @@ Contents:
readme
installation
centralized_dragonflow
distributed_dragonflow
usage
contributing

View File

@ -1,93 +0,0 @@
Note Currently in the PoC implementation the SDN controller is embedded into the L3 service plugin so there is no need to run/ deploy the L3 Agent.
Prerequisite
------------
1) Clone the devstack into the controller node and into all the compute nodes
``cd /opt/stack``
``git clone https://git.openstack.org/openstack-dev/devstack``
- Install multi node devstack instalation using Neutron ML2 core plugin
- Here's a sample devstack multi-node installation configuration file
2) Git-Checkout the last merged label
``cd /opt/stack/neutron/``
``git checkout 51a6260266dc59c066072ca890ad9c40b1aad6cf``
3) Apply the L3 controller patch
- Download from this folder
``git apply --whitespace=nowarn l3_controller.patch``
Setup
-----
1) Enable the Controller L3 service plugin
- Make the following changes in ``neutron.conf``:
- Comment-out loading of the ``L3RouterPlugin``
- Add the ``neutron.services.l3_router.l3_cont_dvr_plugin.ControllerL3ServicePlugin`` to the service plugin list
**neutron.conf**
``[default]``
``#service_plugins =neutron.services.l3_router.l3_router_plugin.L3RouterPlugin``
``service_plugins=neutron.services.l3_router.l3_cont_dvr_plugin.ControllerL3ServicePlugin``
- Make the following change in ``ml2_conf.ini``:
- Enable the L3 Controller
**ml2_conf.ini**
``[agent]``
``enable_l3_controller = True``
2) Remove deployment of L3 Agent or DVR Agent from the Network Node (make sure the L3 Agent is not running)
**Note: This will disable north-south traffic, allowing you only to test east-west**
`(TODO) explain how to remove L3/DVR Agent`
3) Installing Ryu on Controller Node
- Cloning the Ryu project
``git clone git://github.com/osrg/ryu.git``
- Apply the folowing change to enable Ryu to run in Library mode (instead of a standalone controller)
Replace `register_cli_opts` to `register_opts` in the following files:
``ryu/controller/controller.py``
``ryu/app/wsgi.py``
- Configure the controller IP address
Edit the following file:
``/opt/stack/neutron/neutron/services/l3_router/l3_cont_dvr_plugin.py``
Change the IP in the list:
`NET_CONTROL_L3_OPTS`
Run the following commands:
``sed -i 's/register_cli_opts/register_opts/g' ryu/controller/controller.py``
``sed -i 's/register_cli_opts/register_opts/g' ryu/app/wsgi.py``
``% cd ryu; python ./setup.py install``

View File

@ -12,6 +12,8 @@
from oslo_config import cfg
from neutron.i18n import _
df_opts = [
cfg.StrOpt('remote_db_ip',
default='127.0.0.1',

View File

@ -20,7 +20,7 @@ from oslo_config import cfg
from oslo_log import log
from neutron.common import config as common_config
from neutron.i18n import _LI, _LE, _LW
from neutron.i18n import _, _LI, _LE, _LW
from ryu.controller.handler import CONFIG_DISPATCHER
from ryu.controller.handler import MAIN_DISPATCHER