Consul的使用三之service查询

DNS Interface

DNS接口是Consul中主要的查询接口之一,另一个是HTTP接口, HTTP接口查询请查阅https://www.consul.io/api/catalog.html#list-services。Consul默认在8600端口监听DNS查询。

要使用DNS接口, 有几种方法可以实现:

一是使用指定的DNS解析库, 然后指向Consul;

二是把Consul设置为节点的DNS服务器, 并且提供recursors配置项, 这样非Consul的查询也能被解析;

最后一种方法是从已有的DNS服务器上把所有consul.为域名的请求转发到consul agent上。

查询的示例方法:

dig @127.0.0.1 -p 8600 redis.service.dc1.consul. ANY

查询redis服务器地址

 

通常情况下, 有两种类型的查询: node lookupsservice lookupsnode lookups指定的查询一个节点的ip地址, 而service lookups则是查询一个服务的ip地址。

 

节点查询

查询一个节点的命令格式为:

<node>.node[.datacenter].<domain>

[datacenter]可选, 默认为当前agent所在的data center。

对于一个node lookups, consul返回值包含A记录, AAAA记录以及TXT记录。

A记录返回ipv4地址, AAAA记录返回ipv6地址, TXT记录会匹配节点的元数据信息node_meta, 如果节点的元数据key以rfc1035-开头, 则只会返回节点的元数据信息。

 

服务查询

service lookups用来查询服务的提供者, consul提供两种方法, 一种是标准查询, 一种是严格遵循RFC 2782规范的查询。

默认情况下, SRV权重为1, 但是可以通过service definition中的Weights属性配置。

 

Standard Lookup

格式:

[tag.]<service>.service[.datacenter].<domain>

tag是可选的, 过滤节点, datacenter可选, 默认是agent所处的数据中心。

标准服务查询支持A记录和SRV记录, SRV记录也会返回服务注册的端口地址。SRV记录默认不返回, 除非是命令中指定, 如:

dig @127.0.0.1 -p 8600 consul.service.consul SRV

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 -p 8600 consul.service.consul ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50483
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;consul.service.consul.     IN SRV

;; ANSWER SECTION:
consul.service.consul. 0   IN SRV 1 1 8300 foobar.node.dc1.consul.

;; ADDITIONAL SECTION:
foobar.node.dc1.consul. 0   IN A   10.1.10.12

 

RFC 2782 Lookup

格式为:

_<service>._<protocol>[.service][.datacenter][.domain]

RFC 2782格式要求service和protocol以_为前缀,防止DNS记录冲突。protocol可以为service中的任何tag, 如果没有tag, 则应该使用tpc, tag的作用和上面的一样, 用来过滤service节点, 如果是tcp, 则不过滤。

 

Prepared Query Lookups
<query or name>.query[.datacenter].<domain>

执行一个已保存的查询语句

 

Connect-Capable Service Lookups
<service>.connect.<domain>

查看支持connect的service, connect可以用来加密连接, 以及授权。

原文地址:https://www.cnblogs.com/helloz/p/12115790.html