更新时间:2023年2月
文章目录
CoreDNS 简介
官网:CoreDNS: DNS and Service Discovery
官方文档:CoreDNS: DNS and Service Discovery
CoreDNS 插件以及插件文档:Plugins (coredns.io)
kubernetes 关于 CoreDNS 的描述:使用 CoreDNS 进行服务发现 | Kubernetes
CoreDNS 是一个用 GO 语言编写的 DNS 服务器。不同于其他优秀的 DNS 服务器(例如: BIND、Knot、PowerDNS 或 Unbound),CoreDNS 非常灵活,几乎所有功能都外包到插件中
kubernetes 早期的 dns 组件有 skydns、kube-dns。目前,CoreDNS 就成了 Kubernetes 的默认 DNS 服务器
Kubernetes 版本与 kubeadm 安装的 CoreDNS 版本对应关系参考:deployment/CoreDNS-k8s_version.md
CoreDNS 的作用
Kubernetes 中应用 Pod 的 IP 可能会随着销毁或创建而改变。Kubernetes 为 Service 和 Pod 创建 DNS 记录。 使得应用之间可以使用一致的 DNS 名称而非 IP 地址来进行相互访问。
Service 的 FQDN 如下
{
ServiceName}.{
Namespace}.svc.{
ClusterDomain}
Corefile 配置
Corefile 是 CoreDNS 的配置文件,定义了一些内容
- DNS Server 的监听协议和端口
- DNS Server 负责哪个 Zone 的权威(authoritative)DNS 解析
- DNS Server 加载的插件
格式
Corefile 由一个个服务配置块组成,每个服务配置块定义了要解析的区域
、端口
、使用的插件
等信息,如果需要解析根域,则使用点号 .
表示
格式
ZONE:[PORT] {
# Zone Block
[PLUGIN] ... {
# Plugin Block
}
}
解析根域,端口未指定则使用默认的 53 端口
. {
# Plugins defined here.
}
目前,CoreDNS 接受四种不同的协议,可以在区域之前添加协议来指定使用的协议。四种协议如下
dns://
for plain DNS (默认协议,如果未明确指定协议,则使用该协议)tls://
for DNS over TLS, see RFC 7858https://
for DNS over HTTPS, see RFC 8484grpc://
for DNS over gRPC
tls://example.net:53 {
file db.example.net
forward . tls://223.5.5.5:853 {
tls_servername dns.alidns.com
force_tcp
max_fails 3
}
}
Kubernetes 中的默认配置
在 Kubernetes 集群中,可以通过 configmap 获取安装的 CoreDNS 的默认配置,即 Corefile 文件
$ /etc/kubeasz/bin/kubectl edit configmap coredns -n kube-system
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an e