Spec for Fip support for Octavia Vips 32/76132/4
authorJosh <jhershbe@redhat.com>
Mon, 17 Sep 2018 06:09:09 +0000 (09:09 +0300)
committerSam Hague <shague@redhat.com>
Fri, 28 Sep 2018 00:32:59 +0000 (00:32 +0000)
Jira: NETVIRT-1402

Change-Id: I2dedfe8a349f894f491e89879a4c2460acb8725d
Signed-off-by: Josh <jhershbe@redhat.com>
Signed-off-by: Sam Hague <shague@redhat.com>
docs/specs/neon/index.rst
docs/specs/neon/octavia-fip-support.rst [new file with mode: 0644]

index 7cf982262a06577807ec7cbf5388ce36ca90ca62..96764d5521bb02e630153f69688458f6cf0ef397 100644 (file)
@@ -12,5 +12,6 @@ Contents:
    IGMPv3 Snooping <igmp-snooping>
    L3VPN Robustness <l3vpn-robustness>
    Neutron Quality of Service <qos>
+   Octavia Floating IP support <octavia-fip-support>
    Support Neutron BGPVPN API on OpenDaylight L3VPN Service <neutron-bgpvpn-api-support>
    Tap as a Service <Tap-as-a-Service>
diff --git a/docs/specs/neon/octavia-fip-support.rst b/docs/specs/neon/octavia-fip-support.rst
new file mode 100644 (file)
index 0000000..c8f2df3
--- /dev/null
@@ -0,0 +1,150 @@
+.. contents:: Table of Contents
+   :depth: 2
+
+=============================
+Support FIPs for Octavia VIPs
+=============================
+
+Problem description
+===================
+An Octavia VIP is a neutron port that is not bound to any VM and is therefor not added to br-int. The VM containing the active haproxy sends gratuitous ARPs for the VIP's IP and ODL intercepts those and programs flows to forward VM traffic to the VMs port. Note that this is my understanding of how this all works, I have not validated it, the opener of this bug confirms that it works.
+
+The ODL code responsible for configuring the FIP association flows on OVS currently relies on a southbound openflow port that corresponds to the neutron FIP port. The only real reason this is required is so that ODL can decide which switch should get the flows. See FloatingIPListener#createNATFlowEntries. In the case of the VIP port, there is no corresponding southbound port so the flows never get configured.
+
+Use Cases
+---------
+FIP assigned to an Octavia loadbalancer
+
+Proposed change
+===============
+The basic solution is to use the OF packet-in event to
+learn the dpn where the NAT flows need to be programmed.
+
+Overview of code changes:
+
+1. Refactor NatInterfaceStateChangeListener into two classes:
+   (a) NatInterfaceStateChangeListener which just receives events.
+   (b) NatSouthboundEventHandlers which contains the logic invoked
+   for when an interface state changes (or a garp is received)
+2. Implementation of NatArpNotificationHandler which receives
+   the garps and invokes the correct methods in
+   NatSouthboundEventHandlers
+3. neutron-vip-state yang model which is used together with
+   VipStateTracker (DataObjectCache) to manage state of the
+   discovered VIPs. This is required in cases where the
+   associated Ocatavia Amphora VM changes to a different
+   compute node. In this case the existing flows must be
+   removed from the odl compute node.
+4. Tweak VIP learning code to accept neutron ports that are
+   owned by "Octavia", previously the code assumed no neutron
+   port ever needed to be learned.
+
+Pipeline changes
+----------------
+None
+
+Yang changes
+------------
+.. code-block:: none
+
+   :caption: odl-nat.yang
+
+    container neutron-vip-states {
+        config false;
+        list vip-state {
+            key ip;
+            leaf ip {
+                type string;
+            }
+            leaf dpn-id {
+                type uint64;
+            }
+            leaf ifc-name {
+                type string;
+            }
+        }
+    }
+
+Configuration impact
+--------------------
+None
+
+Clustering considerations
+-------------------------
+None
+
+Other Infra considerations
+--------------------------
+None
+
+Security considerations
+-----------------------
+None
+
+Scale and Performance Impact
+----------------------------
+Unlikely to have any real impact
+
+Targeted Release
+----------------
+Flourine with a backport as far as Oxygen
+
+Alternatives
+------------
+N/A
+
+Usage
+=====
+This feature should "just work" with Octavia. No special usage is required.
+
+Features to Install
+-------------------
+odl-netvirt-openstack
+
+REST API
+--------
+None
+
+CLI
+---
+None
+
+Implementation
+==============
+
+Assignee(s)
+-----------
+Josh Hershberg, jhershbe, jhershbe@redhat.com
+
+Work Items
+----------
+https://git.opendaylight.org/gerrit/#/c/75281/
+
+https://git.opendaylight.org/gerrit/#/c/75248/
+
+Dependencies
+============
+None
+
+Testing
+=======
+
+Unit Tests
+----------
+None
+
+Integration Tests
+-----------------
+As this is a bug and we are rushing to fix it for now testing will be done manually
+
+CSIT
+----
+Yes, we really should in the near future.
+
+Documentation Impact
+====================
+None
+
+References
+==========
+None