A webhook provider for ExternalDNS that enables automatic DNS record management in Simply.com.
This webhook adapter allows ExternalDNS to manage DNS records in Simply.com via their public REST API. ExternalDNS automatically creates, updates, and deletes DNS records based on Kubernetes resources like Services and Ingresses.
- Full support for ExternalDNS webhook interface
- Manages A, CNAME, TXT, and other DNS record types
- Handles record creation, updates, and deletions
- Supports TTL management
- Domain filtering support
- Kubernetes-native deployment
- Kubernetes cluster (1.19+)
- ExternalDNS (v0.14.0+)
- Simply.com account with API access
- Simply.com API key
- Log in to your Simply.com account
- Navigate to API settings
- Get your account name and API key
# Clone the repository
git clone https://github.com/uozalp/external-dns-simply-webhook.git
cd external-dns-simply-webhook
# Create namespace
kubectl create namespace external-dns
# Create secret with your Simply.com credentials
kubectl create secret generic simply-credentials \
--from-literal=account-name='YOUR_ACCOUNT_NAME' \
--from-literal=api-key='YOUR_API_KEY' \
-n external-dns
# Deploy the webhook
kubectl apply -f deploy/deployment.yaml
# Deploy ExternalDNS
kubectl apply -f deploy/external-dns.yamlNote: You can optionally edit deploy/deployment.yaml and deploy/external-dns.yaml to set specific domain(s) in the DOMAIN_FILTER and --domain-filter settings. If not set, all domains managed by Simply.com will be used.
The webhook is configured via environment variables in the deployment:
| Variable | Description | Required | Default |
|---|---|---|---|
SIMPLY_ACCOUNT_NAME |
Simply.com account name | Yes | - |
SIMPLY_API_KEY |
Simply.com API key | Yes | - |
DOMAIN_FILTER |
Comma-separated list of domains to manage | No | All domains |
LOG_LEVEL |
Logging level (debug, info, warn, error) | No | info |
PORT |
HTTP server port | No | 8888 |
ExternalDNS configuration:
args:
- --source=service # Watch Services
- --source=ingress # Watch Ingresses
- --domain-filter=example.com # Only manage this domain
- --provider=webhook
- --webhook-provider-url=http://external-dns-simply-webhook.external-dns.svc.cluster.local:8888
- --policy=upsert-only # Don't delete records (or use 'sync')
- --registry=txt # Use TXT registry for ownership
- --txt-owner-id=my-cluster-id # Unique identifier for this cluster
- --interval=1m # Sync intervalThe webhook exposes the following endpoints:
| Method | Path | Description |
|---|---|---|
| GET | /records |
Returns current DNS records |
| POST | /records |
Applies DNS record changes |
| POST | /adjustendpoints |
Normalizes endpoints (optional) |
| GET | /healthz |
Health check endpoint |
All endpoints use Content-Type: application/external.dns.webhook+json;version=1
- Go 1.21+
- Docker (for building images)
- kubectl (for testing)
# Install dependencies
make deps
# Build binary
make build
# Run locally
export SIMPLY_ACCOUNT_NAME='your-account-name'
export SIMPLY_API_KEY='your-api-key'
export DOMAIN_FILTER='example.com'
make run# Run tests
make test
# Format code
make fmt
# Lint code
make lint# Build image
make docker-build VERSION=v1.0.0
# Push image
make docker-push VERSION=v1.0.0Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- ExternalDNS - Kubernetes DNS automation
- Simply.com - DNS provider
For issues and questions:
- Open an issue on GitHub
- Check ExternalDNS documentation: https://kubernetes-sigs.github.io/external-dns/