Add a Kea DHCP backend
Spec to add a Kea DHCP server as a new backend for Ironic and Neutron. Related-Bug: #2081847 Change-Id: I3324cd4864a87c16a404238bf54dc2aa16a2e64a
This commit is contained in:
parent
6962db3aad
commit
9dd4fdfcbc
245
specs/approved/kea-dhcp-backend.rst
Normal file
245
specs/approved/kea-dhcp-backend.rst
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
================
|
||||||
|
Kea DHCP backend
|
||||||
|
================
|
||||||
|
|
||||||
|
https://bugs.launchpad.net/ironic/+bug/2081847
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
DHCP is a critical service for assigning IP addresses to instances in
|
||||||
|
OpenStack deployments. Both Ironic and Neutron rely on dnsmasq to provide
|
||||||
|
DHCP services. However, dnsmasq has become increasingly unreliable,
|
||||||
|
with intermittent DHCP failures, frequent restarts and crashes of dnsmasq
|
||||||
|
processes, etc.
|
||||||
|
|
||||||
|
Refer to the bug on dnsmasq here:
|
||||||
|
https://bugs.launchpad.net/ironic/+bug/2026757.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add a new Kea DHCP backend for Ironic and Neutron as an alternative DHCP
|
||||||
|
provider. This will provide a more reliable DHCP option that's easily
|
||||||
|
extensible while maintaining compatibility with existing systems.
|
||||||
|
|
||||||
|
* Create a new DHCP provider class extending the BaseDHCP interface.
|
||||||
|
* Add configuration options to enable and configure Kea DHCP.
|
||||||
|
* Add methods to manage DHCP options, leases, and port updates using Kea APIs.
|
||||||
|
* Ensure DevStack support for Kea
|
||||||
|
* Update documentation to cover the addition of Kea DHCP, setup and usage.
|
||||||
|
|
||||||
|
Ironic will interact with the Kea DHCP server via HTTP-based APIs [1]_.
|
||||||
|
|
||||||
|
* ``config-get``, ``config-set``: Manage Kea configuration
|
||||||
|
* ``reservation-get``: Retrieve host reservations that will be handled
|
||||||
|
externally via a host-reservation database shared between Kea and
|
||||||
|
Ironic/Neutron query to retrieve reservation data. Dynamic reservation
|
||||||
|
updates (``reservation-add`` and ``reservation-del``) require a premium ISC
|
||||||
|
subscription and are not supported in this implementation [3]_.
|
||||||
|
* ``lease4-get``, ``lease6-get``: Retrieve lease information
|
||||||
|
* ``subnet4-add``, ``subnet6-add``: Add new subnets
|
||||||
|
* ``statistic-get``: Monitor DHCP server statistics
|
||||||
|
|
||||||
|
The Kea DHCP backend can be added with or without an agent layer. Both
|
||||||
|
approaches will use Kea's HTTP-based APIs, but differ in their architecture
|
||||||
|
and how Ironic interacts with the Kea DHCP server.
|
||||||
|
|
||||||
|
An agent approach has more moving parts and complexity, but better scalability
|
||||||
|
for large deployments, local management of Kea instances and reduced network
|
||||||
|
traffic to central Ironic service.
|
||||||
|
|
||||||
|
* Flow: Ironic → Driver → Agents → Kea Servers
|
||||||
|
* Kea DHCP Agent is deployed on each DHCP server node and manages local Kea
|
||||||
|
config and handles communication between Ironic and Kea.
|
||||||
|
* Ironic DHCP Driver implements Ironic DHCP interface and communicates with
|
||||||
|
the Kea DHCP Agent.
|
||||||
|
* Ironic sends DHCP configuration to Ironic DHCP Driver which in turn
|
||||||
|
distributes it to Kea agents to apply config to local Kea servers.
|
||||||
|
* For lease management, agents monitor local Kea lease changes report changes
|
||||||
|
back to Ironic DHCP Driver.
|
||||||
|
|
||||||
|
The agentless approach will have a much simpler architecture, probably easier
|
||||||
|
to implement and maintain with direct control from Ironic, but may not scale
|
||||||
|
as well, increased network traffic to Kea servers and even a potential
|
||||||
|
performance impact on Ironic for large-scale operations.
|
||||||
|
|
||||||
|
* Flow: Ironic driver translates configs to Kea API calls and applies changes
|
||||||
|
directly to Kea servers.
|
||||||
|
* Ironic manages all Kea servers, through direct Kea API no agent layer.
|
||||||
|
* The Ironic driver translates configs to Kea API calls and applies changes
|
||||||
|
directly to Kea servers.
|
||||||
|
* For lease management, maybe a periodic polling of Kea servers for lease
|
||||||
|
updates, or, a webhook mechanism.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Find a way to improve existing Dnsmasq implementations. It's worth noting
|
||||||
|
that dnsmasq has inherent limitations as it's really intended for small
|
||||||
|
computer networks even though Ironic has been using it for the longest, so
|
||||||
|
addressing these problems may require significant re-engineering. It's also
|
||||||
|
single maintainer OSS project, as of the time of this specification.
|
||||||
|
The fact it is a single maintainer project results in long spans of
|
||||||
|
inactivity, which increases consumer risk for a project like OpenStack.
|
||||||
|
* Use a different DHCP provider than Kea that is also actively maintained,
|
||||||
|
provides the reliability, flexibility, and integration Kea offers or better.
|
||||||
|
* Develop a completely new, custom DHCP server which will be quite an
|
||||||
|
undertaking and additional long-term technical debt.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
No changes to Ironic's data model are required.
|
||||||
|
|
||||||
|
State Machine Impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
No changes to the state machine are required.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
No changes to the REST API are required.
|
||||||
|
|
||||||
|
|
||||||
|
Client (CLI) impact
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
No changes to python-ironicclient are required.
|
||||||
|
|
||||||
|
RPC API impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
No changes to the RPC API are required.
|
||||||
|
|
||||||
|
Driver API impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
A new DHCP provider class will be added, but this should not impact existing
|
||||||
|
drivers.
|
||||||
|
|
||||||
|
Nova driver impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Ramdisk impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
No changes to the ironic-python-agent or ramdisk are required.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
There's no expected security trade-offs with the addition of a Kea DHCP
|
||||||
|
backend. The increase in options for operators limits overall risk by
|
||||||
|
providing additional options, which should be a net security gain.
|
||||||
|
|
||||||
|
In the event of such occurrences in the future, its active development will
|
||||||
|
likely ensure timely security updates.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Scalability impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Kea DHCP is designed for better scalability than dnsmasq, which could improve
|
||||||
|
performance, especially for large deployments.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Kea DHCP will likely offer performance improvements over dnsmasq, especially
|
||||||
|
for large deployments with thousands of machines.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Deployers will need to install and configure the Kea DHCP server
|
||||||
|
alongside Ironic, likely in the same manner as dnsmasq, but with Kea-specific
|
||||||
|
configurables such as network interfaces, IP address ranges, and lease times.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
Afonne-CID (cid).
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
Jay Faulkner (JayF).
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Write a Kea DHCP backend extending the BaseDHCP interface.
|
||||||
|
* Add unit tests and DevStack support for running with Kea.
|
||||||
|
* Configure at least one CI job to use Kea DHCP.
|
||||||
|
* Add Bifrost support for the new Kea DHCP backend.
|
||||||
|
* Implement unmanaged inspection support for Kea DHCP.
|
||||||
|
* Update documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
* Kea DHCP server [2]_.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Add tests to verify full DevStack support, new Tempest tests specific to
|
||||||
|
Kea DHCP functionality, and new unit tests for:
|
||||||
|
* Retrieving lease information via Kea APIs.
|
||||||
|
* Ensuring Kea correctly reads from the host-reservation database.
|
||||||
|
|
||||||
|
Upgrades and Backwards Compatibility
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Existing dnsmasq support will remain unchanged.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
* Full documentation on Kea’s capabilities and how it's different from dnsmasq
|
||||||
|
with cross-references to external Kea resources.
|
||||||
|
* Document configuration options and steps on switching from dnsmasq to Kea,
|
||||||
|
including configuring Kea to use a read-only host-reservation database and
|
||||||
|
how to set up Ironic/Neutron to manage this database.
|
||||||
|
* Installation, configuration, and architecture documentations should present
|
||||||
|
Kea as a configurable option, with clear instructions on how users can choose
|
||||||
|
between Kea and dnsmasq.
|
||||||
|
* API documentation will need to be updated to reflect any changes to existing
|
||||||
|
methods and how they now interact with Kea compared to dnsmasq.
|
||||||
|
* Sections of the current documentation that might have referenced dnsmasq as
|
||||||
|
the default or only DHCP provider will need to be updated to reflect that
|
||||||
|
Kea is now also a supported backend.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. [1] https://kea.readthedocs.io/en/latest/api.html
|
||||||
|
.. [2] https://www.isc.org/kea/
|
||||||
|
.. [3] https://kea.readthedocs.io/en/latest/arm/hooks.html
|
1
specs/not-implemented/kea-dhcp-backend.rst
Symbolic link
1
specs/not-implemented/kea-dhcp-backend.rst
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../approved/kea-dhcp-backend.rst
|
Loading…
Reference in New Issue
Block a user