
下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
基本介绍
CoreDNS 是一种使用 Golang 编写、由配置文件控制的插件式 DNS 服务器,自 Kubernetes 1.13 版本起,成为 Kubernetes 的默认 DNS 服务器,通常用于 Kubernetes 集群内部服务发现,允许应用程序之间直接、或通过 Service 对象名称互相访问。
CoreDNS 采用 Apache License Version 2 开源协议,是 CNCF 孵化的开源项目,并已正式毕业,成为云原生环境下 DNS 服务器和服务发现的一种成熟解决方案。
CoreDNS 采用插件式架构,可以轻松实现功能扩展。各类插件用于处理 DNS 请求、转发请求、缓存结果、记录日志等。CoreDNS 具有高性能、自动重试、健康检查和负载均衡等功能,确保了 DNS 服务的可靠性。
功能特性
Corefile 配置示例
# kubectl get cm coredns -oyaml -n kube-system
...
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 10000
}
cache 30
loop
reload
loadbalance
}
...每部分配置语句的解释如下:
DNS 策略
在 Deployment、StatefulSet 等资源对象中,可以通过 spec.template.spec.dnsPolicy 声明以下几种类型 DNS 策略:
...
spec:
...
template:
spec:
containers:
...
dnsPolicy: "None"
dnsConfig:
nameservers:
- 10.96.0.10
searches:
- suffix1.povilasv.me
- suffix2.povilasv.me
- suffix3.povilasv.me
- kube-system.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "5"
...