Port Forwarding API
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:
- Miguel Lavalle
- Priority:
- Medium
- Drafter:
- Gal Sagie
- Direction:
- Needs approval
- Assignee:
- zhaobo
- Definition:
- Approved
- Series goal:
- Accepted for rocky
- Implementation:
- Implemented
- Milestone target:
- rocky-rc1
- Started by
- Miguel Lavalle
- Completed by
- Miguel Lavalle
Related branches
Sprints
Whiteboard
Gerrit topic: https:/
Addressed by: https:/
FIP port forwarding support[1]
Addressed by: https:/
FIP port forwarding support[2]
Addressed by: https:/
WIP: Introduce API definition of Floating IP Port Forwarding
Addressed by: https:/
[server side] Floating IP port forwarding plugin
Addressed by: https:/
[server side] Fix race issue for port forwarding plugin
Addressed by: https:/
[server side] Expose port forwardings in FIP API
Gerrit topic: https:/
Addressed by: https:/
Add ext_parent policy check
Gerrit topic: https:/
Addressed by: https:/
Add release note for port forwardings.
Addressed by: https:/
api-ref for floating IPs port forwardings
Addressed by: https:/
Add FIP port forwarding to Networking Guide
Addressed by: https:/
Add 'is_filter' and 'is_sort_key' to fip pf attributes