Allow router external IPs to be set
This is a specification is to allow administrators to set the external IP addresses assigned to tenant routers to a given IP. blueprint specify-router-ext-ip Change-Id: I25fdb45c7f1242f9c97fb2bc41e15833285d8157
This commit is contained in:
parent
068779f081
commit
be9db36a3a
200
specs/kilo/specify-router-ext-ip.rst
Normal file
200
specs/kilo/specify-router-ext-ip.rst
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
=========================================================
|
||||||
|
Allow the external IP address of a router to be specified
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/neutron/+spec/specify-router-ext-ip
|
||||||
|
|
||||||
|
There currently is no way to specify the IP address given to a
|
||||||
|
router on its external port. This blueprint allows external IPs
|
||||||
|
to be set and the action is restricted to admin-only by default.
|
||||||
|
|
||||||
|
This spec was originally approved for Juno, however due to time
|
||||||
|
constraints and conflicts with all of the DVR work ongoing at the
|
||||||
|
end of the cycle, the code was reduced to a read-only version at
|
||||||
|
the deadline.
|
||||||
|
|
||||||
|
The remaining code to finish the work is already complete and
|
||||||
|
has received several reviews.[1] It affects about 100 lines of
|
||||||
|
the L3 code so it has a small footprint and shouldn't take too
|
||||||
|
much additional effort of reviewers to merge.
|
||||||
|
|
||||||
|
|
||||||
|
Problem Description
|
||||||
|
===================
|
||||||
|
|
||||||
|
The current router API doesn't allow any control over the IP
|
||||||
|
address given to the external interface on router objects.
|
||||||
|
This makes it difficult for scenarios where tenant routers have
|
||||||
|
to be assigned a well-known address that receives special
|
||||||
|
treatment on the provider network.
|
||||||
|
|
||||||
|
Or, even if the address was originally randomly assigned,
|
||||||
|
there is no way to delete the router, move it to another project,
|
||||||
|
and preserve the previously assigned address.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed Change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Allow the external IP to be specified for a router in the
|
||||||
|
external_gateway_info passed to router_update. By default, this
|
||||||
|
will be restricted by policy.json to an admin-only operation.
|
||||||
|
|
||||||
|
The format of this will be the standard fixed_ips format used
|
||||||
|
when specifying an IP address for a normal port so it offers
|
||||||
|
the flexibility of specifying a subnet_id instead of an IP directly.
|
||||||
|
|
||||||
|
Requested addresses will be permitted to be any address inside any of the
|
||||||
|
subnets associated with the external network except for the gateway addresses.
|
||||||
|
They will not be affected by allocation pool ranges.
|
||||||
|
|
||||||
|
If an address is already in use, the API will return a Conflict
|
||||||
|
error (HTTP 409).
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Data Model Impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
REST API Impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
'external_fixed_ips' is a field under 'external_gateway_info' that contains
|
||||||
|
the external IP address of the router interface. This field already exists
|
||||||
|
in the current API due to the previous partial implementation that allows
|
||||||
|
the addresses to be read. The only difference is that the field can now be
|
||||||
|
updated by an admin (or other user with the privileges defined in policy.json).
|
||||||
|
|
||||||
|
+-------------------+--------+----------+----------+------------------+--------------+
|
||||||
|
|Attribute |Type |Access |Default |Validation/ |Description |
|
||||||
|
|Name | | |Value |Conversion | |
|
||||||
|
+===================+========+==========+==========+==================+==============+
|
||||||
|
|external_fixed_ips |fixed_ip|RO, owner |generated |Same as fixed_ips |External IP |
|
||||||
|
| |format |RW, admin | |field validation |addresses |
|
||||||
|
| |for | | |for normal ports. | |
|
||||||
|
| |ports | | | | |
|
||||||
|
+-------------------+--------+----------+----------+------------------+--------------+
|
||||||
|
|
||||||
|
Right now only one fixed IP may be specified, but this may be adjusted in the
|
||||||
|
future if routers support multiple external IPs.
|
||||||
|
|
||||||
|
|
||||||
|
Security Impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
N/A if the default policy.json is left unmodified. If it's modified to allow
|
||||||
|
all users to set an IP, standard users will be allowed to ignore the allocation
|
||||||
|
ranges defined on the external subnet.
|
||||||
|
|
||||||
|
Notifications Impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
IPv6 Impact
|
||||||
|
-----------
|
||||||
|
The IP validation will use the same validation that is used for any port IP
|
||||||
|
address so this change should be IPv6 compatible.
|
||||||
|
|
||||||
|
Other End User Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Other Deployer Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Developer Impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Community Impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The community will rejoice in elation that such an amazing feature is
|
||||||
|
even possible, let alone implemented, in software.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
kevinbenton
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Make the changes to the L3 db code, API, and policy.
|
||||||
|
* Update neutronclient
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Tempest Tests
|
||||||
|
-------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
Functional Tests
|
||||||
|
----------------
|
||||||
|
N/A
|
||||||
|
|
||||||
|
API Tests
|
||||||
|
---------
|
||||||
|
|
||||||
|
Unit tests should be adequate since there will be no new behavior outside
|
||||||
|
of the IP address assignment, which is well contained in the neutron code.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
User Documentation
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Indicate that tenants can see their router's external IP and that
|
||||||
|
admins can specify router IPs.
|
||||||
|
|
||||||
|
Developer Documentation
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
The developer API documentation will need to be updated to indicate
|
||||||
|
that the external router IP can now be set.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
1. https://review.openstack.org/#/c/83664/
|
||||||
|
|
||||||
|
Related bugs:
|
||||||
|
|
||||||
|
https://bugs.launchpad.net/neutron/+bug/1255142
|
||||||
|
|
||||||
|
https://bugs.launchpad.net/neutron/+bug/1188427
|
Loading…
Reference in New Issue
Block a user