Làm chủ truy vấn DNS trong Consul – Service Discovery

Làm chủ truy vấn DNS trong Consul  – Service DiscoveryCuongquach.com | Một trong những kênh truy vấn chính về thông tin liên quan đến Service Discovery đó chính là DNS. Consul, một dịch vụ Service Discovery cũng không ngoại lệ. Bài viết hôm nay nằm trong Series bài về ‘Dịch vụ Service Discovery – Consul‘.

Để tiếp thu được kiến thức về Consul, bạn cần nắm vững kiến thức về mô hình dịch vụ Service Discovery trong hệ thống dịch vụ Microservices. Tiếp đó là các bài viết cơ bản ban đầu về Consul.

truy vấn dns trong consul

Consul DNS

Consul có một dịch vụ DNS riêng chạy ở port mặc định là 8600 UDP, địa chỉ IP lắng nghe mặc định sẽ là 127.0.0.1 . Từ dịch vụ DNS riêng này, Consul có khả năng phục vụ người dùng hoặc các ứng dụng truy xuất thông tin địa chỉ IP của các nhóm dịch vụ “Service” đã được khai báo nhận diện và quản lý trong Consul qua cú pháp tên miền nội bộ của Consul DNS.

Ví dụ nhắc lại để các bạn nhớ thì :

  • Consul Server, là Service Registry. Các máy chủ khai báo đăng ký “Service” với Consul Service Registry thông tin IP, Port,.. cần nhận diện và quản lý.
  • Consul Service Registry triển khai dịch vụ DNS Server Consul riêng để quản lý mapping thông tin IP, Port của các Service với cú pháp tên miền nội bộ. Từ hệ thống DNS Server Consul riêng, Consul sẽ có khả năng phục vụ phân giải tên miền cho các truy vấn public hoặc nội bộ hệ thống liên quan đến tên miền mapping Service.

ví dụ service registry

Nếu xài DNS Server trong nội bộ mạng thì bạn cần khai báo DNS Resolve trên máy chủ của bạn về địa chỉ IP DNS Consul. Ví dụ: bạn khai báo name server là địa chỉ IP DNS Consul.

# vi /etc/resolv.conf
nameserver 192.168.100.220

Còn nếu DNS Server của bạn public thì ok hẳn bạn đã biết cách quản trị DNS Server Public rồi.

Một số đặc điểm dịch vụ DNS của Consul

  • Mặc định kết quả trả về của DNS Consul có TTL là 0 . Tức là không có caching DNS kết quả truy vấn.
  • Nếu bạn đang sử dụng một số dịch vụ DNS khác như BIND, PowerDNS,.. nếu muốn kết hợp với DNS Consul thì cần forward tất cả truy vấn DNS đến tên miền nội bộ được cấu hình trên Consul Agent về địa chỉ IP+Port của DNS Consul.
  • Bạn cũng có thể thay đổi port dịch vụ DNS từ 8600 sang 53 well-known port.

Node Lookup

Đầu tiên chúng ta sẽ quan tâm về việc phân giải tên miền quản lý thông tin các Node. Cú pháp để query DNS phân giải thông tin về một Node như sau :

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

Chú thích:

  • <node> : tên node mà bạn cấu hình cho máy chủ chạy Consul Agent.
  • <datacenter> : thông tin tên datacenter mà bạn cấu hình khi chạy Consul Agent.
  • <domain> : tên miền bạn cấu hình sử dụng trong hệ thống Consul Cluster của bạn.

Ví dụ: file cấu hình Consul Agent có các thông tin sau.

{
  ...
  "datacenter": "consul",
  "node_name": "consul220",
  "domain": "cuongquach.com",
  ...
}

Thì cú pháp tên miền nội bộ để truy vấn thông tin Node DNS đến Consul sẽ là :

consul220.node.consul.cuongquach.com

Tiến hành query dns bằng lệnh ‘dig‘ (nếu OS bạn chưa có thì cài vào nhé) thì sẽ có kết quả như sau (Lưu ý: DNS trong bài này đang chạy port mặc định mà Consul setup là 8600) :

# dig @127.0.0.1 -p 8600 consul220.node.consul.cuongquach.com ANY

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> @127.0.0.1 -p 8600 consul220.node.consul.cuongquach.com ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59592
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;consul220.node.consul.cuongquach.com. IN ANY

;; ANSWER SECTION:
consul220.node.consul.cuongquach.com. 0 IN A 192.168.100.220
consul220.node.consul.cuongquach.com. 0 IN TXT "consul-network-segment="

;; Query time: 1 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Sun Nov 25 20:42:42 +07 2018
;; MSG SIZE rcvd: 125

Chú thích:

  • Khi bạn truy vấn thông tin DNS về Node thì sẽ nhận được các record A, AAAA thể hiện thông tin địa chỉ ip của node.
  • Record TXT sẽ chứa các thông tin node_meta của node đó.

