k8s朋友圈(三)CoreDNS

k8s提供了两种服务发现方式:DNS 和环境变量,不过社区更加推荐使用DNS方式。DNS 实现的方式是通过在k8s 集群里面部署一个DNS server ,这个DNS server会监听k8s 集群里面服务和endpoint 的变化,从而更新 DNS 的A 记录。目前默认DNS server是 CoreDNS。

CoreDNS是一种快速,灵活且现代的DNS服务器,还可在云原生部署中提供服务发现能力。它是Miek Gieben于2016年3月创建,于2017年加入了Cloud Native Sandbox,并于2018年2月成为孵化项目,在2019年正式从CNCF毕业,这是继Kubernetes,Prometheus和Envoy之后第4个毕业的项目,这也充分证明了社区对CoreDNS稳定性和成熟度的认可。在Kubernetes1.13版本后已经将CoreDNS作为默认推荐DNS了。

k8s朋友圈(三)CoreDNS

在CoreDNS之前Kubernetes最早使用的DNS插件是KubeDNS,KubeDNS整体架构如下所示,主要分为三个组件:kubedns、dnsmasq和exechealthz。其中kubedns主要有两个作用,第一是负责list/watch kube-apiserver,当有服务或者Pod发生变动后,kubedns将这些信息保存在本地缓存中,第二是提供DNS查询服务。dnsmasq是一个开源的dns和dhcp服务,业务容器的DNS解析首先请求到dnsmasq,如果dnsmasq本地没有对应的解析记录,它将会向它的上游DNS服务(kubedns)查询,之后、dnsmasq充当DNS缓存,避免每次请求都通过kubedns解析。exechealthz是健康检查组件,通过定时的发起DNS查询请求,检测kubedns和dnsmasq监控状态。

k8s朋友圈(三)CoreDNS

Kubedns由于引入了dnsmasq导致整体比较复杂,并且dnsmasq是一个单线程的程序性能比较一般而且还有安全漏洞。

为此社区开发了第二版Kubernetes DNS方案CoreDNS。CoreDNS 编译出来就是一个单独的二进制可执行文件,内置了缓存、后端存储、健康检查等功能,还可以支持各种插件。下面通过Corefile配置CoreDNS ,Corefile 是 CoreDNS 的配置文件。

#监听5300端口,如果是coredns.io的域名的解析通过db.coredns.io文件
coredns.io:5300 { 
    file db.coredns.io
}
#监听53端口,如果是coredns.io的域名的解析通过db.coredns.io文件
example.io:53 {
    log
    errors
    file db.example.io
}
#监听53端口,如果是example.net的域名的解析通过db.example.net文件
example.net:53 {
    file db.example.net
}
#监听53端口,所有访问根(.)的域名都通过Kubernetes以及上游8.8.8.8 DNS解析
.:53 {
    Kubernetes
    proxy . 8.8.8.8
    log
    health
    errors
    cache
}

经过上面配置文件,生成了如下DNS解析流程。

k8s朋友圈(三)CoreDNS

CoreDNS 除了支持 DNS 协议,也支持TLS和gRPC,即 DNS-over-TLS和DNS-over-gRPC模式,从而更加灵活安全地使用DNS解析。

如果coredns 性能不足,还可以通过 localDNS 缓存功能缓解coredns 性能压力。

展开阅读全文

页面更新:2024-06-01

标签:成熟度   集群   缓存   端口   朋友圈   组件   插件   灵活   性能   方式   发现   域名   文件   项目   健康   科技   社区

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top