插件简介
CoreDNS域名解析插件是一款通过链式插件的方式为Kubernetes提供域名解析服务的DNS服务器。
CoreDNS是由CNCF孵化的开源软件,用于Cloud-Native环境下的DNS服务器和服务发现解决方案。CoreDNS实现了插件链式架构,能够按需组合插件,运行效率高、配置灵活。在kubernetes集群中使用CoreDNS能够自动发现集群内的服务,并为这些服务提供域名解析。同时,通过级联云上DNS服务器,还能够为集群内的工作负载提供外部域名的解析服务。
该插件为系统资源插件,kubernetes 1.11及以上版本的集群在创建时默认安装。
目前CoreDNS已经成为社区kubernetes 1.11及以上版本集群推荐的DNS服务器解决方案。
CoreDNS官网:https://coredns.io/
开源社区地址:https://github.com/coredns/coredns
说明DNS详细使用方法请参见DNS。
约束与限制
CoreDNS正常运行或升级时,请确保集群中的可用节点数大于等于CoreDNS的实例数,且CoreDNS的所有实例都处于运行状态,否则将导致插件异常或升级失败。
安装插件
本插件为系统默认安装,若因特殊情况卸载后,可参照如下步骤重新安装。
步骤 1 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件管理”,在右侧找到 coredns ,单击“安装”。
步骤 2 在安装插件页面,选择插件规格,并配置相关参数。
coredns插件参数配置
参数 参数说明 插件规格 并发域名解析能力,请根据业务需求选择插件规格。
如选择“自定义qps”,CoreDNS所能提供的域名解析QPS与CPU消耗成正相关,请根据业务需求,合理调整插件实例数和容器CPU/内存配额。实例数 选择上方插件规格后,显示插件中的实例数。 容器 选择插件规格后,显示插件容器的CPU和内存配额。 参数配置 parameterSyncStrategy:插件升级时是否配置一致性检查。
ensureConsistent:表示启用配置一致性检查,如果集群中记录的配置和实际生效配置不一致,插件将无法升级。
force:表示升级时忽略配置一致性检查。请您自行确保当前生效配置和原配置一致。插件升级完毕后,需恢复parameterSyncStrategy值为ensureConsistent,重新启用配置一致性检查。
stub_domains:存根域,您可对自定义的域名配置域名服务器,格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址。
upstream_nameservers:上游域名服务器地址。
servers: coredns 1.23.1插件版本开始开放servers配置,用户可对servers做定制化配置,参见dns-custom-nameservers,其中plugins为coredns中各组件配置(参考https://coredns.io/manual/plugins/,一般场景建议保持默认配置,以免出现配置错误而导致coredns整体不可用),每个plugin组件可包含"name"、"parameters"(可选)、"configBlock"(可选)配置,对应生成的Corefile配置文件中格式如下:
$name $parameters {
$configBlock
}
示例:
{
"servers": [
{
"plugins": [
{
"name": "bind",
"parameters": "{$POD_IP}"
},
{
"name": "cache",
"parameters": 30
},
{
"name": "errors"
},
{
"name": "health",
"parameters": "{$POD_IP}:8080"
},
{
"configBlock": "pods insecure\nfallthrough in-addr.arpa ip6.arpa",
"name": "kubernetes",
"parameters": "cluster.local in-addr.arpa ip6.arpa"
},
{
"name": "loadbalance",
"parameters": "round_robin"
},
{
"name": "prometheus",
"parameters": "{$POD_IP}:9153"
},
{
"configBlock": "policy random",
"name": "forward",
"parameters": ". /etc/resolv.conf"
},
{
"name": "reload"
},
{
"name": "log"
}
],
"port": 5353,
"zones": [
{
"zone": "."
}
]
}
],
"stub_domains": {
"acme.local": [
"1.2.3.4",
"6.7.8.9"
]
},
"upstream_nameservers": ["8.8.8.8", "8.8.4.4"]
}
coredns主zone默认plugin配置说明
plugin名称 | 描述 |
---|---|
bind | coredns 侦听的hostIP配置,建议保持当前默认值{$POD_IP}。 |
cache | 启用DNS缓存。 |
errors | 错误信息到标准输出。 |
health | coredns健康检查配置,当前侦听{$POD_IP}:8080,请保持此默认值,否则导致coredns健康检查失败而不断重启 |
kubernetes | CoreDNS Kubernetes插件,提供集群内服务解析能力。 |
loadbalance | 轮转式DNS 负载均衡器, 在应答中随机分配 A、AAAA 和 MX 记录的顺序。 |
prometheus | CoreDNS自身metrics数据接口, 默认zone侦听{$POD_IP}:9153,请保持此默认值,否则普罗无法采集coredns metrics数据。 |
forward | 不在Kubernetes 集群域内的任何查询都将转发到默认的解析器 (/etc/resolv.conf)。 |
reload | 允许自动重新加载已更改的Corefile。 编辑 ConfigMap 配置后,请等待两分钟,以使更改生效。 |
步骤 3 完成以上配置后,单击“安装”。
kubernetes中的域名解析逻辑
DNS策略可以在每个pod基础上进行设置,目前,Kubernetes支持Default、ClusterFirst、ClusterFirstWithHostNet和None四种DNS策略,具体请参见https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/。这些策略在pod-specific的dnsPolicy字段中指定。
- “Default” :如果dnsPolicy被设置为“Default”,则名称解析配置将从pod运行的节点继承。 自定义上游域名服务器和存根域不能够与这个策略一起使用。
- “ClusterFirst”: 如果dnsPolicy被设置为“ClusterFirst”,任何与配置的集群域后缀不匹配的DNS查询(例如,www.kubernetes.io)将转发到从该节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游DNS服务器。
- “ClusterFirstWithHostNet”: 对于使用hostNetwork运行的Pod,您应该明确设置其DNS策略“ClusterFirstWithHostNet”。
- “None”: 它允许Pod忽略Kubernetes环境中的DNS设置。应使用dnsConfigPod规范中的字段提供所有DNS设置 。
说明
Kubernetes 1.10及以上版本,支持Default、ClusterFirst、ClusterFirstWithHostNet和None四种策略;低于Kubernetes 1.10版本,仅支持default、ClusterFirst和ClusterFirstWithHostNet三种。
“Default”不是默认的DNS策略。如果dnsPolicy的Flag没有特别指明,则默认使用“ **ClusterFirst** ”。
路由请求流程:
未配置存根域:没有匹配上配置的集群域名后缀的任何请求,例如“www.kubernetes.io”,将会被转发到继承自节点的上游域名服务器。
已配置存根域:如果配置了存根域和上游DNS服务器,DNS查询将基于下面的流程对请求进行路由:
- 查询首先被发送到coredns中的DNS缓存层。
- 从缓存层,检查请求的后缀,并根据下面的情况转发到对应的DNS上:
- 具有集群后缀的名字(例如“.cluster.local”):请求被发送到coredns。
- 具有存根域后缀的名字(例如“.acme.local”):请求被发送到配置的自定义DNS解析器(例如:监听在 1.2.3.4)。
- 未能匹配上后缀的名字(例如“widget.com”):请求被转发到上游DNS。
路由请求流程
版本记录
CCE插件版本记录