Cấu hình đăng ký Service trên Consul

Cấu hình đăng ký Service trên ConsulCuongquach.com | Yoyo man, các bạn đã trải qua các bài cài đặt về Cụm Consul Server Cluster và cài đặt Consul Client Mode dưới máy chủ dịch vụ. Vậy thì giờ chúng ta sẽ đến với một trong những phần mong chờ nhất khi làm quen với dịch vụ Service Discovery Consul, đó chính là khai báo đối tượng Service để có thể Discovery.

cau-hinh-dang-ky-service-tren-consul

Service trên Consul là gì ?

Một trong những mục tiêu chính của Service Discovery đó chính là có thể cung cấp danh sách các máy chủ dịch vụ khả dụng cho một đối tượng dịch vụ. Chương trình Client Agent sẽ cung cấp cách thức khai báo đối tượng dịch vụ cùng với thông tin máy chủ, kèm theo đó là khả năng health check dịch vụ đó. Ở bài viết này chúng ta sẽ học cách khai báo Service căn bản.

Khai báo service

Có 2 phương thức để đăng ký thông tin 1 dịch vụ (service) trên Consul :

  • Đăng ký qua file cấu hình service
  • Đăng ký qua API HTTP Consul (bài viết sẽ không hướng dẫn cách này. Các bạn có thể tự tìm hiểu tại đây: LINK)

1. Đăng ký Service trên Consul

Chúng ta sẽ có mô hình lab basic vô cùng như sau :

  • Cấu hình trên Consul Agent ở máy chủ Client NTP.

consul-lab-register-service

  • Cần khai báo 2 máy chủ dịch vụ NTP (Port UDP 123) vào nhóm đối tượng dịch vụ NTP được quản lý bởi Service Discovery – Consul.

Đăng ký qua file cấu hình service

Đứng ở máy chủ Consul Client bạn khai báo file cấu hình với cú pháp giúp đăng ký thông tin về dịch vụ mà bạn muốn được Service Discovery. Ví dụ, mình khai báo dịch vụ NTP . Bạn sẽ khai báo file cấu hình này ở máy chủ Consul Client. (Bạn xem thêm bài : Hướng dẫn cài đặt Consul Agent ở Client Mode)
+ Trên NTP-01
# vi /etc/consul.d/client/ntp.json
{
  "service": {
    "name": "ntp",
    "tags": [
      "ntp-01"
    ],
    "address": "10.0.253.20",
    "port": 123
  }
}
+ Trên NTP-02
# vi /etc/consul.d/client/ntp.json
{
  "service": {
    "name": "ntp",
    "tags": [
      "ntp-02"
    ],
    "address": "10.0.253.179",
    "port": 123
  }
}

Chú thích cấu hình:

  • service { } : block dùng để cấu hình khai báo thông tin Service.
  • name : tên định dang cho Service.
  • tag : tag service.
  • address : địa chỉ IP của máy chủ dịch vụ client đang host Service.
  • port : địa chỉ port của dịch vụ mà bạn đang cấu hình.

Lưu ý:

  • Nếu bạn muốn khai báo đăng ký nhiều service khác nhau từ dưới máy chủ Consul Client thì bạn nên cấu hình nhiều file khác nhau.
  • Nếu bạn muốn cập nhật service đã khai báo trên Consul , thì bạn chỉ cần chỉnh sửa file cấu hình và khởi động lại dịch vụ Consul client.

Khởi động lại dịch vụ Consul trên cả 2 máy chủ dịch vụ NTP nào.

