define get plumbing info terminology
Change-Id: Ib8833495667763de3254815ce7debe25102854b5 Defines: blueprint node-centric-chain-plugin
This commit is contained in:
parent
7927bf423f
commit
0717ddccb7
211
specs/kilo/traffic-stitching-plumber-placement-type.rst
Normal file
211
specs/kilo/traffic-stitching-plumber-placement-type.rst
Normal file
@ -0,0 +1,211 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==========================================
|
||||
Service Chain Driver Refactor
|
||||
==========================================
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
As part of the service chain refactor effort [0] GBP now supports the ability to provision
|
||||
"node centric" service chains that are composed of interoperable multi-vendor service
|
||||
nodes linked by a Plumber, which takes care of placing the services in the underlying
|
||||
infrastructure in a way that complies with the user intent.
|
||||
Each Node Driver will expose a set of networking requirements via the get_plumbing_info
|
||||
API, that will be used by the plumber to ensure that the traffic flows correctly.
|
||||
As for today, we have 2 main limitations:
|
||||
|
||||
* How get_plumbing_info looks like is not very clear;
|
||||
* There's no plumber implementation that can comply with the NCP requirements.
|
||||
|
||||
This document will address the first problem, and is intended as a discussion ground
|
||||
to define the terminology and use cases
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
To give some context, the proposal of this and at least one subsequent blueprint is to design
|
||||
a Traffic Stitching Plumber (TScP) that uses the GBP underlying constructs in order to guarantee
|
||||
a correct traffic flow across services from their provider to the consumer and vice versa.
|
||||
As discussed in [0] the output of the plumbing operations will be either the creation or
|
||||
deletion of a set of Service Targets, which effectively result in creation of Policy Targets exposed
|
||||
to the specific Node Driver for its own use. In addition to that, TScP will create a set of L2Ps
|
||||
and/or PTGs that are "stitched" together and host the actual service PTs.
|
||||
|
||||
A requirement for the above is to go through all the use cases and iteratively define what a
|
||||
get_plumbing_info call should provide in order for any Plumber (and so TScP) to be able to do
|
||||
its job.
|
||||
|
||||
Get Plumbing Info
|
||||
The plumbing info is defined as a collection of needed policy targets on a specific role,
|
||||
this may vary based on the node (obtained from the NodeDriverContext) that the specific
|
||||
driver is asked to deploy. An example of plumbing info is the following::
|
||||
|
||||
{
|
||||
"management": <list of updated PT body dicts, one for each needed>,
|
||||
"provider": <list of updated PT body dicts, one for each needed>,
|
||||
"consumer": <list of updated PT body dicts, one for each needed>
|
||||
}
|
||||
|
||||
The role (key of the above dictionary) specifies in which "side" the policy target has to
|
||||
exist. Depending on the kind of chaining the Neutron port could actually be placed somewhere else!
|
||||
The value is a list of attributes intended to override the PT body. This could be used, for example,
|
||||
for providing explicit Neutron Ports when the driver requires it or for establishing a naming
|
||||
convention for the PTs. An empty dictionary will be mostly used in this case, which will
|
||||
indicate a basic PT creation::
|
||||
|
||||
{
|
||||
"management": [{}], # One PT needed in the management
|
||||
"provider": [{}, {port_id: 'a'}], # Two PT needed in the provider
|
||||
"consumer": [] # Zero PT needed in the consumer
|
||||
}
|
||||
|
||||
The above dictionary tells the plumber how many interfaces the node needs and where to place them.
|
||||
What it doesn't tell, however, is how this service will behave in the network, which is a fundamental
|
||||
information when it comes to define the interaction with its neighbors (services).
|
||||
The proposal is to add a "plumbing_type" attribute to the above dictionary that defines some well known
|
||||
placement options for nodes. For every option, there has to be a rationale to identify how all the services of
|
||||
that class will work, what kind of neighbors they require (or disallow) and at least one supporting plumber
|
||||
has to exist in order to validate that the placement works as expected. Last but not least, a clear
|
||||
use case should be brought up in the form of an example service.
|
||||
Possibly, limitations and behaviors of all the plumbing_types will be the same across plumbers.
|
||||
|
||||
In this iteration, to be supported by TScP, we propose the following plumbing types:
|
||||
|
||||
Endpoint
|
||||
* Rationale: An Endpoint needs to be directly reachable by the consumers, it is basically a traditional PT presented
|
||||
in the form of a service. This kind of services are typically useful only when directly addressed, and
|
||||
are irrelevant to the traffic course otherwise. The Endpoint Services typically get a VIP on the provider subnet.
|
||||
* Neighborhood Limitations: Because of the above, the provider side interface of an Endpoint Service typically
|
||||
is the provider itself (ie first node of the chain).
|
||||
* Cardinality Limitations: Because of the above, the number of Endpoint Services in any given chain should be one.
|
||||
Having more than one Endpoint is certainly possible, but it will defy the definition of "chain" since the consumers can
|
||||
only address one of them at a time.
|
||||
* Initial Supporting Plumber(s): Traffic Stitching Plumber
|
||||
* Example Services: L4-7 Load Balancer (Reverse Proxy)
|
||||
|
||||
Gateway
|
||||
* Rationale: A gateway service is a router that the PTs will use for reaching certain (or all the) destinations.
|
||||
This kind of service usually works on the packets that it's entitled to route, never modifying the Source IP Address.
|
||||
Traffic can indeed be dropped, inspected or otherwise manipulated by this kind of service.
|
||||
* Neighborhood Limitations: None
|
||||
* Cardinality Limitations: None
|
||||
* Initial Supporting Plumber(s): Traffic Stitching Plumber
|
||||
* Example Services: Router, Firewall, -Transport- Mode VPN
|
||||
|
||||
Transparent
|
||||
* Rationale: A transparent service is either a L2 or a BITW service. This kind of service usually has 2 logical data
|
||||
interfaces, and everything that is received in either of them is pushed on the other after processing. The 2 interfaces
|
||||
typically exist in the same subnet, so traffic is not router but switched (or simply mirrored) instead.
|
||||
* Neighborhood Limitations: None
|
||||
* Cardinality Limitations: None
|
||||
* Initial Supporting Plumber(s): Traffic Stitching Plumber
|
||||
* Example Services: Transparent FW, IDS, IPS
|
||||
|
||||
TODO: We have defined a service such as a tunnel mode VPN to be characterizable as a Gateway + a Floating IP (somehow similar
|
||||
to a Gateway+Endpoint kind of service). We will add this new plumbing type in a subsequent update once completely define.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Developers of a NCP Node Driver will have to be compliant with the get_plumbing_info API and the meaning of its
|
||||
fields. They also have to make sure that a service deployed with a given plumbing_type behaves as expected.
|
||||
|
||||
Community impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
The multi service chain plugin (MSC) works at the chain, not the node, level and doesn't need a plumber.
|
||||
Drivers developed for MSC don't need to comply with any of the above.
|
||||
|
||||
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
|
Loading…
Reference in New Issue
Block a user