External DNS
External DNS automatically manages DNS records for Kubernetes resources. Use it to automatically create DNS records for Agent Gateway endpoints.
Why use External DNS with Agent Gateway?
- Automatic DNS - DNS records created automatically from Gateway/Service resources
- Multiple providers - AWS Route53, Google Cloud DNS, Cloudflare, Azure DNS, and more
- Sync on change - Records updated when resources change
- TTL management - Configurable DNS TTL
Prerequisites
Install External DNS for your cloud provider. Example for AWS Route53:
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
spec:
selector:
matchLabels:
app: external-dns
template:
metadata:
labels:
app: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.14.0
args:
- --source=gateway-httproute
- --provider=aws
- --aws-zone-type=public
- --registry=txt
- --txt-owner-id=my-clusterGateway API integration
External DNS can read hostnames from Gateway resources:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: agentgateway
spec:
gatewayClassName: agentgateway
listeners:
- name: https
protocol: HTTPS
port: 443
hostname: "ai.example.com" # External DNS creates this recordExternal DNS automatically:
- Watches for Gateway resources
- Extracts the hostname
- Creates/updates DNS records pointing to the Gateway’s external IP
HTTPRoute hostnames
External DNS also reads hostnames from HTTPRoute:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: ai-api
annotations:
external-dns.alpha.kubernetes.io/hostname: api.example.com
spec:
parentRefs:
- name: agentgateway
hostnames:
- "api.example.com"
rules:
- backendRefs:
- name: agentgateway
port: 3000Annotations
Control External DNS behavior with annotations:
metadata:
annotations:
# Set specific hostname
external-dns.alpha.kubernetes.io/hostname: ai.example.com
# Set TTL
external-dns.alpha.kubernetes.io/ttl: "300"
# Use specific target
external-dns.alpha.kubernetes.io/target: 1.2.3.4Provider examples
Cloudflare
args:
- --source=gateway-httproute
- --provider=cloudflare
- --cloudflare-proxied # Enable Cloudflare proxy
env:
- name: CF_API_TOKEN
valueFrom:
secretKeyRef:
name: cloudflare-credentials
key: api-tokenGoogle Cloud DNS
args:
- --source=gateway-httproute
- --provider=google
- --google-project=my-projectAzure DNS
args:
- --source=gateway-httproute
- --provider=azure
- --azure-resource-group=my-rg
- --azure-subscription-id=my-sub-id