Kubernetes环境下CoreDNS配置hosts插件实现子域名自定义解析未生效
CoreDNS hosts自定义解析不生效排查指南
核心排查方向
- 校验hosts插件的条目语法格式
CoreDNS的hosts插件完全兼容系统本地/etc/hosts的书写规范,要求条目必须以IP地址开头,后接关联的域名。你当前配置中subdomain.my-domain.com 88.77.55.44的写法把域名和IP顺序颠倒,插件无法识别这条记录,请求直接触发fallthrough规则,向下传递到forward模块,最终通过公网DNS返回了域名对应的公网IP。
修正后的正确配置片段为:hosts { 88.77.55.44 subdomain.my-domain.com fallthrough } - 确认配置的实际加载状态
CoreDNS的reload插件虽支持自动同步ConfigMap的配置变更,但仍可能出现同步延迟、语法错误导致加载回退的问题。可通过两种方式验证:- 执行
kubectl exec进入运行CoreDNS的Pod,查看容器内/etc/coredns/Corefile的实际内容,确认修改的配置已经同步 - 查看CoreDNS的运行日志,排查是否存在配置解析报错的信息
- 执行
- 校验测试请求的实际流向
如果直接在集群外部、节点主机上执行不带DNS服务地址参数的dig subdomain.my-domain.com命令,系统会默认走本地配置的上游DNS(通常为运营商公网DNS),根本不会把请求发送到CoreDNS实例。正确的测试方式是显式指定CoreDNS的服务地址发起请求,例如:
也可直接在集群内部的业务Pod中执行相同命令,确保测试请求直接命中CoreDNS服务。# 替换为集群CoreDNS Service的实际ClusterIP dig @10.96.0.10 subdomain.my-domain.com - 排除缓存干扰
配置中开启了cache 30缓存策略,默认缓存解析结果30秒。若在修改配置前已经多次查询过该域名,未过期的公网解析缓存会直接返回旧结果,不会触发最新的hosts匹配规则。可等待30秒缓存自然过期后再测试,或临时调低缓存TTL值快速验证。 - 梳理请求传递的链路逻辑
当前hosts块配置的fallthrough参数,作用是当hosts插件无法匹配到对应域名记录时,允许请求继续向下传递到后续的kubernetes、forward插件。当hosts条目修正为正确格式后,插件可以正常匹配到对应记录时,会直接返回自定义的内部IP地址,不会触发fallthrough逻辑。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

