Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create project proposal for CoreDNS #9

Merged
merged 15 commits into from
Mar 2, 2017
Merged
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions proposals/coredns.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
== 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

*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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice inspirational looking site :-)


*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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be worth calling out if there is a migration path/guidance for existing SkyDNS users


*External Dependencies*
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you talk a bit about the relationship with Caddy? from our discussion on the call the other day it sounded like Caddy will become a dependency once CoreDNS is ported over (which looks like it's happening soon?)


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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sort this list? appears somewhat random

* 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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps "frontend" instead of "head"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A flexible DNS server is a necessary component in providing “Naming and Discovery” services to containers running in a cloud-native distributed 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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kube-dns, which uses SkyDNS as a library, provides ...

* 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.