Rút gọn truy vấn DNS Node Consul.

# dig +short @127.0.0.1 -p 8600 consul220.node.consul.cuongquach.com
192.168.100.220

Services Loopkup

Kế đến là loại truy vấn tên miền nội bộ DNS Domain dùng để lấy thông tin về các Node IP dịch vụ “Service” đã được quy định quản lý theo nhóm dịch vụ domain. Nếu bạn chưa biết về khái niệm Service hay cấu hình khai báo Service trong Consul thì hãy đọc lại bài này:

Cú pháp tên miền để truy vấn thông tin các Node IP trong một Service Consul.

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

Chú thích:

  • [tag] : nhãn mà bạn đánh để phân biệt giữa các nhóm dịch vụ của bạn theo nhu cầu quản lý riêng.
  • <service> : tên Service mà bạn khai báo quản lý dịch vụ theo port lắng nghe.
  • [datacenter] : thông tin tên datacenter mà bạn cấu hình khi chạy Consul Agent.
  • <domain> : tên miền bạn cấu hình sử dụng trong hệ thống Consul Cluster của bạn.

Ví dụ :

{
  "service": {
    "name": "nginx",
    "tags": [
      "docker-api"
    ],
    "address": "192.168.100.201",
    "port": 80
  }
}

Thì cú pháp tên miền để truy vấn thông tin Service DNS đến Consul sẽ là :

docker-api.nginx.service.consul.cuongquach.com

Tiến hành truy vấn dns thì sẽ có kết quả như sau :

# dig @127.0.0.1 -p 8600 docker-api.nginx.service.consul.cuongquach.com ANY

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> @127.0.0.1 -p 8600 docker-api.nginx.service.consul.cuongquach.com ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34105
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;docker-api.nginx.service.consul.cuongquach.com. IN ANY

;; ANSWER SECTION:
docker-api.nginx.service.consul.cuongquach.com. 0 IN A 10.12.168.201
docker-api.nginx.service.consul.cuongquach.com. 0 IN TXT "consul-network-segment="

;; Query time: 1 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Sun Nov 25 22:12:38 +07 2018
;; MSG SIZE rcvd: 135

Rút gọn truy vấn DNS.

# dig +short @127.0.0.1 -p 8600 docker-api.nginx.service.consul.cuongquach.com
10.12.168.201

Còn nếu bạn muốn dùng truy vấn DNS Consul để có thông tin địa chỉ IP và port Service mà bạn đã khai báo map với IP đó thì như thế nào. Đơn giản là bạn có thể dùng kết hợp record SRV .

# dig @127.0.0.1 -p 8600 nginx.service.consul.cuongquach.com SRV

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> @127.0.0.1 -p 8600 nginx.service.consul.cuongquach.com SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18636
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nginx.service.consul.cuongquach.com. IN SRV

;; ANSWER SECTION:
nginx.service.consul.cuongquach.com. 0 IN SRV 1 1 80 0a0ca8c9.addr.consul.cuongquach.com.

;; ADDITIONAL SECTION:
0a0ca8c9.addr.consul.cuongquach.com. 0 IN A 10.12.168.201
oob-docker1.node.consul.cuongquach.com. 0 IN TXT "consul-network-segment="

;; Query time: 3 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Nov 26 17:20:34 +07 2018
;; MSG SIZE rcvd: 204

Record SRV sẽ giúp bạn biết là Service bạn đang truy vấn chạy trên port gì và port đó đang ở trên Node nào.

nginx.service.consul.cuongquach.com. 0 IN SRV 1 1 80 0a0ca8c9.addr.consul.cuongquach.com.

Ở phần ‘ADDITIONAL SECTION‘ sẽ là thông tin địa chỉ IP của Node tương ứng với tên miền nội bộ mapping ở trên.

0a0ca8c9.addr.consul.cuongquach.com. 0 IN A 10.12.168.201
docker1.node.consul.cuongquach.com. 0 IN TXT "consul-network-segment="

Các loại truy vấn DNS khác trong Consul

Ngoài 2 loại truy vấn cơ bản thường gặp như trên thì ta còn có 2 loại truy vấn DNS khác đối với DNS Consul là :

  • Connect-Capable Service Lookups
  • Prepared Query Lookups

Chúng ta sẽ tìm hiểu 2 loại truy vấn DNS Consul này ở một bài viết khác.

Tổng kết

Vậy là bạn đã biết cách thực hiện các truy vấn DNS để kiểm tra thông tin tên miền nội bộ một Service trong Consul. Từ đó cũng có thể hình dung được cách các ứng dụng khác khi truy vấn DNS để lấy danh sách địa chỉ IP Node trong một nhóm Service Consul ra sao.

Nguồn: https://cuongquach.com/

Previous articleVideo Tự Học Angular 5 Tiếng Việt – Nguyễn Đức Hoàng
Next articleKiểm tra thời gian uptime của một Docker Container
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !