External DNS
Purpose: Automatic DNS record synchronization
Version: v1.0.0 (Helm chart: external-dns/external-dns)
Namespace: external-dns
Description
Automatically creates and manages DNS records based on Kubernetes ingress resources. Integrates with Cloudflare for DNS management.
Installation
Installed via ArgoCD from Helm chart: external-dns/external-dns
Configuration
Configuration file: config/dev/applications/external-dns-values.yaml
provider: cloudflare
registry: txt
txtOwnerId: k8s
domainFilters:
- ssdk8s.xyz
sources:
- ingress
policy: sync
DNS Provider
- Provider: Cloudflare
- Domain:
ssdk8s.xyz
Prerequisites
Cloudflare API token stored as secret:
kubectl create secret generic cloudflare-api-token \
-n external-dns \
--from-literal=api-token=YOUR_CF_API_TOKEN
How It Works
- Create an Ingress resource
- ExternalDNS watches for ingress changes
- Automatically creates/updates DNS records in Cloudflare
Example
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
external-dns.alpha.kubernetes.io/hostname: myapp.ssdk8s.xyz
external-dns.alpha.kubernetes.io/ttl: "300"
spec:
ingressClassName: nginx
rules:
- host: myapp.ssdk8s.xyz
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Annotations
| Annotation | Description | Default |
|---|---|---|
external-dns.alpha.kubernetes.io/hostname | DNS name to create | - |
external-dns.alpha.kubernetes.io/ttl | TTL for DNS record | 300 |
external-dns.alpha.kubernetes.io/ingress-class | Ingress class to watch | all |