现k8s中使用的都是coreDNS进行内部地址的解析及路由,在k8s v1.10之前的版本是使用kubeDNS。基于
k8s 实战篇 - 镜像打包部署 - springboot&mysql - 3中的数据库链接配置,讨论一下内部域名解析问题
K8s内部域名解析
1、 K8s Kube-dns 架构

Kube-dns包含以下三个核心组件:
kubedns:监控kubernetes的Server资源的变化,根据Server的名称和ip地址生成DNS记录然后将DNS记录保存到内存中
dnsmasq:DNS配置工具,监听53端口,为集群提供DNS查询服务。dnsmasq 提供DNS缓存,降低了kubedns的查询压力,提升了DNS域名解析的整体性能;
exechealthz:健康检查,检查Kube-dns和dnsmasq的健康,对外提供/healthz HTTP接口以查询Kube-dns的健康状况。
2、K8s DNS 策略
Kubernetes 中 Pod 的 DNS 策略有四种类型。
Default(默认):Pod 继承所在主机上的 DNS 配置;
ClusterFirst(集群优先):K8s 的默认设置;先在 K8s 集群配置的 coreDNS 中查询,查不到的再去继承自主机的上游 nameserver 中查询;
ClusterFirstWithHostNet(集群 DNS 优先,并伴随着使用宿主机网络):对于网络配置为 hostNetwork 的 Pod 而言,其 DNS 配置规则与 ClusterFirst 一致;
None(无):忽略 K8s 环境的 DNS 配置,只认 Pod 的 dnsConfig 设置。
Kubernetes 目前在 Pod 定义中支持两个 DNS 策略:Default和ClusterFirst,dnsPolicy缺省为ClusterFirst。
3、CoreDns简介
coreDNS是一个DNS服务器,它使用go语言编写。CoreDns是一个灵活的可扩展的DNS服务器,作为kubernetes集群的默认DNS服务器。CoreDNS是经过Apache 许可证授权的,并且是完全开源的。引入表达力更强的DSL,即Corefile形式的配置文件(也是基于Caddy框架开发的)。
4、CoreDNS的配置及相关解析流程
coreDNS使用Corefile作为配置文件使用,如下:
coredns.io:5300 {
file db.coredns.io
}
example.io:53 {
log
errors
file db.example.io
}
example.net:53 {
file db.example.net

本文介绍了Kubernetes(K8s)中的DNS解析机制,包括K8s早期使用的kubeDNS架构和当前主流的CoreDNS配置。文章详细解释了CoreDNS的配置文件(Corefile),并展示了如何在K8s环境中查询和验证DNS解析。
最低0.47元/天 解锁文章
7221

被折叠的 条评论
为什么被折叠?



