coredns域名解析-九游平台
插件简介
coredns域名解析插件是一款通过链式插件的方式为kubernetes提供域名解析服务的dns服务器。
coredns是由cncf孵化的开源软件,用于cloud-native环境下的dns服务器和服务发现九游平台的解决方案。coredns实现了插件链式架构,能够按需组合插件,运行效率高、配置灵活。在kubernetes集群中使用coredns能够自动发现集群内的服务,并为这些服务提供域名解析。同时,通过级联云上dns服务器,还能够为集群内的工作负载提供外部域名的解析服务。
该插件为系统资源插件,在创建集群时默认安装。
目前coredns已经成为社区kubernetes集群推荐的dns服务器九游平台的解决方案。
coredns九游平台官网:
开源社区地址:
dns详细使用方法请参见。
约束与限制
coredns域名解析插件正常运行或升级时,请确保集群中的可用节点数大于等于插件的实例数,且所有实例都处于运行状态,否则将导致插件异常或升级失败。
安装插件
本插件为系统默认安装,若因特殊情况卸载后,可参照如下步骤重新安装。
- 登录cce控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到coredns域名解析插件,单击“安装”。
- 在安装插件页面,设置“规格配置”。
表1 coredns插件规格配置 参数
参数说明
实例数
插件实例的副本数量。
实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。
容器
coredns所能提供的域名解析qps与cpu消耗成正相关,集群中的节点/容器数量增加时,coredns实例承受的压力也会同步增加。请根据集群的规模,合理调整插件实例数和容器cpu/内存配额,配置建议请参见表2。
表2 coredns插件配额建议 节点数量
推荐配置
实例数
cpu申请值
cpu限制值
内存申请值
内存限制值
50
2500qps
2
500m
500m
512mi
512mi
200
5000qps
2
1000m
1000m
1024mi
1024mi
1000
10000qps
2
2000m
2000m
2048mi
2048mi
2000
20000qps
4
2000m
2000m
2048mi
2048mi
- 设置插件支持的“参数配置”。
表3 coredns插件参数配置 参数
参数说明
存根域设置
对自定义的域名配置域名服务器,格式为一个键值对,键为dns后缀域名,值为一个或一组dns ip地址,如 'acme.local -- 1.2.3.4,6.7.8.9'。
详情请参见。
高级配置
- parametersyncstrategy:插件升级时是否配置一致性检查。
- ensureconsistent:表示启用配置一致性检查,如果集群中记录的配置和实际生效配置不一致,插件将无法升级。
- force:表示升级时忽略配置一致性检查。请您自行确保当前生效配置和原配置一致。插件升级完毕后,需将parametersyncstrategy参数值恢复为ensureconsistent,重新启用配置一致性检查。
- inherit:表示升级时自动继承差异配置。插件升级完毕后,parametersyncstrategy的参数值将自动恢复为ensureconsistent,重新启用配置一致性检查。
- servers: coredns 1.23.1插件版本开始开放servers配置,用户可对servers做定制化配置,详情请参见。
其中plugins为coredns中各组件配置。一般场景建议保持默认配置,以免出现配置错误而导致coredns整体不可用。每个plugin组件可包含"name"、"parameters"(可选)、"configblock"(可选)配置,对应生成的corefile配置文件中格式如下:
$name $parameters { $configblock }
常用plugin的说明请参见表4。更多配置详情请参见。
- upstream_nameservers:上游域名服务器地址。
高级配置示例:
{ "annotations": {}, "parametersyncstrategy": "ensureconsistent", "servers": [ { "plugins": [ { "name": "bind", "parameters": "{$pod_ip}" }, { "name": "cache", "configblock": "servfail 5s", "parameters": 30 }, { "name": "errors" }, { "name": "health", "parameters": "{$pod_ip}:8080" }, { "name": "ready", "parameters": "{$pod_ip}:8081" }, { "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" } ], "port": 5353, "zones": [ { "zone": "." } ] } ], "upstream_nameservers": ["8.8.8.8", "8.8.4.4"] }
表4 coredns主zone默认plugin配置说明 plugin名称
描述
bind
coredns侦听的hostip配置,建议保持当前默认值{$pod_ip}。详情请参见。
cache
启用dns缓存。详情请参见。
插件版本>=1.25.10时,支持关闭servfail缓存。如需关闭servfail缓存,请将configblock设置为"servfail 0";否则servfail缓存的单位为s,不可省略。
errors
错误信息到标准输出。详情请参见。
health
coredns健康检查配置,当前侦听{$pod_ip}:8080,请保持此默认值,否则导致coredns健康检查失败而不断重启。详情请参见。
ready
检查后端服务是否准备好接收流量,当前侦听{$pod_ip}:8081。如果后端服务没有准备好,coredns将会暂停 dns 解析服务,直到后端服务准备好为止。详情请参见。
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配置后,请等待两分钟,以使更改生效。详情请参见。
log
开启coredns域名解析的日志。详情请参见。
示例如下:
{ "name": "log" }
template
设置快速应答模板,aaaa表示ipv6解析请求,rcode控制应答返回nxdomain,即表示没有ipv6解析结果。详情请参见。
示例如下:
{ "configblock": "rcode nxdomain", "name": "template", "parameters": "any aaaa" }
- parametersyncstrategy:插件升级时是否配置一致性检查。
- 设置插件实例的“调度策略”。
- 调度策略对于daemonset类型的插件实例不会生效。
- 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
表5 插件调度配置 参数
参数说明
多可用区部署
- 优先模式:优先将插件的deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
- 均分模式:插件deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
- 强制模式:插件deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。
节点亲和
- 不配置:插件实例不指定节点亲和调度。
- 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。
- 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。
- 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。
同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)插件的 deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 deployment 实例所在的节点被标记污点后插件的 deployment 实例的驱逐策略。
插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。
详情请参见。
- 完成以上配置后,单击“安装”。
组件说明
容器组件 |
说明 |
资源类型 |
---|---|---|
coredns |
该容器为提供集群域名解析服务的dns服务器。 |
deployment |
kubernetes中的域名解析逻辑
dns策略可以在每个pod基础上进行设置,目前,kubernetes支持default、clusterfirst、clusterfirstwithhostnet和none四种dns策略,具体请参见。这些策略在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。
版本记录
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
1.29.5 |
v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 |
修复部分问题 |
|
1.29.4 |
v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 |
适配cce v1.29集群 |
|
1.28.7 |
v1.21 v1.23 v1.25 v1.27 v1.28 |
支持插件热更新配置,无需滚动升级 |
|
1.28.5 |
v1.21 v1.23 v1.25 v1.27 v1.28 |
修复部分问题 |
|
1.28.4 |
v1.21 v1.23 v1.25 v1.27 v1.28 |
适配cce v1.28集群 |
|
1.27.4 |
v1.19 v1.21 v1.23 v1.25 v1.27 |
- |
|
1.27.1 |
v1.19 v1.21 v1.23 v1.25 v1.27 |
适配cce v1.27集群 |
|
1.25.1 |
v1.19 v1.21 v1.23 v1.25 |
适配cce v1.25集群 |
|
1.23.3 |
v1.15 v1.17 v1.19 v1.21 v1.23 |
插件依赖例行升级 |
|
1.23.2 |
v1.15 v1.17 v1.19 v1.21 v1.23 |
插件依赖例行升级 |
|
1.23.1 |
v1.15 v1.17 v1.19 v1.21 v1.23 |
适配cce v1.23集群 |
|
1.17.15 |
v1.15 v1.17 v1.19 v1.21 |
适配cce v1.21集群 |
|
1.17.9 |
v1.15 v1.17 v1.19 |
插件依赖例行升级 |
|
1.17.7 |
v1.15 v1.17 v1.19 |
同步至社区v1.8.4版本 |
|
1.17.4 |
v1.17 v1.19 |
适配cce v1.19集群 |
|
1.17.3 |
v1.17 |
支持v1.17集群,修复存根域配置问题 |
|
1.17.1 |
v1.17 |
支持v1.17集群 |
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