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 2 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
82 changes: 82 additions & 0 deletions proposals/coredns.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
== 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.
Copy link
Contributor

Choose a reason for hiding this comment

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

behaviors: for example,

CoreDNS is the successor of SkyDNS.
Copy link
Contributor

Choose a reason for hiding this comment

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

A touch more background/context about SkyDNS might be nice.

Copy link
Contributor

Choose a reason for hiding this comment

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

PR #10 send to resolve this and the dep. on Caddy.


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

Choose a reason for hiding this comment

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

Flesh this out a bit. It looks like there are no releases so far - but perhaps talk about why, and what process will be introduced (semver? prebuilt binaries?)


*Social media accounts*: Twitter: @corednsio

*Existing sponsorship*: Infoblox contributing developer time to implement CoreDNS->Kubernetes integration component.

*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?)


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

Choose a reason for hiding this comment

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

..of CoreDNS: individual..

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