Skip to main content
Version: v3.9.0

DNS resolver

The embedded DNS resolver provides authoritative bridge DNS for workloads when using the edgelet container engine. It maintains an in-memory workload registry, serves *.svc.bridge.local, optional docker/podman compatibility aliases, and forwards non-local queries upstream.

Code: internal/dnsresolver/

Operator guide: DNS

Purpose​

  • Register A/AAAA answers for microservice FQDNs on the bridge network
  • Dual scope listeners: managed (edgelet) vs local deploy (iofog-local)
  • Reconcile DNS records from runtime container snapshots
  • Rate limiting, forwarding health, metrics snapshot for status/metrics endpoints
  • Reserved names: agent, router, NATS, ControlPlane FQDNs

Dependencies​

Depends onReason
networkBridge gateway IP per scope
configFeature flags, intervals, upstreams
Used byReason
pkg/engine/edgeletPrimary upsert/remove on container lifecycle
processmanagerControlPlane workload DNS upsert
pkg/dockerExtraHosts / network aliases for docker engine
edgeletapi/handlersStatus DNS health, Prometheus metrics

Architecture​

Singleton: dnsresolver.GetInstance() → *Resolver.

Default zone: svc.bridge.local.

Scopes​

ScopeConstantTypical workloads
ManagedScopeManaged (edgelet)Controller-managed MS
LocalScopeLocal (iofog-local)CLI deploy, ControlPlane

Agent DNS: edgelet.default.svc.bridge.local.

Lifecycle​

Resolver starts when edgelet engine initializes (Engine.Init wires GetInstance()). Background workers:

  • Reconcile loop. Sync registry from runtime snapshot (default 60s)
  • Snapshot/stats. Counters for queries, NXDOMAIN, rate limits
  • Bind retry. Retry listener bind every 5s on failure

Not a Supervisor module with its own Start(). Owned by engine lifecycle.

Record updates​

UpsertWorkload(WorkloadRecord) / RemoveWorkload(uuid):

  • Called from edgelet engine on container start/stop
  • ControlPlane: processmanager/controlplane_dns.go
  • Records include application, name, IP, flags (IsRouter, IsNats, IsController)

Helper: WorkloadBridgeNetworkAliases() for docker ExtraHosts parity.

Configuration​

Resolver reads config for reconcile interval, rate limits, max request sizes, compat alias enablement, upstream forwarders. See DNS for operator-facing keys.

External APIs​

SurfaceRole
DNS UDP/TCP on bridge gatewayWorkload queries
GET /v1/system/statusDNS health derived from snapshot
GET /metricsDNS counters exported

Observability​

  • Log module: "EmbeddedDNS"
  • StatsSnapshot: query totals, reconcile counts, forwarding degradation flags
  • deriveDNSHealth() in status handler maps snapshot → health string

Failure modes​

SymptomTypical cause
NXDOMAIN for valid MSReconcile lag; container not registered
Forwarding degradedUpstream DNS unreachable
CP names missingcontrolplane_dns upsert not run

Code map​

FileRole
resolver.goCore server, registry, listeners
reconcile.goPeriodic snapshot reconcile
snapshot.goStats snapshot for status/metrics
forwarding.goUpstream DNS forward
controlplane.goControlPlane FQDN helpers
ratelimit.goQuery rate limiting

Related: Engines, Process manager, DNS.

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