A specialized webhook provider for ExternalDNS that enables automated record management for Technitium DNS Server.
This project is designed to run exclusively as a sidecar container within the external-dns pod. It implements the ExternalDNS Webhook provider API to bridge Kubernetes resource discovery with Technitium's management API.
| Environment Variable | Default value | Required |
|---|---|---|
| TECHNITIUM_HOST | localhost | true |
| TECHNITIUM_PORT | 5380 | true |
| TECHNITIUM_USER | false | |
| TECHNITIUM_PASSWORD | false | |
| TECHNITIUM_TOKEN | false | |
| TECHNITIUM_SESSION_TTL | false | |
| TECHNITIUM_SSL_VERIFY | false | false |
| TECHNITIUM_DRY_RUN | false | false |
| TECHNITIUM_CREATE_PTR | false | false |
| TECHNITIUM_DEFAULT_TTL | 300 | false |
| TECHNITIUM_USE_TTL | true | false |
Note: You have to either provide
TECHNITIUM_USERandTECHNITIUM_PASSWORDor justTECHNITIUM_TOKEN
| Record Type | Status |
|---|---|
| A (IPv4) | Supported |
| AAAA (IPv6) | Supported |
| CNAME | Supported |
| TXT | Supported |
You can manage these records types. PTR records and the zones will be created and/or deleted (Zones will not be deleted unless all records are gone and TECHNITIUM_DELETE_PTR_ZONE is set to true.)
Setting up Technitium doesn’t have to be a chore. I’ve polished your instructions to make them more professional, readable, and authoritative while keeping that helpful peer-to-peer vibe.
Follow these streamlined steps to configure your users and zones correctly.
Before managing records, you need a user with the appropriate permissions.
- Navigate: Go to the Administration tab and select the Users sub-tab.
- Create User: Click to add a new user.
Note: Ensure the Username and Password contain no spaces. The Display Name is purely cosmetic and can be formatted however you like.
- Assign Permissions: Add the new user to the DNS Administrators group.
- Session Management: You may set the Session Timeout to
0for an indefinite session. However, the application is designed to automatically re-authenticate and refresh the API key before the timeout expires.
The API requires an existing zone to function. Please ensure your target zone is created manually before proceeding.
- Navigate: Open the Zones tab in the top navigation bar.
- Initialize: Click the Add Zone button.
- Select Type: Choose your required zone type.
- Primary Zone: The standard choice for most setups.
- Other: Consult your DNS Engineer if your infrastructure requires a Secondary or Forwarding zone.
- Finalize: Click Add to save the configuration.
To compile the project locally, execute:
make buildTo remove build artifacts and clean your workspace:
make cleanIf you are contributing to this project, you must first initialize the linting environment:
make lint-initThis command installs all necessary dependencies and tools for code analysis.
Once initialized, you can analyze the codebase by running:
make lintTo verify only the project licenses, use:
make licenseTo execute the unit testing suite, run:
make testWe welcome all Pull Requests! To ensure a smooth review process, please adhere to the following requirements:
- ✅ Validation: Ensure your changes pass all checks. Running
make lintwill automatically verify code quality and inject the required license headers into required source files. - 🧪 Testing: All new functionality must include corresponding unit tests. A successful test pass is required for any merge to the
mainbranch. - ✍️ Security: The final commit of your PR must be signed (e.g., GPG/SSH) before it can be merged for release.
A huge thank you to the Technitium team for building such a robust, high-performance, and feature-rich open-source DNS server. This project is intended to make integrating their excellent software with Kubernetes seamless and efficient.
Building and maintaining open-source tools takes time and focus. I want to give a special thanks to my wife, my daughter, and my son. Your support and patience allow me the space to be a "geek" and contribute back to the community. You are my greatest motivation!
A special thanks to the external-dns-infoblox-webhook team. This plugin is based on their excellent work—thank you for providing such a solid foundation for the community!
This project is licensed under the Apache License 2.0. See the LICENSE file for details.