consul通過DNS協議查找服務
1、centos默認沒有dig命令,dig命令屬於bind-utils工具包,安裝這個包之後就可以使用dig命令了。
yum -y install bind-utils
2、使用DNS API來獲取A記錄ip地址
對於DNS API,服務的DNS名稱是 NAME.service.consul 。默認所有的DNS名稱都是在 consul 名稱空間下,當然這個是可配置的。service 子域名告訴Consul我們正在查詢服務,並且 NAME 就是要查詢的服務的名稱。
對於我們註冊的minio服務,對應的查詢設置就是 minio.service.consul:
[root@nginx ~]# dig @127.0.0.1 -p 8600 minio.service.consul
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @127.0.0.1 -p 8600 minio.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15982
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 5
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;minio.service.consul. IN A
;; ANSWER SECTION:
minio.service.consul. 0 IN A 172.16.10.228
minio.service.consul. 0 IN A 172.16.10.227
minio.service.consul. 0 IN A 172.16.10.229
minio.service.consul. 0 IN A 172.16.10.226
;; ADDITIONAL SECTION:
minio.service.consul. 0 IN TXT "consul-network-segment="
minio.service.consul. 0 IN TXT "consul-network-segment="
minio.service.consul. 0 IN TXT "consul-network-segment="
minio.service.consul. 0 IN TXT "consul-network-segment="
;; Query time: 5 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: 四 3月 26 10:52:16 CST 2020
;; MSG SIZE rcvd: 257
可以看到,4個帶了節點的IP地址的 A 記錄被返回了,它就是可用的服務。 A 記錄只能包含IP地址。
3、使用DNS API來獲取完整的地址/端口的 SRV 記錄:
[root@nginx ~]# dig @127.0.0.1 -p 8600 minio.service.consul SRV
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @127.0.0.1 -p 8600 minio.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48403
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 9
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;minio.service.consul. IN SRV
;; ANSWER SECTION:
minio.service.consul. 0 IN SRV 1 1 9000 minio-2.node.shenzhen.consul.
minio.service.consul. 0 IN SRV 1 1 9000 minio-1.node.shenzhen.consul.
minio.service.consul. 0 IN SRV 1 1 9000 minio-4.node.shenzhen.consul.
minio.service.consul. 0 IN SRV 1 1 9000 minio-3.node.shenzhen.consul.
;; ADDITIONAL SECTION:
minio-2.node.shenzhen.consul. 0 IN A 172.16.10.227
minio-2.node.shenzhen.consul. 0 IN TXT "consul-network-segment="
minio-1.node.shenzhen.consul. 0 IN A 172.16.10.226
minio-1.node.shenzhen.consul. 0 IN TXT "consul-network-segment="
minio-4.node.shenzhen.consul. 0 IN A 172.16.10.229
minio-4.node.shenzhen.consul. 0 IN TXT "consul-network-segment="
minio-3.node.shenzhen.consul. 0 IN A 172.16.10.228
minio-3.node.shenzhen.consul. 0 IN TXT "consul-network-segment="
;; Query time: 1 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: 四 3月 26 10:53:03 CST 2020
;; MSG SIZE rcvd: 449
SRV 記錄顯示了minio服務證運行在節點 minio-*.node.shenzhen.consul 的9000端口上。額外的部分和 A 記錄返回的內容一樣。