introduce PT cluster_id for HA policy targets
Partially implements blueprint node-centric-chain-plugin Change-Id: Ibeca9d98528d164fd82f22927a87e4532471e6d4
This commit is contained in:
parent
0460baf43c
commit
d8fcfe3c38
162
specs/kilo/policy-target-cluster-id.rst
Normal file
162
specs/kilo/policy-target-cluster-id.rst
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
Policy Target HA mode
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
With the introduction of more sophisticated network services and service chaining
|
||||||
|
modes, one limitation that we encountered was the impossibility for GBP to describe
|
||||||
|
a cluster of HA endpoints, defined as a collection of Policy Target that can freely
|
||||||
|
interchange their datapath identity (MAC and IP address) to the end of replacing
|
||||||
|
one another whenever the network service requires so (for example, during an HA
|
||||||
|
failover).
|
||||||
|
|
||||||
|
In the GBP universe, members of the same PTG share the same policy characteristics,
|
||||||
|
such as security, quality or connectivity constraints. This however does not cover
|
||||||
|
sharing the same network "identity", qualified as Mac or IP address in the datapath.
|
||||||
|
We need a way to allow a Policy Target to impersonate another Policy Target in the
|
||||||
|
network.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
The proposal is to introduce a new attribute to the PT description, called
|
||||||
|
"cluster_id". A cluster ID is none other but a string which identifies that a specific
|
||||||
|
Policy Target belongs to an HA cluster.
|
||||||
|
Whenever cluster_id is set, the PTs that share the same cluster identity will be
|
||||||
|
able to impersonate one another depending on the backend implementation.
|
||||||
|
|
||||||
|
In the reference implementation (Neutron) this is achieved by leveraging Neutron's
|
||||||
|
"allowed-address-pair" extension. In the first iteration, for the resource_mapping driver,
|
||||||
|
cluster_id will not be allowed to be just any generic string, but a UUID pointing
|
||||||
|
to an existing Policy Target. That Policy Target will be identified as the "Master"
|
||||||
|
of the cluster. Any member of the cluster will be added the ability to impersonate
|
||||||
|
the Master by setting its IP and MAC addresses in the "allowed-address-pair" of
|
||||||
|
the member's Neutron Port.
|
||||||
|
|
||||||
|
a "Master" PT (defined as a PT pointed by the cluster_id field of another PT) could
|
||||||
|
be itseld part of the same cluster (for debugability purpose) although it's not
|
||||||
|
mandatory.
|
||||||
|
|
||||||
|
By default, this attribute will be only exposed to the Admin role.
|
||||||
|
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Policy Target:
|
||||||
|
* cluster_id: String
|
||||||
|
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Changes to the PT API::
|
||||||
|
|
||||||
|
POLICY_TARGETS: {
|
||||||
|
'cluster_id': {'allow_post': True, 'allow_put': True,
|
||||||
|
'validate': {'type:string': None},
|
||||||
|
'default': '', 'is_visible': True}
|
||||||
|
}
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
As a Policy Target can now impersonate another PT in the datapath, that includes
|
||||||
|
a potential risk when done for malicious reasons. The API however will be open
|
||||||
|
only to Admins, and its scope limited in a single PTG (so no Group escape can
|
||||||
|
happen).
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
When notifying a member of the cluster of a Datapath change, all the cluster's
|
||||||
|
members should be notified in order to take coherent action.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Node Drivers' developers can use this API with an admin context in order to
|
||||||
|
aggregate PTs for their advanced network services.
|
||||||
|
|
||||||
|
Community impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
This kind of problem seems to fit very well in the Label or Multi-Group realm,
|
||||||
|
to which it can eventually migrate (requires wider discussion)
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
* Ivar Lazzaro (mmaleckk)
|
||||||
|
|
||||||
|
Work items
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Tempest tests
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
Functional tests
|
||||||
|
----------------
|
||||||
|
|
||||||
|
|
||||||
|
API tests
|
||||||
|
---------
|
||||||
|
|
||||||
|
|
||||||
|
Documentation impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
User documentation
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer documentation
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
See developer impact
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
[0] https://github.com/stackforge/group-based-policy-specs/blob/master/specs/kilo/gbp-service-chain-driver-refactor.rst
|
||||||
|
[1] http://specs.openstack.org/openstack/neutron-specs/specs/api/allowed_address_pairs.html
|
Loading…
Reference in New Issue
Block a user