CoreDNS is coming in as an inception level project. Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| == CoreDNS Proposal
 | |
| 
 | |
| *Name of project:* CoreDNS
 | |
| 
 | |
| *Description*
 | |
| 
 | |
| CoreDNS is a fast, flexible and modern DNS server. Its performant and flexible implementation 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 (https://github.com/skynetservices/skydns), a DNS server that uses etcd as its datastore backend. SkyDNS is widely
 | |
| used in cloud deployments, but lacks the flexibility of CoreDNS.
 | |
| 
 | |
| *Sponsor / Advisor from TOC*: Jonathan Boulle
 | |
| 
 | |
| *Preferred Maturity Level*: Inception
 | |
| 
 | |
| *Unique Identifier*: coredns
 | |
| 
 | |
| *License*: Apache License v2.0
 | |
| 
 | |
| *Maturity Level*: Inception
 | |
| 
 | |
| *Source control repositories*: https://github.com/miekg/coredns
 | |
| 
 | |
| *Initial Committers*:
 | |
| 
 | |
| * Miek Gieben github: miekg
 | |
| * Michael Richmond github: mrichmon
 | |
| * github: splack
 | |
| * Felix Cantournet github: fcantournet
 | |
| * github: leelynne
 | |
| * Matt Layher github: mdlayher
 | |
| * Vasily Vailyev github: pixelbender
 | |
| * John Belamaric github: johnbelamaric
 | |
| * Chris O'Haver github: chrisohaver
 | |
| * Yong Tang github: yongtang
 | |
| 
 | |
| *Infrastructure requirements (CI / CNCF Cluster)*: N/A
 | |
| 
 | |
| *Issue tracker*: https://github.com/miekg/coredns
 | |
| 
 | |
| *Website*: https://coredns.io
 | |
| 
 | |
| *Release methodology and mechanics*: The current version is v004; there have been four official releases. Releases are not on a specific schedule
 | |
| but are coordinated by the community via the issue tracker. Additionally, the rule is that the master branch is production-ready at all times.
 | |
| A more formal release process is on its way, and may introduce semantic versioning, but a final decision has not yet been made. Precompiled binaries are
 | |
| distributed via GitHub and Caddy's download website (https://caddyserver.com/download), where "DNS" will be a Server Type option.
 | |
| 
 | |
| *Social media accounts*: Twitter: @corednsio
 | |
| 
 | |
| *Existing sponsorship*: Infoblox contributing developer time to implement CoreDNS->Kubernetes integration component and other enhancements.
 | |
| 
 | |
| *Existing community*: The community is small, but growing. On GitHub, we have 50+ forks, 550+ stars, and 24 contributors (5 with merge privileges).
 | |
| Current number of Twitter followers is 180+. 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 existing users of SkyDNS to migrate to and embrace CoreDNS.
 | |
| 
 | |
| *External Dependencies*
 | |
| 
 | |
| CoreDNS depends on Caddy (https://caddyserver.com/) as a standard Go dependency. 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)
 | |
| * Go packege: kubernetes/client-go (for CoreDNS -> Kubernetes integration) (ASLv2 https://github.com/kubernetes/client-go/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 three components:
 | |
| * kube-dns which uses SkyDNS as a library provides the DNS service based on the Kubernetes API
 | |
| * dnsmasq which acts as a caching server in front of kube-dns
 | |
| * sidecar provides metrics and health-check status.
 | |
| 
 | |
| Running CoreDNS with Kubernetes requires only the coredns component. CoreDNS does not require a separate data cache or health 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 primarily 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 KubeDNS with lower runtime complexity. Performance testing to compare against KubeDNS is pending.
 |