- Notifications
You must be signed in to change notification settings - Fork123
a fast DNS for Kubernetes clusters
License
tiglabs/containerdns
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ContainerDNS works as an internal DNS server for a Kubernetes cluster.
containerdns
: the main service to offer DNS query.containerdns-kubeapi
: monitor the changes of k8s services, and record the change in the etcd. It offered theoriginal data for containerdns, meanwhille containerdns-kubeapi offers the RESTful api for users to maintain domain records.containerdns-apicmd
: it is a shell cmd for user to query\update domain record, it is based on containerdns-kubeapi.etcd
: used to store DNS information, etcd v3 api is used.
It is based on the DNS libraryhttps://github.com/miekg/dns.
- fully-cached DNS records
- backend ip automatic removed when it not avaliable
- support multiple domain suffix
- better performance and less jitter
- load balancing - when a domain has multiple IPs, ContainerDNS chooses an active one randoml
- session persistence - when a domain name is accessed multiple times from the same source, the same service IP is returned.
Then get and compile ContainerDNS:
mkdir -p$GOPATH/src/github.com/tiglabscd$GOPATH/src/github.com/tiglabs git clone https://github.com/tiglabs/containerdnscd$GOPATH/src/github.com/tiglabs/containerdns make
config-file
: read configs from the file, default "/etc/containerdns/containerdns.conf".
the config file like this:
[Dns] dns-domain = containerdns.local. dns-addr = 0.0.0.0:53 nameservers ="" subDomainServers ="" cacheSize = 100000 ip-monitor-path = /containerdns/monitor/status/ [Log] log-dir = /export/log/containerdns log-level = 2 log-to-stdio =true [Etcd] etcd-servers = http://127.0.0.1:2379 etcd-certfile ="" etcd-keyfile ="" etcd-cafile ="" [Fun] random-one =false hone-one =false [Stats] statsServer = 127.0.0.1:9600 statsServerAuthToken = @containerdns.com
config-file
: read configs from the file, default "/etc/containerdns/containerdns.conf".
the config file like this:
[General] domain=containerdns.local host = 192.168.169.41 etcd-server = http://127.0.0.1:2379 ip-monitor-path = /containerdns/monitor/status log-dir = /export/log/containerdns log-level = 2 log-to-stdio =false [Kube2DNS] kube-enable = NO [DNSApi] api-enable = YES api-address = 127.0.0.1:9003 containerdns-auth = 123456789
config-file
: read configs from the file, default "/etc/containerdns/containerdns-scanner.conf".
the config file like this:
[General] core = 0 enable-check =true hostname = hostname1 log-dir = /export/log/containerdns log-level = 100 heartbeat-interval = 30 [Check] check-timeout = 2 check-interval = 10 scann-ports = 22, 80, 8080 enable-icmp =true ping-timeout = 1000 ping-count = 2 [Etcd] etcd-machine = http://127.0.0.1:2379 tls-key = tls-pem = ca-cert = status-path = /containerdns/monitor/status report-path = /containerdns/monitor/report heart-path = /containerdns/monitor/heart
config-file
: read configs from the file, default "/etc/containerdns/containerdns-schedule.conf".
the config file like this:
[General] schedule-interval = 60 agent-downtime = 60 log-dir = /export/log/containerdns log-level = 100 hostname = hostname1 force-lock-time = 1800 [Etcd] etcd-machine = http://127.0.0.1:2379 status-path = /containerdns/monitor/status report-path = /containerdns/monitor/report heart-path = /containerdns/monitor/heart lock-path = /containerdns/monitor/lock
we use curl to test the user api.
% curl -H"Content-Type:application/json;charset=UTF-8" -X POST -d'{"type":"A","ips":["192.168.10.1","192.168.10.2","192.168.10.3"]}' http://127.0.0.1:9001/containerdns/api/cctv2?token="123456789" OK
% curl -H"Content-Type:application/json;charset=UTF-8" -X POST -d'{"type":"cname","alias":"tv1"}' http://127.0.0.1:9001/containerdns/api/cctv2.containerdns.local?token="123456789" OK
% nslookup qiyf-nginx-5.default.svc.containerdns.local 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: qiyf-nginx-5.default.svc.containerdns.local Address: 192.168.19.113 if the domain have more than one ip, containerdns will return a radom one. % nslookup cctv2.containerdns.local 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cctv2.containerdns.local Address: 192.168.10.3
% nslookup tv1.containerdns.local 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 tv1.containerdns.local canonical name = cctv2.containerdns.local. Name: cctv2.containerdns.local Address: 192.168.10.3
If the domain may have multiple ips, then dns-scanner is used to monitor the ips behand the domain. When the service is not reachable, dns-scanner will change the status of the ip. And the containerdns will monitor the ip status, when it comes down, containerdns will choose a good one. cctv2.containerdns.local ips[192.168.10.1,192.168.10.2,192.168.10.3] % nslookup cctv2.containerdns.local 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cctv2.containerdns.local Address: 192.168.10.3 % etcdctl get /containerdns/monitor/status/192.168.10.3 {"status":"DOWN"} % nslookup cctv2.containerdns.local 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: cctv2.containerdns.local Address: 192.168.10.1 we query the domain cctv2.containerdns.local form containerdns we get the ip 192.168.10.3, then we shut down the service, we query the domain again we get the ip 192.168.10.1.
NIC: gigabit ethernet card CPUs: 32 RAM: 32G OS: CentOS-7.2
queryperf
Improve ContainerDNS throughput by leveraging the DPDK technology to reach nearly 10 million QPS,https://github.com/tiglabs/containerdns/kdns and the code is also production-ready.
Reference to cite when you use ContainerDNS in a paper or technical report: "Haifeng Liu, Shugang Chen, Yongcheng Bao, Wanli Yang, and Yuan Chen, Wei Ding, Huasong Shan. A High Performance, Scalable DNS Service for Very Large Scale Container Cloud Platforms. In 19th International Middleware Conference Industry, December 10–14, 2018, Rennes, France. "
About
a fast DNS for Kubernetes clusters
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors7
Uh oh!
There was an error while loading.Please reload this page.