Port Forwarding API

Registered by Gal Sagie on 2015-09-16

Port forwarding is a common feature in networking and more specifically in PaaS and
SaaS cloud systems which aim at reusing the same public IP for different clients
that use different VMs for their services.

This is especially relevant for deployments which lack a large number of
public IPs they can assign.

Common use case for this feature is a client requesting a specific service, the
serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a
client port to access this service.
This means that various clients use the same public IP, but the TCP/UDP destination
port is used to distinguish between the end point VMs.

Example:

client1 172.24.4.2:4001 => maps to 10.0.0.2 port 80 (VM1)
client2 172.24.4.2:4002 => maps to 10.0.0.3 port 80 (VM2)

This spec focus on the API level, a detailed reference implementation spec
will be written upon approve of API.

Problem Description
===================

* In tight environments operators would like to reuse public IPs instead
  of assigning to each VM its own public IP (floating IP).

* Docker support port-mapping feature and hence a big eco-system of automation
  orchestration and management plugins leverage it.
  We would like to make Neutron compatible for these tools and systems
  and provide a similar API

Proposed Change
===============

Introduce port forwarding API and implementation on the public address of the
virtual router external gateway interface (connecting the router to a public network).

The user can define various port forwarding rules on the router containing
the client port and the destination VM and destination port.

Implementing this feature per floating IP is complicated due the fact that DNAT
in DVR is distributed among the compute nodes, this feature resemble the
difficulties and challenges of distributing SNAT and hence at this point
should remain in the network node.

It seems however that any solution that distribute SNAT will also be able
to support distributing port forwarding.

Blueprint information

Status:
Complete
Approver:
None
Priority:
Undefined
Drafter:
Gal Sagie
Direction:
Needs approval
Assignee:
Gal Sagie
Definition:
Obsolete
Series goal:
None
Implementation:
Unknown
Milestone target:
None
Completed by
Armando Migliaccio on 2015-12-16

Related branches

Sprints

Whiteboard

We'll revive this when/if the RFE gets any traction.

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.