[ovs-dev] [PATCH v5 0/6] ovn: add distributed NAT capability
Guru Shetty
guru at ovn.org
Wed Jan 4 17:33:01 UTC 2017
On 3 January 2017 at 01:33, Mickey Spiegel <mickeys.dev at gmail.com> wrote:
> Currently OVN supports NAT functionality by connecting each distributed
> logical router to a centralized "l3gateway" router that resides on a
> single chassis. NAT is only carried out in the "l3gateway" router.
>
> This patch set introduces NAT capability in the distributed logical
> router itself, avoiding the need to pass through a transit logical
> switch and a second logical router, and in many cases avoiding the need
> to pass through a centralized chassis.
>
> NAT functionality is associated with the logical router gateway port.
> In order to support one-to-many SNAT (aka IP masquerading), where
> multiple private IP addresses spread across multiple chassis are mapped
> to a single public IP address, it will be necessary to handle some of
> the logical router processing on a specific chassis in a centralized
> manner. Some NAT flows are handled in a distributed manner on all
> chassis (following the local "patch" port as is normally done for
> distributed logical routers), while other NAT flows are handled on a
> centralized "redirect-chassis".
>
> Possible future work items (hopefully not required for this patch set
> to be accepted) include:
> 1. The NAT flows patch lifts the restriction that conntrack zones are
> only assigned to datapaths for gateway routers. Given recent
> changes to ovn-controller, a hypervisor only sees the datapaths
> for which there is a port resident on this chassis, or datapaths
> reachable from ports resident on this chassis. Is that good
> enough? Or should conntrack zone assignment for datapaths be
> restricted further, perhaps only to logical router datapaths?
> 2. The current automated test for NAT flows is single node, so it does
> not cover the distributed functionality. Full coverage requires a
> multi-node test with conntrack NAT capability, either in the kernel
> or userspace. Is this possible?
> Multi-node tests have been added for the chassisdirect patch,
> testing non-NAT aspects of the distributed router gateway port.
> 3. Consider how to generalize distributed versus centralized handling
> of non-NAT traffic being output on the distributed gateway port.
> If MAC learning is used in the upstream network, then the
> distributed gateway port’s MAC address must be restricted to the
> redirect-chassis by using the chassisredirect port. In the
> presence of dynamic protocols such as BGP EVPN, non-NAT traffic
> could be handled in a distributed manner.
> 4. Gratuitous ARP for NAT addresses needs to be updated for
> distributed NAT.
> 5. Add load balancing on the redirect chassis of an otherwise
> distributed logical router.
>
I had a cursory look. Some of the patches will probably need blp to look at
too. I did notice that changes to ovn-nbctl to add NAT rules does not exist
in this patch. Currently there are a few shortcuts there.
>
> PATCH v4 -> PATCH v5
> Limited router ingress table 0 flow matching router ethernet address
> on distributed gateway to redirect chassis.
> Limited router ingress table 0 flows matching NAT ethernet address to
> chassis where the NAT rule's logical port resides.
> Rolled back changes to ICMP since they are not necessary.
>
> PATCH v3 -> PATCH v4
> Rebase
>
> PATCH v2 -> PATCH v3
> Added table to set egress loopback flag in the egress pipeline stage,
> fixing east-west NAT across multiple chassis.
>
> PATCH v1 -> PATCH v2
> Added ovn-trace logic for chassisredirect ports, including automated test.
> Added ovn-trace logic for egress loopback.
> Fixed some bugs in ovn-trace register handling from ingress to egress,
> and across patch ports (should these be filed separately as well?).
>
> RFC v4 -> PATCH v1
> Added egress loopback capability
> Added east/west NAT tests to system-ovn.at (make check-kernel)
> Added REGBIT_NAT_REDIRECT flows to IN_IP_ROUTING and IN_ARP_RESOLVE,
> resolving remaining issues with east/west NAT
>
> RFC v3 -> RFC v4
> Rebased to pick up recent changes to ovn-controller, including a fix
> to the localnet issue where VIFs had to be added on a chassis in order
> to cause the localnet port to be instantiated.
> The chassisredirect port logic was rewritten to avoid creating an
> ofport. Besides streamlining the code significantly, this fixed the
> problem when the distributed port name was longer than 12 characters.
> Restricted IPv6 ND replies for the router IP address to the redirect
> chassis, similar to IPv4 ARP restrictions.
> Added specific gateway redirect flows for unresolved ethernet
> destination, so that ARP requests generated by the router are sent
> through the redirect chassis regardless of NAT rules.
> Relaxed checks in chassisredirect tests so that they are independent
> of register assignments.
> Renamed ovn-northd.c "l3gateway_port" to "l3dgw_port" in order to
> avoid overlaps with gateway router terminology.
>
> RFC v2 -> RFC v3
> Reordered the first two patches.
> Moved non-NAT specific flows from patch 5 to patch 2.
> Added automated tests for is_chassis_resident (which is ready for
> review) and chassisredirect patches.
> Added flows to limit ICMP echo replies for router IPs on the gateway
> interface, so that they are only generated on the redirect-chassis.
>
> Mickey Spiegel (6):
> ovn: add is_chassis_resident match expression component
> ovn: Introduce "chassisredirect" port binding
> ovn: add egress loopback capability
> ovn: move load balancing flows after NAT flows
> ovn: avoid snat recirc only on gateway routers
> ovn: distributed NAT flows
>
> include/ovn/actions.h | 3 +
> include/ovn/expr.h | 22 +-
> ovn/controller/binding.c | 8 +
> ovn/controller/lflow.c | 49 ++-
> ovn/controller/lflow.h | 5 +-
> ovn/controller/ovn-controller.c | 15 +-
> ovn/controller/physical.c | 101 +++++-
> ovn/lib/actions.c | 15 +-
> ovn/lib/expr.c | 155 ++++++++-
> ovn/lib/logical-fields.c | 8 +
> ovn/lib/logical-fields.h | 14 +
> ovn/northd/ovn-northd.8.xml | 436 +++++++++++++++++++++++-
> ovn/northd/ovn-northd.c | 719 ++++++++++++++++++++++++++++++
> ++--------
> ovn/ovn-nb.ovsschema | 13 +-
> ovn/ovn-nb.xml | 70 +++-
> ovn/ovn-sb.xml | 37 ++-
> ovn/utilities/ovn-trace.c | 105 +++++-
> tests/ovn.at | 303 ++++++++++++++++-
> tests/system-ovn.at | 338 +++++++++++++++++++
> tests/test-ovn.c | 15 +-
> 20 files changed, 2230 insertions(+), 201 deletions(-)
>
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
More information about the dev
mailing list