99 lines
6 KiB
Text
99 lines
6 KiB
Text
== CoreDNS Proposal
|
|
|
|
*Name of project:* CoreDNS
|
|
|
|
*Description*
|
|
|
|
CoreDNS is a fast, flexible DNS server that is designed to be performant with a flexible implementation. This flexibility allows CoreDNS to be easily extended to support various data sources and to implement rich DNS service behaviors: for example, response caching, query rewrite, load-balancing, zone transfer and signing.
|
|
CoreDNS is the successor of SkyDNS. SkyDNS is a DNS server that has etcd as the datastore backend. It is widely
|
|
used in cloud deployments, but lacks the flexibility we envision for CoreDNS.
|
|
|
|
*Sponsor / Advisor from TOC*: Jonathan Boulle
|
|
|
|
*Unique Identifier*: coredns
|
|
|
|
*License*: Apache License v2.0
|
|
|
|
*Source control repositories*: https://github.com/miekg/coredns
|
|
|
|
*Initial Committers*:
|
|
|
|
* Michael Richmond github: mrichmon
|
|
* github: splack
|
|
* Felix Cantournet github: fcantournet
|
|
* github: leelynne
|
|
* Matt Layher github: mdlayher
|
|
* Vasily Vailyev github: pixelbender
|
|
|
|
*Infrastructure requirements (CI / CNCF Cluster)*: N/A
|
|
|
|
*Issue tracker*: https://github.com/miekg/coredns
|
|
|
|
*Website*: https://coredns.io
|
|
|
|
*Release methodology and mechanics*: github master. As as young project no method for official releases has been
|
|
established. The current rule is: the master branch is production ready at all times. A more formal release
|
|
process is on its way, the choice to use semver versioning has not yet been made. Precompiled binaries will be
|
|
created by hooking into Caddy's website: https://caddyservers.com where "DNS" will be a download option.
|
|
|
|
*Social media accounts*: Twitter: @corednsio
|
|
|
|
*Existing sponsorship*: Infoblox contributing developer time to implement CoreDNS->Kubernetes integration component.
|
|
|
|
*Existing community*: The community is small, but growing. Current number of twitter following is 100+ (after a
|
|
week of having the twitter account). By aligning ourselves with the Caddy community we hope to leverage Caddy's
|
|
popularity for CoreDNS. By positioning CoreDNS as a better SkyDNS we hope to entice user of SkyDNS to embrace
|
|
CoreDNS.
|
|
|
|
*External Dependencies*
|
|
|
|
CoreDNS depends on Caddy. Caddy is a framework that coredns uses in two ways:
|
|
|
|
1. much of the CoreDNS code plugs into the framework to add DNS behavior.
|
|
2. CoreDNS provides a wrapper around the framework to provide a DNS-tuned command-line interface.
|
|
|
|
Go dependencies:
|
|
|
|
* Go package: mholt/caddy (ASLV2 https://github.com/mholt/caddy/blob/master/LICENSE.txt)
|
|
* Go package: beorn7/perks (MIT https://github.com/beorn7/perks/blob/master/LICENSE)
|
|
* Go package: coreos/etcd (ASLv2 https://github.com/coreos/etcd/blob/master/LICENSE)
|
|
* Go package: flynn/go-shlex (ASLv2 https://github.com/flynn-archive/go-shlex/blob/master/COPYING)
|
|
* Go package: fsnotify/fsnotify (BSD https://github.com/fsnotify/fsnotify/blob/master/LICENSE)
|
|
* Go package: golang/protobuf (BSD https://github.com/golang/protobuf/blob/master/LICENSE)
|
|
* Go package: hashicorp/go-syslog (MIT https://github.com/hashicorp/go-syslog/blob/master/LICENSE)
|
|
* Go package: matttproud/golang_protobuf_extensions (ASLv2 https://github.com/matttproud/golang_protobuf_extensions/blob/master/LICENSE
|
|
* Go package: miekg/dns (BSD https://github.com/miekg/dns/blob/master/LICENSE)
|
|
* Go package: patrickmn/go-cache (MIT https://github.com/patrickmn/go-cache/blob/master/LICENSE)
|
|
* Go package: prometheus/client_golang (ASLv2 https://github.com/prometheus/client_golang/blob/master/LICENSE)
|
|
* Go package: prometheus/client_model (ASLv2 https://github.com/prometheus/client_model/blob/master/LICENSE)
|
|
* Go package: prometheus/common (ASLv2 https://github.com/prometheus/common/blob/master/LICENSE)
|
|
* Go package: prometheus/procfs (ASLv2 https://github.com/prometheus/procfs/blob/master/LICENSE)
|
|
* Go package: ugorji/go (MIT https://github.com/ugorji/go/blob/master/LICENSE)
|
|
* Go package: xenolf/lego (MIT https://github.com/xenolf/lego/blob/master/LICENSE)
|
|
* Go package: golang/x/crypto (BSD https://github.com/golang/crypto/blob/master/LICENSE)
|
|
* Go package: golang/x/net (BSD https://github.com/golang/net/blob/master/LICENSE)
|
|
* Go package: golang/x/sys (BSD https://github.com/golang/sys/blob/master/LICENSE)
|
|
* Go package: natefinch/lumberjack.v2 (MIT https://github.com/natefinch/lumberjack/blob/v2.0/LICENSE)
|
|
* Go package: square/go-jose.v1 (ASLv2 https://github.com/square/go-jose/blob/master/LICENSE)
|
|
* Kubernetes (for CoreDNS -> kubernetes integration) (ASLv2 https://github.com/kubernetes/kubernetes/blob/master/LICENSE)
|
|
|
|
*Statement on alignment with CNCF mission*:
|
|
|
|
CoreDNS is a focused lightweight DNS server. A microservice philosophy guides the internal design of CoreDNS. Individual DNS functions are provided by discrete, composable plugins that are enabled via runtime configuration.
|
|
CoreDNS can be thought of as a DNS protocol head that can be configured to front various backend data sources. A flexible DNS server is a necessary component to provide “Naming and Discovery” services to containers running in the CNCF distributed system services environment.
|
|
|
|
*Comparison with KubeDNS*:
|
|
|
|
The incumbent DNS service for kubernetes, “kubedns”, consists of four components:
|
|
* etcd provides a DNS data cache,
|
|
* kube2sky provides the mechanism for updating the etcd data cache,
|
|
* skydns provides the DNS service based on the data cached in etcd,
|
|
* exechealthz provides health-check status.
|
|
|
|
Running CoreDNS with kubernetes only requires the coredns component. CoreDNS does not require a separate data cache or update service. CoreDNS includes an optional health-check “middleware” component that can be used for service monitoring.
|
|
|
|
CoreDNS provides a cleaner, more extensible codebase as compared to SkyDNS. (Both SkyDNS and CoreDNS were authored by Miek Gieben.)
|
|
|
|
CoreDNS is currently being extended to operate directly with kubernetes to access the service data. This “middleware” implementation for CoreDNS provides the same client-facing behavior as KubeDNS. The pipeline-based design of CoreDNS allows easy extension to use any container orchestrator as a DNS data source.
|
|
|
|
With the kubernetes middleware, CoreDNS can be considered as an alternative to SkyDNS with lower runtime complexity. Performance testing to compare against SkyDNS is pending.
|