forked from kubernetes/community
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add coredns proposal for kubernetes/enhancements#427
- Loading branch information
1 parent
43a2b25
commit e0169b8
Showing
1 changed file
with
57 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# <Title> | ||
|
||
Status: Pending | ||
|
||
Version: Alpha | ||
|
||
Implementation Owner: TBD | ||
|
||
## Motivation | ||
|
||
CoreDNS is another CNCF project and is the successor to SkyDNS, which kube-dns is based on. It is a flexible, extensible | ||
authoritative DNS server and we have built a direct integration to the Kubernetes API. It can serve as cluster DNS, | ||
complying with the [dns spec](https://github.com/kubernetes/dns/blob/master/docs/specification.md). | ||
|
||
CoreDNS has fewer moving parts than kube-dns, since it is a single executable and single process. It is written in Go so | ||
it is memory-safe (kube-dns includes dnsmasq which is not). It supports a number of use cases that kube-dns does not | ||
(see below). As a general-purpose authoritative DNS server it has a lot of functionality that kube-dns could not reasonably | ||
be expected to add. See, for example, the [intro](https://docs.google.com/presentation/d/1v6Coq1JRlqZ8rQ6bv0Tg0usSictmnN9U80g8WKxiOjQ/edit#slide=id.g249092e088_0_181) or [coredns.io](https://coredns.io) or the [CNCF webinar](https://youtu.be/dz9S7R8r5gw). | ||
|
||
## Proposal | ||
|
||
The proposed solution is to enable the selection of CoreDNS as an alternate to Kube-DNS during cluster deployment, with the | ||
intent to make it the default in the future. | ||
|
||
## User Experience | ||
|
||
### Use Cases | ||
|
||
* Standard DNS-based service discovery | ||
* Federation records | ||
* Stub zone support | ||
* Adding custom DNS entries | ||
* Making an alias for an external name [#39792](https://github.com/kubernetes/kubernetes/issues/39792) | ||
* Dynamically adding services to another domain, without running another server [#55](https://github.com/kubernetes/dns/issues/55) | ||
* Adding an arbitrary entry inside the cluster domain | ||
* Verified pod DNS entries (ensure pod exists in specified namespace) | ||
* Experimental server-side search path to address latency issues [#33554](https://github.com/kubernetes/kubernetes/issues/33554) | ||
* Limit PTR replies to the cluster CIDR [#125](https://github.com/kubernetes/dns/issues/125) | ||
|
||
By default, the user experience would be unchanged. For more advanced uses, existing users would need to modify the | ||
ConfigMap that contains the CoreDNS configuration file. | ||
|
||
## Implementation | ||
|
||
Each distribution project (kubeadm, minikube, kubespray, and others) will implement CoreDNS as an optional | ||
add-on as appropriate for that project. | ||
|
||
### Client/Server Backwards/Forwards compatibility | ||
|
||
Fully compatible. | ||
|
||
## Alternatives considered | ||
|
||
Maintain existing kube-dns, and add functionality to meet the use cases above and fix underlying issues. To ensure | ||
the user of memory-safe code, this would require replacing dnsmasq with another caching DNS server, or implementing | ||
caching within kube-dns. | ||
|