Kubernetes controller that automatically creates and deletes DNS records for Namespaces based on annotations.
- Watches Namespace add/update/delete events.
- Creates DNS records on namespace creation.
- Deletes DNS records on namespace deletion.
- Supports multiple DNS providers:
- Google Cloud DNS
- AWS Route53
- Cloudflare
- Uses environment-based configuration for credentials and runtime behavior.
- Go 1.21+
- Access to a Kubernetes cluster
- DNS provider credentials
go mod tidy
go build -o 01cloud-dns-controller .docker build -t 01cloud-dns-controller:latest .cp .env.sample .env
# edit .env with real values
./01cloud-dns-controller --kubeconfig="$HOME/.kube/config"cp .env.sample .env
# edit .env with real values
./01cloud-dns-controllerapiVersion: v1
kind: Namespace
metadata:
name: demo
annotations:
app.01cloud.io/dns_provider: cloudflare # one of: gcp | aws | cloudflare
app.01cloud.io/dns_base: example.com
app.01cloud.io/dns_target: lb.example.net
app.01cloud.io/dns_type: CNAMEThe controller reads configuration from environment variables.
| Variable | Required | Description |
|---|---|---|
BASE_DOMAIN |
optional | Base domain for your platform. |
ZONE_NAME |
required | DNS zone name / hosted zone identifier (provider-specific usage). |
GCLOUD_PROJECT |
required for GCP | Google Cloud project ID for Cloud DNS. |
AWS_DEFAULT_REGION |
required for AWS | AWS region. |
AWS_ACCESS_KEY_ID |
required for AWS | AWS access key ID. |
AWS_SECRET_ACCESS_KEY |
required for AWS | AWS secret access key. |
CLOUDFLARE_API_TOKEN |
required for Cloudflare | Cloudflare API token with DNS edit permissions. |
Tip: Use
.env.sampleas your starting point and keep secrets in.env(already ignored by Git).
Contributions are welcome. Please read CONTRIBUTING.md before opening issues or pull requests.
Please do not report vulnerabilities publicly. See SECURITY.md for responsible disclosure instructions.
This project is currently licensed under Apache License 2.0. See LICENSE.