You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`--[no-]exclude-unschedulable`| Exclude nodes that are considered unschedulable (default: true) |
30
30
|`--[no-]expose-internal-ipv6`| When using the node source, expose internal IPv6 addresses (optional, default: false) |
31
-
|`--fqdn-template=""`| A templated string that's used to generate DNS names from sources that don't define a hostname themselves, or to add a hostname suffix when paired with the fake source (optional). Accepts comma separated list for multiple global FQDN. |
32
31
|`--gateway-label-filter=""`| Filter Gateways of Route endpoints via label selector (default: all gateways) |
33
32
|`--gateway-name=""`| Limit Gateways of Route endpoints to a specific name (default: all names) |
34
33
|`--gateway-namespace=""`| Limit Gateways of Route endpoints to a specific namespace (default: all namespaces) |
@@ -49,8 +48,7 @@
49
48
|`--target-net-filter=TARGET-NET-FILTER`| Limit possible targets by a net filter; specify multiple times for multiple possible nets (optional) |
50
49
|`--[no-]traefik-enable-legacy`| Enable legacy listeners on Resources under the traefik.containo.us API Group |
51
50
|`--[no-]traefik-disable-new`| Disable listeners on Resources under the traefik.io API Group |
52
-
|`--unstructured-fqdn-resource=UNSTRUCTURED-FQDN-RESOURCE`| When using the unstructured-fqdn source, specify resources in resource.version.group format (e.g., virtualmachineinstances.v1.kubevirt.io); specify multiple times for multiple resources |
53
-
|`--fqdn-target-template=""`| When using the unstructured source, specify the target FQDN template for DNS records |
51
+
|`--unstructured-resource=UNSTRUCTURED-RESOURCE`| When using the unstructured source, specify resources in resource.version.group format (e.g., virtualmachineinstances.v1.kubevirt.io, configmap.v1); specify multiple times for multiple resources |
54
52
|`--events-emit=EVENTS-EMIT`| Events that should be emitted. Specify multiple times for multiple events support (optional, default: none, expected: RecordReady, RecordDeleted, RecordError) |
55
53
|`--provider-cache-time=0s`| The time to cache the DNS provider record list requests. |
56
54
|`--domain-filter=`| Limit possible target zones by a domain suffix; specify multiple times for multiple domains (optional) |
@@ -182,5 +180,8 @@
182
180
|`--webhook-provider-read-timeout=5s`| The read timeout for the webhook provider in duration format (default: 5s) |
183
181
|`--webhook-provider-write-timeout=10s`| The write timeout for the webhook provider in duration format (default: 10s) |
184
182
|`--[no-]webhook-server`| When enabled, runs as a webhook server instead of a controller. (default: false). |
183
+
|`--fqdn-template=""`| A templated string that's used to generate DNS names from sources that don't define a hostname themselves, or to add a hostname suffix when paired with the fake source (optional). Accepts comma separated list for multiple global FQDN. |
184
+
|`--fqdn-target-template=""`| When using the unstructured source, specify the target FQDN template for DNS records |
185
+
|`--fqdn-host-target-template=""`| When using the unstructured source, specify a template that returns host:target pairs (e.g., '{{range .Object.endpoints}}{{.targetRef.name}}.svc.example.com:{{index .addresses 0}},{{end}}'). Mutually exclusive with --fqdn-template and --fqdn-target-template |
185
186
|`--provider=provider`| The DNS provider where the DNS records will be created (required, options: akamai, alibabacloud, aws, aws-sd, azure, azure-dns, azure-private-dns, civo, cloudflare, coredns, digitalocean, dnsimple, exoscale, gandi, godaddy, google, inmemory, linode, ns1, oci, ovh, pdns, pihole, plural, rfc2136, scaleway, skydns, transip, webhook) |
186
187
|`--source=source`| The resource types that are queried for endpoints; specify multiple times for multiple sources (required, options: service, ingress, node, pod, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, istio-gateway, istio-virtualservice, contour-httpproxy, gloo-proxy, fake, connector, crd, empty, skipper-routegroup, openshift-route, ambassador-host, kong-tcpingress, f5-virtualserver, f5-transportserver, traefik-proxy, unstructured) |
- Allows the community to support new CRDs via configuration rather than code changes
20
19
21
20
> **Note**: Prefer built-in sources when available (e.g., `istio-virtualservice`, `gateway-httproute`) as they provide optimized handling for those resource types.
22
21
@@ -65,13 +64,32 @@ status:
65
64
status: "True"
66
65
```
67
66
67
+
**ACK FieldExport** - AWS Controllers for Kubernetes can export resource status (RDS endpoints, S3 bucket URLs) to ConfigMaps via FieldExport, enabling dynamic DNS records
| `--unstructured-fqdn-resource` | Resources to watch in `resource.version.group` format (repeatable) |
89
+
| `--unstructured-resource` | Resources to watch in `resource.version.group` format (repeatable) |
73
90
| `--fqdn-template` | Go template for DNS names |
74
91
| `--fqdn-target-template` | Go template for DNS targets |
92
+
| `--fqdn-host-target-template` | Go template returning `host:target` pairs (mutually exclusive with above two) |
75
93
| `--label-filter` | Filter resources by labels |
76
94
| `--annotation-filter` | Filter resources by annotations |
77
95
@@ -93,12 +111,41 @@ Templates have access to typed-style fields and raw object data:
93
111
94
112
## Examples
95
113
114
+
### ConfigMap DNS Registry
115
+
116
+
Use ConfigMaps as a lightweight DNS registry without needing custom CRDs. Useful for GitOps workflows where teams manage DNS entries via ConfigMaps in their namespaces.
Use AWS Controllers for Kubernetes (ACK) to dynamically populate ConfigMaps with resource endpoints. FieldExport copies values from ACK-managed resources (RDS, S3, ElastiCache) to ConfigMaps, which external-dns can then use for DNS records.
295
+
296
+
```yaml
297
+
# 1. ACK creates an S3 bucket
298
+
apiVersion: s3.services.k8s.aws/v1alpha1
299
+
kind: Bucket
300
+
metadata:
301
+
name: app-assets
302
+
namespace: default
303
+
spec:
304
+
name: my-app-assets-bucket
305
+
---
306
+
# 2. FieldExport copies the bucket URL to a ConfigMap
The `--fqdn-host-target-template` flag returns `host:target` pairs, enabling 1:1 mapping between hostnames and targets. Useful when a Kubernetes resource contains arrays where each element should produce its own DNS record (e.g., EndpointSlice endpoints, multi-host configurations).
401
+
243
402
## RBAC
244
403
245
404
Grant external-dns access to your custom resources:
0 commit comments