在 Kubernetes 集群中,CoreDNS 是一个关键的基础组件,负责域名解析和服务发现。无论是内部服务通信还是访问外部域名,CoreDNS 都为我们提供了高效、灵活的支持。本文将通俗易懂地介绍 CoreDNS 的作用、工作流程,并通过一些常见的配置案例帮助你更好地理解它的功能。
服务名称解析
CoreDNS 负责将 Kubernetes 内部的服务名称(如 my-service.default.svc.cluster.local
)解析为对应的 IP 地址,支持服务之间的通信。
外部域名解析
当 Pod 需要访问外部网络(如 www.baidu.com
)时,CoreDNS 会将请求转发到上游 DNS 服务器进行解析。
支持多环境域名解析
CoreDNS 可以通过配置解析公司内部域名,并将其他请求转发到公共 DNS,满足多环境需求。
自定义记录
除了动态解析 Kubernetes 服务,CoreDNS 还支持手动添加固定的域名解析记录(如 test.example.com
指向特定 IP 地址)。
CoreDNS 的 DNS 查询大致分为以下几个阶段:
接收请求
Pod 中的应用程序通过 DNS 查询服务名称或域名,CoreDNS 接收到这些请求。
匹配规则
根据 Corefile(CoreDNS 的配置文件)中的规则,CoreDNS 判断请求是内部服务、外部域名还是自定义记录。
解析或转发
返回结果
CoreDNS 将解析结果返回给发起请求的 Pod,完成一次 DNS 查询。
在 Kubernetes 中,CoreDNS 的配置文件是一个 ConfigMap,可以通过以下命令查看和修改:
kubectl -n kube-system edit configmap coredns
配置文件名为 Corefile,以下是一些常用配置的实例讲解。
假设我们需要在集群内:
internal.example.com
);www.baidu.com
)。配置示例:
. {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
ttl 30
}
forward internal.example.com 10.10.10.10
forward . 223.5.5.5 114.114.114.114
cache 60
log
reload
}
配置解读:
kubernetes
插件:处理 Kubernetes 内部的服务名称解析,设置了默认 TTL 为 30 秒。forward internal.example.com
:将公司内部域名的请求转发到内网 DNS(IP 为 10.10.10.10)。forward .
:其他请求转发到公共 DNS(223.5.5.5 和 114.114.114.114)。cache
:缓存解析结果 60 秒,提高性能。log
和 reload
:记录请求日志和动态加载配置。有时我们需要为某个域名手动指定 IP 地址,例如 test.example.com
指向 192.168.1.100
。
配置示例:
. {
errors
hosts {
192.168.1.100 test.example.com
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
ttl 30
}
forward . 223.5.5.5 114.114.114.114
cache 60
log
reload
}
配置解读:
hosts
插件:用于手动指定域名和 IP 的映射关系。
192.168.1.100 test.example.com
:将 test.example.com
指向 192.168.1.100
。fallthrough
:允许未匹配的请求继续被其他规则处理。验证结果:
可以通过 dig
命令测试域名解析结果:
dig @<CoreDNS_IP> test.example.com
问题:外部域名解析延迟较高,影响应用响应时间。
解决方案:通过缓存插件延长缓存时间,并选择延迟更低的 DNS 服务。
配置示例:
. {
errors
kubernetes cluster.local in-addr.arpa ip6.arpa {
ttl 30
}
forward . 223.5.5.5 114.114.114.114 {
max_concurrent 100
}
cache 120
log
reload
}
配置解读:
forward
插件:设置了 max_concurrent
参数,允许最多 100 个并发请求,提高解析吞吐量。cache
插件:缓存时间从 60 秒延长至 120 秒,进一步减少对上游 DNS 的请求频率。CoreDNS 是 Kubernetes 网络的“幕后英雄”,其作用远不止服务名称解析这么简单。通过配置和优化 Corefile,我们可以让 CoreDNS 更加适应复杂的企业需求,例如多环境解析、自定义记录和性能提升。
希望通过本文的讲解,你对 CoreDNS 的功能和配置有了更清晰的认识。如果你有任何疑问或心得,欢迎留言交流!