合理配置CoreDNS
CoreDNS在插件界面仅支持按预设规格配置,通常情况下,这满足绝大多数使用场景。但在一些少数对CoreDNS资源用量有要求的场景下,不能根据需要灵活配置。
CoreDNS官方文档:https://coredns.io/plugins/
合理配置CoreDNS规格
- 登录CCE控制台,进入集群。
- 在左侧导航栏中选择“插件管理”,在“已安装插件”下,单击CoreDNS插件的“编辑”按钮,进入插件详情页。
- 在“规格配置”下配置CoreDNS参数规格。
- 您可以根据业务需求调整不同的实例数、CPU配额和内存配额,来调整CoreDNS所能提供的域名解析QPS。
- 单击“确定”,完成配置下发。
合理配置DNS存根域
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。
- 在“参数配置”下添加存根域。格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址,如 'consul.local --10.150.0.1'。
- 单击“确定”完成配置更新。
- 在左侧导航栏中选择“配置与密钥”,在“kube-system”命名空间下,查看名为coredns的配置项数据,确认是否更新成功。
对应Corefile内容如下:
.:5353 { bind {$POD_IP} cache 30 { servfail 5s } errors health {$POD_IP}:8080 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } loadbalance round_robin prometheus {$POD_IP}:9153 forward . /etc/resolv.conf { policy random } reload ready {$POD_IP}:8081 } consul.local:5353 { bind {$POD_IP} errors cache 30 forward . 10.150.0.1 }
合理配置Host
如果您需要为特定域名指定hosts,可以使用Hosts插件来配置。示例配置如下:
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。
- 在“参数配置”下编辑高级配置,在plugins字段添加以下内容。
{ "configBlock": "192.168.1.1 www.example.com\nfallthrough", "name": "hosts" }
此处配置不能遗漏fallthrough字段,fallthrough表示当在hosts找不到要解析的域名时,会将解析任务传递给CoreDNS的下一个插件。如果不写fallthrough的话,任务就此结束,不会继续解析,会导致集群内部域名解析失败的情况。
hosts的详细配置请参见https://coredns.io/plugins/hosts/。
- 单击“确定”完成配置更新。
- 在左侧导航栏中选择“配置与密钥”,在“kube-system”命名空间下,查看名为coredns的配置项数据,确认是否更新成功。
对应Corefile内容如下:
.:5353 { bind {$POD_IP} hosts { 192.168.1.1 www.example.com fallthrough } cache 30 errors health {$POD_IP}:8080 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } loadbalance round_robin prometheus {$POD_IP}:9153 forward . /etc/resolv.conf { policy random } reload ready {$POD_IP}:8081 }
配置Forward插件与上游DNS服务的默认协议
- NodeLocal DNSCache采用TCP协议与CoreDNS进行通信,CoreDNS会根据请求来源使用的协议与上游DNS服务器进行通信。因此默认情况下,来自业务容器的集群外部域名解析请求会依次经过NodeLocal DNSCache、CoreDNS,最终以TCP协议请求VPC内DNS服务器。
- VPC内DNS服务器对TCP协议支持有限,如果您使用了NodeLocal DNSCache,您需要修改CoreDNS配置,让其总是优先采用UDP协议与上游DNS服务器进行通信,避免解析异常。建议您使用以下方式修改CoreDNS配置文件。
在forward插件用于设置 upstream Nameservers 上游 DNS 服务器。包含以下参数:
prefer_udp:即使请求通过TCP传入,也要首先尝试使用UDP。
若您希望CoreDNS会优先使用UDP协议与上游通信,则forward中指定请求上游的协议为prefer_udp,forward插件的详细信息请参考https://coredns.io/plugins/forward/。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。
- 在“参数配置”下编辑高级配置,在plugins字段修改以下内容。
{ "configBlock": "prefer_udp", "name": "forward", "parameters": ". /etc/resolv.conf" }
合理配置缓存策略
如果CoreDNS配置了上游DNS服务器时,可以通过合理的缓存策略允许CoreDNS在无法连接上游DNS服务器时使用已过期的本地缓存。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件管理”,在“已安装插件”下,在CoreDNS下单击“编辑”,进入插件详情页。
- 在“参数配置”下编辑高级配置,在plugins字段修改cache内容。cache的详细配置请参见https://coredns.io/plugins/cache/。
{ "configBlock": "servfail 5s\nserve_stale 60s immediate", "name": "cache", "parameters": 30 }
- 单击“确定”完成配置更新。
- 在左侧导航栏中选择“配置与密钥”,在“kube-system”命名空间下,查看名为coredns的配置项数据,确认是否更新成功。
对应Corefile内容如下:
.:5353 { bind {$POD_IP} cache 30 { servfail 5s serve_stale 60s immediate } errors health {$POD_IP}:8080 kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } loadbalance round_robin prometheus {$POD_IP}:9153 forward . /etc/resolv.conf { policy random } reload ready {$POD_IP}:8081 }