Consul服务域名解析异常求助:指定DNS有效系统默认无效
Consul服务域名解析异常解决方法
问题根源
- 系统默认DNS查询优先走外部服务器,外部服务器无法识别
.consul私有域,导致未指定DNS时返回NXDOMAIN - dnsmasq未配置转发
.consul域请求到Consul的DNS端口(8600),ping、psql等工具使用系统默认DNS链时无法解析Consul域名 replica.postgres-cluster.service.consul解析失败,说明Consul中没有注册带replica标签的postgres-cluster服务实例,或者服务标签配置有误
解决步骤
一、配置dnsmasq转发.consul域请求到Consul DNS
- 创建或编辑dnsmasq的Consul配置文件:
vi /etc/dnsmasq.d/consul.conf
添加以下内容:
# 将所有.consul域的DNS请求转发到本地Consul DNS端口 server=/consul/127.0.0.1#8600
- 重启dnsmasq服务使配置生效:
systemctl restart dnsmasq
- 调整
/etc/resolv.conf,让系统优先使用dnsmasq(127.0.0.1)作为DNS服务器:
search ourdomain.com nameserver 127.0.0.1 nameserver our_ns1 nameserver our_ns2
注意:如果OL7的systemd自动覆盖
/etc/resolv.conf,可以编辑/etc/resolv.conf.head,添加nameserver 127.0.0.1,这样系统生成resolv.conf时会自动把这条放在最前面。
二、修复replica.postgres-cluster.service.consul解析失败
- 检查Consul中postgres-cluster服务的实例情况:
consul catalog service postgres-cluster
查看输出中是否存在带有replica标签的实例。
2. 如果没有replica实例,需要将PostgreSQL副本节点注册到Consul服务中。示例注册命令:
consul services register -name postgres-cluster -tags replica -address <replica_node_ip> -port 6432
- 如果已有replica实例,检查服务注册时的标签是否正确,确保实例带有
replica标签。Consul支持通过tag.service.consul格式解析带标签的服务实例。
验证配置
执行以下命令确认解析正常:
# 测试master域名解析 ping master.postgres-cluster.service.consul # 测试replica域名解析 nslookup replica.postgres-cluster.service.consul # 测试Consul集群域名解析 dig consul.service.consul
内容的提问来源于stack exchange,提问作者Oxycash
相关产品推荐
相关产品推荐

