Add spec for custom SGs on VIP ports
Related-Bug: #2065767 Change-Id: Id3d2e4747a633e4e55b2037ac92a194bd8fbe16f
This commit is contained in:
parent
c2c5a4ce82
commit
1b09ba8f37
203
specs/version15.0/custom-security-groups-for-VIP-ports.rst
Normal file
203
specs/version15.0/custom-security-groups-for-VIP-ports.rst
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
================================================
|
||||||
|
Support for Custom Security Groups for VIP Ports
|
||||||
|
================================================
|
||||||
|
|
||||||
|
This specification describes how Octavia can allow users to provide their own
|
||||||
|
Neutron Security Groups for the VIP Port of a load balancer.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Many users have requested a method for customizing the security groups of the
|
||||||
|
VIP ports of a load balancer in Octavia. There are some benefits from using
|
||||||
|
custom security groups:
|
||||||
|
|
||||||
|
* Allowing incoming connections only from specific remote group IDs.
|
||||||
|
|
||||||
|
* Having a unique API (The networking Security Groups API) to configure the
|
||||||
|
network security for all the users' resources.
|
||||||
|
|
||||||
|
Note: The specification is not about Security Groups for the member ports, this
|
||||||
|
feature could be the subject of another spec.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
A user will be able to provide a ``vip_sg_ids`` parameter when creating a load
|
||||||
|
balancer.
|
||||||
|
|
||||||
|
This parameter will be optional and defaulted to None. When set, it contains a
|
||||||
|
list of Neutron Security Group IDs. When it's not set, the behavior of the VIP
|
||||||
|
port would not change.
|
||||||
|
In this document, these security groups are called Custom security
|
||||||
|
groups, as opposed to the existing Octavia-managed security groups.
|
||||||
|
|
||||||
|
If the parameter is set, Octavia would apply these Custom security
|
||||||
|
groups to the VIP and Amphora ports (known as VRRP ports internally). Then
|
||||||
|
Octavia would create and manage a security group (Octavia-managed security
|
||||||
|
group) with rules for its internal communication (haproxy peering, VRRP
|
||||||
|
communication). Thus the VIP port would have more than one Neutron security
|
||||||
|
group.
|
||||||
|
|
||||||
|
No rules based on the port or the protocol of the listeners would be managed by
|
||||||
|
Octavia, for each new listener, the user would have to add their own rules to
|
||||||
|
their Custom security groups.
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
An alternative method would be to implement an ``allowed_remote_group_ids``
|
||||||
|
parameter when creating a load balancer. Users would have a feature that covers
|
||||||
|
the first point described in "Problem Description".
|
||||||
|
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
This feature requires some changes in the data model, a new table
|
||||||
|
``VipSecurityGroup`` is added, it contains:
|
||||||
|
|
||||||
|
* ``load_balancer_id``: the UUID of the load balancer (which also represents a
|
||||||
|
Vip)
|
||||||
|
|
||||||
|
* ``sg_id``: the UUID of a Custom Security Group
|
||||||
|
|
||||||
|
A load balancer (identified by its ID) or a VIP are linked to one or more
|
||||||
|
Custom Security Groups.
|
||||||
|
|
||||||
|
It also requires an update of the data model in octavia-lib.
|
||||||
|
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The POST /v2/lbaas/loadbalancers endpoint is updated to accept an optional
|
||||||
|
``vip_sg_ids`` parameter (a list of UUIDs that represents Custom Security
|
||||||
|
Groups).
|
||||||
|
|
||||||
|
If the parameter is set, Octavia checks that the Custom security groups exist
|
||||||
|
and that the user is allowed to use them, then Octavia creates new
|
||||||
|
VIPSecurityGroup objects with these new parameters.
|
||||||
|
|
||||||
|
The PUT /v2/lbaas/loadbalancers endpoint is also updated, allowing to update
|
||||||
|
the list of Custom Security Groups.
|
||||||
|
|
||||||
|
The ``vip_sg_ids`` parameter is also added to the reply of the GET method.
|
||||||
|
|
||||||
|
Using ``vip_sg_ids`` is incompatible with some existing features in Octavia,
|
||||||
|
like ``allowed_cidrs`` in the listeners. Setting ``allowed_cidrs`` in a load
|
||||||
|
balancer with ``vip_sg_ids`` should be denied, updating the ``vip_sg_ids`` of a
|
||||||
|
load balancer that includes listeners with ``allowed_cidrs`` too.
|
||||||
|
|
||||||
|
``vip_sg_ids`` is also incompatible with SR-IOV enabled load balancers and
|
||||||
|
other provider drivers.
|
||||||
|
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
When this feature is enabled, Octavia no longer handles the security of the VIP
|
||||||
|
port, the users are responsible of the configuration of the Custom Security
|
||||||
|
Groups.
|
||||||
|
|
||||||
|
A RBAC policy is added to Octavia, an administrator can limit the access to
|
||||||
|
this feature to a specific role.
|
||||||
|
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The impact for the end user is that they are responsible for allowing the
|
||||||
|
incomming traffic to their load balancer. The creation of a new listener would
|
||||||
|
request at least 2 API calls, one for creating the listener in Octavia, one for
|
||||||
|
adding a new security group rule to the Custom security group.
|
||||||
|
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Performance could be impacted if the user adds too many rules to the
|
||||||
|
Custom security group, but this issue is outside the scope of Octavia.
|
||||||
|
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Impact is minimal, a few changes in the API and in the DB, only a few new
|
||||||
|
conditionals in the allowed_address_pairs module.
|
||||||
|
|
||||||
|
It could have a more significant impact if this feature is added to the
|
||||||
|
octavia-dashboard.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
gthiemonge
|
||||||
|
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
1. Update the data model of the VIP port in octavia_lib and octavia.
|
||||||
|
2. Update the API to handle the new ``vip_sg_id`` parameter.
|
||||||
|
3. Update the allowed_address_pairs module to handle this new feature.
|
||||||
|
4. Update the api-ref and the user guide.
|
||||||
|
5. Add required unit and functional tests.
|
||||||
|
6. Add support to python-octaviaclient and openstacksdk
|
||||||
|
7. Add tempest tests for this feature.
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
The feature can easily be tested with tempest tests.
|
||||||
|
|
||||||
|
- creation of a load balancer and its Custom security groups, check that
|
||||||
|
it's reachable
|
||||||
|
- update the list of Custom security groups, check that the connectivity
|
||||||
|
to the load balancer is impacted.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The feature will be included in the cookbook.
|
||||||
|
The api-ref and feature matrix will be also updated.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
None.
|
Loading…
Reference in New Issue
Block a user