mydb-falkordb-falkordb.falkordb-system.svc.cluster.local. Those names resolve
only inside the cluster’s CoreDNS, so workloads that live elsewhere — a second
Kubernetes cluster, an EC2/VM tier, a peered VPC — cannot use them.
This page describes how to publish stable, network-wide DNS names that resolve
directly to pod IPs, so clients reach a FalkorDB pod in a single hop with no
kube-proxy or load balancer in between.
Prerequisite: routable pod IPs
Pod IPs must be routable from the network the clients live in. This is true when the CNI allocates pod IPs from the VPC address space:
On an overlay network the pod CIDR is only meaningful inside the cluster; DNS
records pointing at pod IPs will resolve but will not be reachable. Use a
LoadBalancer service instead in that case.
Also confirm that security groups / network policies allow the client network to
reach the pod CIDR on
6379 (and 26379 when using Sentinel).
Prerequisite: ExternalDNS
The admin server annotates the services it creates; an ExternalDNS controller in the cluster turns those annotations into records. Install it with a provider for your private zone, for example a Route 53 private hosted zone attached to the VPC:policy=sync lets ExternalDNS delete records when a database is deleted.
Restrict domainFilters to the zone you delegate to FalkorDB so the controller
cannot touch unrelated records.
Enabling it
For the whole installation
Set the default domain once and every new database inherits it:For a single database
In the admin UI, open the Networking step of the create wizard and turn on Publish external DNS names, then enter your domain. The step previews the zones that will be created. From the API, setspec.externalDomain when creating a database:
PATCH the database with "externalDomain": "". The records and the services
backing them are removed. Because the domain is passed to the pods as an
environment variable, changing it rolls the pods one at a time.
What gets created
For a database namedorders with externalDomain: db.internal.example.com:
Sentinel gets its own zone because a Sentinel client that dialled a FalkorDB pod
on 26379 would hang.
The apex is a multi-A record — exactly what a Redis Cluster seed list or a
Sentinel address list wants. The per-pod names are stable across rescheduling
and are what the servers announce to each other.
Under the hood the admin server:
- Creates a headless service (
clusterIP: None,publishNotReadyAddresses: true) per component, annotated withexternal-dns.alpha.kubernetes.io/hostnameand a 30 s TTL. Because it is headless, its endpoints are pod IPs, so ExternalDNS emits A records that point at pods rather than at a virtual service IP. - Sets
ANNOUNCE_HOSTNAME_OVERRIDE=$(CURRENT_POD_NAME).<zone>on the FalkorDB and Sentinel components. The kubelet expands$(CURRENT_POD_NAME)per pod, so one environment variable produces a distinct name for every replica.
falkordb.com/managed-by: external-dns, are hidden
from the database’s service list in the UI and API, and are reconciled by the
admin server — do not edit them by hand.
How each topology announces itself
Because clients follow whatever the server announces, all three topologies keep
working through failover and rescheduling without client-side configuration.
Connecting
The connection card in the admin UI shows both addresses once an external domain is configured: Host (external) for workloads outside the cluster and Host (in-cluster) for workloads next to the database. The credentials API returns both asexternalHostname and internalHostname.
Caveats
- DNS caching. Records use a 30 s TTL, but many client runtimes (notably the
JVM) cache DNS more aggressively. After a pod is rescheduled its name may
point at a stale IP until the cache expires. Configure your client’s DNS TTL
(for example the JVM’s
networkaddress.cache.ttl) to 30 seconds or less. - Propagation delay. A newly created database is not resolvable until ExternalDNS syncs (typically under a minute) and the record propagates.
- Zone ownership. Point
domainFiltersat a zone dedicated to FalkorDB. ExternalDNS withpolicy=syncdeletes records it believes it owns. - Sharded clusters on routable pod IPs already work from outside the cluster
via
MOVEDredirects to pod IPs. An external domain is still worth setting so clients get stable names rather than IPs that change on rescheduling.
Alternative: CoreDNS forwarding
If you do not want to run ExternalDNS and the client network already routes to pod IPs, you can instead forward thecluster.local zone from the client
network’s resolver to the FalkorDB cluster’s CoreDNS. This keeps the existing
in-cluster names working everywhere and requires no changes to the database, but
it couples the two networks’ DNS and every lookup still resolves to a service IP
— you keep the kube-proxy hop that this feature removes.