# systemctl status consul-client
● consul-client.service - Consul Service Discovery Agent - Client Mode
Loaded: loaded (/etc/systemd/system/consul-client.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-08-05 14:54:51 +07; 31s ago
Docs: https://www.consul.io/
Main PID: 13998 (consul)
CGroup: /system.slice/consul-client.service
└─13998 /usr/bin/consul agent -config-dir=/etc/consul.d/client

Aug 05 14:54:51 node-ntp-01 consul[13998]: consul: adding server node-consul-03 (Addr: tcp/10.0.253.84:8300) (DC: cuongqc-consul)
Aug 05 14:54:51 node-ntp-01 consul[13998]: consul: adding server node-consul-02 (Addr: tcp/10.0.253.35:8300) (DC: cuongqc-consul)
Aug 05 14:54:51 node-ntp-01 consul[13998]: agent: (LAN) joined: 3
Aug 05 14:54:51 node-ntp-01 consul[13998]: 2019/08/05 14:54:51 [INFO] agent: (LAN) joined: 3
Aug 05 14:54:51 node-ntp-01 consul[13998]: Join completed. Synced with 3 initial agents
Aug 05 14:54:51 node-ntp-01 consul[13998]: 2019/08/05 14:54:51 [INFO] agent: started state syncer
Aug 05 14:54:51 node-ntp-01 consul[13998]: ==> Consul agent running!
Aug 05 14:54:51 node-ntp-01 consul[13998]: agent: started state syncer
Aug 05 14:54:51 node-ntp-01 consul[13998]: agent: Synced service "ntp"
Aug 05 14:54:51 node-ntp-01 consul[13998]: 2019/08/05 14:54:51 [INFO] agent: Synced service "ntp"

2. Kiểm tra thông tin service

Chúng ta cũng có 2 hình thức để lấy thông tin về service đã đăng ký từ Consul:

  • DNS Query
  • HTTP API
  • Consul UI (dùng để xem thông tin)

2.1 DNS Query

Bạn nên đọc bài viết sau để nắm rõ chi tiết cách thức sử dụng DNS Query với Consul : Làm chủ truy vấn DNS trong Consul

Còn bạn muốn kiểm tra nhanh cơ bản thì cần tuân theo cú pháp sau :

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

Vậy bạn cần kiểm tra lại thông tin ‘datacenter‘ và ‘domain‘ trong file cấu hình ở cụm Consul Cluster Server, lúc đó chúng ta sẽ có cú pháp sau để query.

# dig @127.0.0.1 -p 8600 ntp.service.cuongqc-consul.cuongquachlab.com ANY

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> @127.0.0.1 -p 8600 ntp.service.cuongqc-consul.cuongquachlab.com ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30355
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ntp.service.cuongqc-consul.cuongquachlab.com. IN ANY

;; ANSWER SECTION:
ntp.service.cuongqc-consul.cuongquachlab.com. 0 IN A 10.0.253.179
ntp.service.cuongqc-consul.cuongquachlab.com. 0 IN TXT "consul-network-segment="
ntp.service.cuongqc-consul.cuongquachlab.com. 0 IN A 10.0.253.20
ntp.service.cuongqc-consul.cuongquachlab.com. 0 IN TXT "consul-network-segment="

;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Aug 05 15:11:00 +07 2019
;; MSG SIZE  rcvd: 170

Nhiều bạn sẽ tự thắc mắc 2 vấn đề khi tới bước này lúc áp dụng Consul :

  • Tên miền xấu vậy, làm sao cho nó đẹp ? -> Bạn nên sử dụng dịch vụ DNS khác rồi CNAME domain cho đẹp.
  • Port default DNS của Consul là 8600, liệu có thể để làm default DNS Server không ? Thường không dùng Consul làm default DNS, mà sẽ kết hợp integrate with DNS Server khác như Route53 nếu làm hạ tầng Cloud AWS. Phần này mình sẽ có bài viết riêng.
  • DNS Domain cũng chính là kênh quan trọng nhất dùng để cung cấp endpoint Service Discovery cho các dịch vụ khác sử dụng.

2.2 HTTP API

Bạn có thể query HTTP API để có được thông tin như sau, cách thức query API này thì khá tiện cho các hoạt động automation.

# curl http://localhost:8500/v1/catalog/service/ntp
[{"ID":"da6d9c9c-d77c-eed0-2fd0-f4f171dd4a13","Node":"node-ntp-01","Address":"10.0.253.20","Datacenter":"cuongqc-consul","TaggedAddresses":{"lan":"10.0.253.20","wan":"10.0.253.20"},"NodeMeta":{"consul-network-segment":""},"ServiceKind":"","ServiceID":"ntp","ServiceName":"ntp","ServiceTags":["ntp-01"],"ServiceAddress":"10.0.253.20","ServiceWeights":{"Passing":1,"Warning":1},"ServiceMeta":{},"ServicePort":123,"ServiceEnableTagOverride":false,"ServiceProxyDestination":"","ServiceProxy":{},"ServiceConnect":{},"CreateIndex":300457,"ModifyIndex":300457},{"ID":"0851dfc8-55f9-7c59-fbaf-7ae3ac49e9b7","Node":"node-ntp-02","Address":"10.0.253.179","Datacenter":"cuongqc-consul","TaggedAddresses":{"lan":"10.0.253.179","wan":"10.0.253.179"},"NodeMeta":{"consul-network-segment":""},"ServiceKind":"","ServiceID":"ntp","ServiceName":"ntp","ServiceTags":["ntp-02"],"ServiceAddress":"10.0.253.179","ServiceWeights":{"Passing":1,"Warning":1},"ServiceMeta":{},"ServicePort":123,"ServiceEnableTagOverride":false,"ServiceProxyDestination":"","ServiceProxy":{},"ServiceConnect":{},"CreateIndex":300559,"ModifyIndex":300559}]

2.3 Consul UI

Với Consul UI khi bạn build hệ thống Consul Cluster, bạn sẽ thấy được thông tin về dịch vụ NTP Service mà bạn vừa khai báo sẽ hiện ngay ở phần ‘Service’ như trong hình.

Vậy là bạn đã biết cách khai báo đăng ký một dịch vụ hiện hữu trên Consul cho hoạt động Service Discovery. Với cách thức này bạn chỉ đang đạt được một mục tiêu cơ bản, đó là ‘Node Discovery‘ và ‘Service Discovery‘ cơ bản chứ chưa tới được mức ‘Service Discovery’ nâng cao với khả năng Healthcheck để tự động thêm/xoá thông tin node service bị lỗi khỏi danh sách truy vấn DNS hoặc HTTP API cho service đó. Ở bài viết kế tiếp chúng ta sẽ cùng tìm hiểu cách làm chủ cách thức Health check trong Consul.

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

Previous articleEbook Mastering Ansible 3rd Edition (PDF)
Next articleCấu hình đăng ký cơ chế kiểm tra (Health check) trên Consul
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 !