LBaaS refactor HAProxy namespace driver

Refactor LBaaS HAproxy namespace driver to use new driver interface.

Implements: blueprint
lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface

Change-Id: Icf2c6327def11ea207e7eafb0b5d520919e2e6bf
This commit is contained in:
Dustin Lundquist 2014-06-18 11:09:45 -07:00
parent 6520ba532a
commit 2c32cb9c33
1 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,154 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=======================================
LBaaS Refactor HAProxy namespace driver
=======================================
https://blueprints.launchpad.net/neutron/+spec/lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface
With the new LBaaS object model and driver interface we no longer have a
working reference implementation.
Problem description
===================
Existing HAProxy namespace driver does not implement new LBaaS driver API or
support multiple listeners load balancer as supported by new LBaaS object
model.
Proposed change
===============
Refactor LBaaS HAProxy namespace driver to use new object model driver
interface.
Use Jinja2 to render HAProxy configuration template, rather than the custom
configuration generation.
HAProxy configurations may include multiple listeners per load balancer in a
single HAProxy process.
Separate files in $state_path/lbaas/$lb_uuid/ placing files written by HAProxy
under $state_path/lbaas/$lb_uuid/run to prepare for storing TLS private keys
under $state_path/lbaas/$lb_uuid/. Renaming configuration file, PID file and
statistics socket stored in $state_path/lbaas/$lb_uuid/ to avoid name conflicts
with Stunnel. Further TLS related changes are outside the scope of this spec.
The new directory structure will look like this:
::
$state_path/lbaas/$lb_uuid/
$state_path/lbaas/$lb_uuid/haproxy.conf
$state_path/lbaas/$lb_uuid/run/
$state_path/lbaas/$lb_uuid/run/haproxy.pid
$state_path/lbaas/$lb_uuid/run/haproxy_stats.sock
The driver will need to detect if the sock and/or PID files are not present in
the new locations, and upgrade the running load balancer namespace to this new
file system. This will result in a brief interruption of load balancer service
while HAProxy is shutdown and configuration updated.
Further TLS and Layer 7 content filtering/manipulation are outside the scope of
this spec, but other specs may depend on this.
Alternatives
------------
Implement a different LBaaS reference driver.
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
Restricting write access to $state_path/lbaas/$lb_uuid/ to root, and placing
HAProxy modified files in $state_path/lbaas/$lb_uuid/run/.
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
Preformance should remain similar to existing HAProxy namespace driver.
Other deployer impact
---------------------
The deployer will need to stop the lbaas-agent before while restarting
neutron-server upgrade the database schema and RPC protocol.
The deployer should also note the interruption in load balancer services and
each namespace's file system is updated to the new configuration.
Adding Jinja2 requirement for HAProxy namespace driver functionality, this is
already used within Neutron by the VPNaaS driver.
Developer impact
----------------
This will significantly affect the HAProxy namespace driver in order to
accommodate the new driver interface and multiple listeners.
Addition of Jinja2 requirement for LBaaS support may require DevStack updates.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
https://launchpad.net/~dlundquist
Other contributors:
https://launchpad.net/~phillip-toohill
Work Items
----------
* Develop Jinja2 template for HAProxy configuration.
* Update HAProxy namespace driver.
Dependencies
============
* LBaaS API and object model improvements
* LBaaS object model driver changes
Testing
=======
Implementation of this spec will allow end to end testing of new LBaaS object
model.
Documentation Impact
====================
None
References
==========
* specs/juno/lbaas-api-and-objmodel-improvement.rst
* specs/juno/lbaas-objmodel-driver-changes.rst