Private DNS’s containers are each responsible for a service. These services can be logically grouped into two categories—core or edge—describing their relationship to a typical network topology.
Core and edge services work in tandem to maintain high-availability of DNS while regularly updating information synchronized from the core node’s main database.
Core (or control) services consist of data, web, and XFR containers.
- The data container hosts DNS zones and records in the system’s main database.
- The web container runs the REST API and application web interface server.
- The XFR container provides the zone transfer services that enables importing and exporting zone data with other DNS systems via AXFR or IXFR.
In a typical Private DNS deployment, one or more instances of the core services are deployed in a single location, while multiple edge nodes serve DNS to local clients making DNS requests. Keeping the web and XFR containers proximate to data containers reduces connection latency for requests to modify the main database and its records. While core services are physically separated from edge services, the architecture allows edge services to operate independently from core services.
Edge services of Private DNS consist of DNS and data cache (simply, cache) containers .
- DNS containers run NS1’s next-generation authoritative DNS server, high-speed caching daemon, and a server for recursive resolution.
- Cache containers keep a local copy of the main database at the edge of a distributed network.
With data cache containers proximate to DNS containers at the edge nodes, the entire edge node’s connection can be severed from a core node while still allowing DNS containers to be restarted. The local copy of a main database allows populating (or re-population) of high-speed caching daemons of zone and record information.
For examples on how to deploy core and edge services to hosts, refer to the usage information for core-compose.yml and edge-compose.yml found here: https://github.com/ns1/ns1-privatedns/tree/master/docker-compose