[RFE] Allow multiple external gateways on a router
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
neutron |
Won't Fix
|
Wishlist
|
Bence Romsics |
Bug Description
I'd like to bring the following idea to the drivers' meeting. If this still looks like a good idea after that discussion, I'll open a spec so this can be properly commented on in gerrit. Until then feel free to comment here of course.
# Problem Description
A general router can be configured to connect and route to multiple external networks for higher availability and/or to balance the load. However the current Neutron API syntax allows exactly one external gateway for a router.
https:/
{
"router": {
"name": "router1",
{
}
]
},
}
}
However consider the following (simplified) network architecture as an example:
R3 R4
|X|
R1 R2
|X|
C1 C2 ...
(Sorry, my original, nice ascii art was eaten by launchpad. I hope this still conveys what I mean.)
Where C1, C2, ... are compute nodes, R1 and R2 are OpenStack-managed routers, while R3 and R4 are provider edge routers. Between R1-R2 and R3-R4 Equal Cost Multipath (ECMP) routing is used to utilize all links in an active-active manner. In such an architecture it makes sense to represent R1 and R2 as 2 logical routers with 2-2 external gateways, or in some cases (depending on other architectural choices) even as 1 logical router with 4 external gateways. But with the current API that is not possible.
# Proposed Change
Extend the router API object with a new attribute 'additional_
{
"router" : {
"name" : "router1",
"
"
{
}
],
},
"
{
{
}
],
},
...
]
}
}
Edited via the following HTTP PUT methods with diff semantics:
PUT /v2.0/routers/
PUT /v2.0/routers/
We keep 'external_
Unless otherwise specified all non-directly connected external IPs are routed towards the original external_
# Alternatives
1) Using 4 logical routers with 1 external gateway each. However in this case the API misses the information which (2 or 4) logical routers represent the same backend router.
2) Using a VRRP HA router. However this provides a different level of High Availability plus it is active-passive instead of active-active.
3) Adding router interfaces (since their number is not limited in the API) instead of external gateways. However this creates confusion by blurring the line of what is internal and what is external to the cloud deployment.
description: | updated |
One router has one external gateway is a fundamental mechanism for neutron, IMO it will be too complicated to refactor the router to support multiple external gateway, because we have DVR, floating IPs, extensions, routes and NAT and so one.