Consul DNS 与 8600 端口
8600 是 Consul 的 DNS 接口端口。Consul 在集群中维护服务与节点的注册信息及健康状态,并在 8600 上提供 DNS 应答:应用用常见的 DNS 查询语法就能把服务名解析成健康实例的 IP,形如 web.service.consul。这是服务发现最经典的一种形态,不引入新协议,直接借用 DNS。
基本信息
| 服务 | Consul DNS interface |
|---|---|
| 端口/协议 | UDP 与 TCP 8600 |
| 记录类型 | A/AAAA 返回健康实例,SRV 附加端口与权重 |
| 子域结构 | service、node、datacenter 与标签过滤 |
| 权限要求 | 默认查询无需认证,启用 ACL 后可限制查询 |
| 安全等级 | 仅业务与集群网段 |
典型使用场景
- 服务发现:应用按服务名解析出健康实例 IP,替代硬编码地址
- 负载分发:A 记录返回多个实例,客户端自行轮询与重试
- 端口发现:SRV 记录同时给出目标端口,适合动态端口场景
- 健康检查联动:不健康实例自动从应答中剔除
- 跨机房寻址:用数据中心子域解析同名服务
DNS 查询示例
DNS 查询示例
dig @127.0.0.1 -p 8600 web.service.consul # 解析健康实例的 A 记录
dig @127.0.0.1 -p 8600 web.service.consul SRV # 同时拿到实例与端口
dig @127.0.0.1 -p 8600 web.service.dc1.consul # 指定数据中心
dig @127.0.0.1 -p 8600 _http._tcp.web.service.consul SRV # 带标签的查询
ss -lntup | grep 8600 # 核对 UDP 与 TCP 监听查询语法读法
| 查询 | 含义 | 返回内容 |
|---|---|---|
| web.service.consul | 当前数据中心内的服务 | 健康实例的 IP 列表 |
| web.service.dc1.consul | 指定数据中心的服务 | 该区的健康实例 IP |
| web.node.consul | 按节点名查询 | 节点的地址信息 |
| SRV 类型查询 | 服务加端口 | 实例地址、端口与权重 |
| tag.web.service.consul | 带标签筛选 | 只返回带该标签的实例 |
运维要点
- 解析结果无缓存语义,客户端要按秒级 TTL 重新查询才能跟上实例变化
- 递归解析器只把 .consul 域转发到 8600,其余域名仍走上游 DNS
- 健康检查阈值与间隔决定剔除速度,调大间隔会让故障实例多存活一段时间
- 跨机房解析要显式写数据中心子域,否则拿到的是本地实例
- 把查询数量纳入监控,异常的解析激增通常意味着客户端缓存失效
Consul DNS 只返回通过健康检查的实例,解析结果会随检查状态变化。排查问题时把 DNS 结果与健康检查状态一起看,而不是单纯比对 IP 列表。
把系统 DNS 直接指向 8600 而不配置上游转发,未注册域名会解析失败,整机网络访问异常。生产环境一般经 dnsmasq 或 Unbound 转发,只把 .consul 域交给 Consul。