ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## skydns 在kubernetes1.3版本之前,kubernetes默认的dns方案是使用kube2sky监听kubernetes api,将service相关变化写入到etcd集群,通过skydns来完成kubernetes内部域名解析。 优点:kubernetes原生支持 缺点: 1. skydns没有缓存,所有解析都直接从etcd读取,性能较差。 2. kube2sky官方已停止支持,在后续kubernetes版本中,该方案被kube-dns取代。 ## containerdns 京东containerdns是在原生skydns上做了若干改进的开源产品,其中最明显的改进的三大特性为: 1. 支持多域名解析 2. 在container本地添加缓存,尽量将解析缓存到内存中,以提升解析速度 3. 提供监控插件,可以监控解析的失败率以及解析失败后的故障转移 目前该方案应用于京东JDOS2.0系统中。 缺点: 1. 方案虽然开源,但社区活跃度极低。 2. 在实际使用过程中,经常出现解析间歇性丢失的情况 3. 针对clusterIP的解析,未经过实际生产验证 ## kube-dns kube-dns是kubernetes 1.3到1.8版本默认使用的dns,用于取代1.3版本之前的skydns方案,然而本质上,kube-dns的核心仍然是skydns。kube-dns组件负责监听kubernetes api,获取service的变化,并在内存中维护lookup结构用于dns请求。并使用dnsmasq容器增加dns缓存,进一步提升解析性能。 优点: kubernetes原生方案,性能更好,同时kubernetes提供原生的dns扩缩容解决方案 缺点: 1. 完全摒弃了写磁盘的方式,将所有解析都写入内存以提高解析效率,但同时一旦内存分配不足,解析数据会直接丢失,且未在大规模应用中验证 2. 从1.9开始,kubernetes官方也放弃了这种方式,转而采用coredns ## coredns 从kubernetes 1.9开始,kubernetes的默认dns变更为coredns。在1.9版本中,coredns还是alpha版,然后在最新的kubernetes 1.10版本中,升级到了beta版。截止目前为止,coredns也已发布v1.1.2版本,趋于稳定。 coredns与skydns2的作者是同一个人。按照官方的说法,coredns采用更模块化,可扩展的框架构建。CoreDNS利用作为Web服务器Caddy的一部分而开发的服务器框架。该框架具有非常灵活,可扩展的模型,用于通过各种中间件组件传递请求。这些中间件组件根据请求提供不同的操作,例如记录,重定向,修改或维护。虽然它一开始作为Web服务器,但是Caddy并不是专门针对HTTP协议的,而是构建了一个基于CoreDNS的理想框架。 在这种灵活的模型中添加对Kubernetes的支持,相当于创建了一个Kubernetes中间件。该中间件使用Kubernetes API来满足针对特定Kubernetes pod或服务的DNS请求。 优点:在新版本kubernetes中原生支持。完全兼容kube-dns,且做了大量改进。 缺点:该方案较新,目前尚未在社区经过大规模验证。 * * * * * **### 我们这里采用集群外部安装coredns** Coredns的安装 ~~~ root@ubuntu:~# wget https://github.com/coredns/coredns/releases/download/v1.2.1/coredns_1.2.1_linux_amd64.tgz root@ubuntu:~# tar xf coredns_1.2.1_linux_amd64.tgz root@ubuntu:~# chmod +x coredns && mv coredns /opt/kubernetes/bin/ 配置corefile配置文件 root@ubuntu:~# vim /opt/kubernetes/cfg/Corefile .:53 { kubernetes {{ CLUSTER_DNS_DOMAIN }} { resyncperiod 10s endpoint http://127.0.0.1:8080 pods verified endpoint_pod_names upstream /etc/resolv.conf } health :18080 log errors prometheus :9153 proxy . /etc/resolv.conf cache 30 reload 10s } 配置服务启动配置文件 root@ubuntu:~# vim /lib/systemd/system/coredns.service Description=coredns: The Coredns Server Documentation=https://coredns.io/ [Service] ExecStart=/opt/kubernetes/bin/coredns -conf /opt/kubernetes/cfg/Corefile Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target root@ubuntu:~# systemctl start coredns ~~~