Skip to main content
Version: v3.8.0

DNS and service discovery

Edgelet provides bridge-network service discovery for microservices on a single node. Behavior depends on containerEngine in config.

EngineMechanismAuthoritative resolver
edgelet (linux embed)Embedded DNS on bridge gateway + per-container resolv.conf / /etc/hostsYes
dockerUser-defined bridge edgelet + network aliases + ExtraHostsNo
podmanSame as docker (shared client)No

Zone: svc.bridge.local (default).

Bridge: Linux bridge edgelet0, CIDR 172.18.0.0/16, Docker/Podman network name edgelet.

See also: Container engines, Control plane on node.

When DNS applies

ModeBridgeService discovery
hostNetworkMode: falseWorkload joins edgelet bridgeAliases + (embed) resolver records
hostNetworkMode: trueHost networkNo bridge aliases; no embed resolv.conf mount

Host-network workloads use the host resolver directly.

FQDN catalog

Reserved system names (managed scope)

FQDNRole
edgelet.default.svc.bridge.localEdgelet node agent (bridge gateway)
router.default.svc.bridge.localRouter microservice
nats.default.svc.bridge.localNATS microservice

Per-workload names

For application myapp and microservice worker:

FormExample
Short (bridge alias / in-zone)myapp.worker
FQDNmyapp.worker.svc.bridge.local
UUID aliasiofog_<uuid> and iofog_<uuid>.svc.bridge.local

The iofog_ prefix on UUID aliases is a stable token in resolver code. It is not legacy product branding.

Control plane (three FQDNs)

For metadata.namespace = default, metadata.name = pot:

#FQDN
1edgelet.controller.svc.bridge.local
2controller.default.svc.bridge.local
3default.pot.svc.bridge.local

Identity comes from manifest metadata. See Control plane on node.

Embedded engine (containerEngine: edgelet)

Linux only. The embedded resolver listens on the bridge gateway for svc.bridge.local queries and forwards out-of-zone queries to host /etc/resolv.conf upstreams.

Non-host-network pods receive:

  1. resolv.conf — nameserver = bridge gateway IP
  2. /etc/hosts — user extraHosts plus baseline entries

DNS workload snapshot persists at /var/lib/edgelet/dns/snapshot-v1.json (restore on startup).

Observability

When containerEngine: edgelet, GET /v1/system/status includes DNS fields such as dnsStarted, dnsHealth, dnsQueriesTotal, and dnsForwardingDegraded.

edgelet system status -o json | jq '{dnsStarted, dnsHealth, dnsForwardingDegraded}'

Docker and Podman

External engines do not start the embedded resolver. Discovery uses Docker networking on the shared edgelet bridge:

  • Short aliases: <application>.<name> on the bridge endpoint
  • Control plane extras: edgelet.controller, controller.<namespace>
  • ExtraHosts in /etc/hosts for reserved FQDNs (edgelet.default.svc.bridge.local, router, nats)

Host-network mode: no ExtraHosts, no bridge network.

Troubleshooting

SymptomChecks
Name does not resolve (embed)edgelet system statusdnsStarted, dnsHealth; verify workload not host-network
Name does not resolve (docker)docker network inspect edgelet; container on network; aliases in inspect
Router/NATS unreachableSystem MS running; ExtraHosts populated
External name fails (embed)dnsForwardingDegraded; host /etc/resolv.conf upstreams
Control plane DNS wrongConfirm metadata.namespace / metadata.name; see FQDN table above

More: Troubleshooting.

See also

Group 3See anything wrong with the document? Help us improve it!