A webhook provider for External DNS that enables automatic DNS record management for Rackspace Cloud DNS.
This webhook integrates External DNS with Rackspace Cloud DNS, allowing Kubernetes services and ingresses to automatically create, update, and delete DNS records in your Rackspace-managed domains.
- Automatic DNS Management: Creates and manages DNS records based on Kubernetes services and ingresses
- Multiple Record Types: Supports A, AAAA, CNAME, TXT, and other standard DNS record types
- Domain Filtering: Configure which domains the webhook should manage
- TTL Management: Configurable TTL values with automatic normalization (minimum 300s)
- Dry Run Mode: Test changes without actually modifying DNS records
- Health Checks: Built-in health endpoints for monitoring
- Kubernetes cluster with External DNS installed
- Rackspace Cloud DNS account with API access
- Rackspace username and API key## Qui ck Start
kubectl create secret generic external-dns-rackspace-webhook \
--from-literal=username="your-rackspace-username" \
--from-literal=api-key="your-rackspace-api-key" \
-n external-dns
kubectl apply -f examples/deploy.yaml
kubectl apply -f examples/nginx.yaml
Variable | Required | Default | Description |
---|---|---|---|
RACKSPACE_USERNAME |
Yes | - | Rackspace account username |
RACKSPACE_API_KEY |
Yes | - | Rackspace API key |
DOMAIN_FILTER |
No | - | Comma-separated list of domains to manage |
DRY_RUN |
No | false |
Enable dry run mode (no actual changes) |
LOG_LEVEL |
No | info |
Log level (debug, info, warn, error) |
PORT |
No | 8888 |
HTTP server port |
Configure External DNS to use this webhook:
args:
- --source=service
- --source=ingress
- --provider=webhook
- --registry=noop
- --webhook-provider-url=http://localhost:8888
- --domain-filter=example.com
- --policy=upsert-only
# Build binary
make build
# Build Docker image
make docker-build
# Run tests
make test
export RACKSPACE_USERNAME="your-username"
export RACKSPACE_API_KEY="your-api-key"
export DOMAIN_FILTER="example.com"
make run
GET /
- Negotiation endpoint (returns domain filter)GET /records
- Retrieve all DNS recordsPOST /records
- Apply DNS record changesPOST /adjustEndpoints
- Normalize and validate endpointsGET /healthz
- Health check endpoint
docker run -e RACKSPACE_USERNAME=user -e RACKSPACE_API_KEY=key \
ghcr.io/rackerlabs/external-dns-rackspace-webhook:latest
docker build -t external-dns-rackspace-webhook .
- Authentication Errors: Verify your Rackspace username and API key
- Domain Not Found: Ensure the domain exists in your Rackspace Cloud DNS
- Permission Denied: Check that your API key has DNS management permissions
- TTL Too Low: The webhook enforces a minimum TTL of 300 seconds
Enable debug logging to see detailed operation logs:
env:
- name: LOG_LEVEL
value: "debug"
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the terms specified in the LICENSE file.
For issues and questions:
- Create an issue in this repository
- Check the External DNS documentation
- Review Rackspace Cloud DNS API documentation