Consul là một nền tảng hiện đại để khám phá dịch vụ cho phép bạn đăng ký dịch vụ qua giao diện DNS và HTTP. Nó cũng cung cấp tính năng Service mesh cho phép kết nối an toàn qua TLS và cung cấp quyền hạn giữa các dịch vụ.
Ngoài ra, Consul còn cung cấp API Gateway để quản lý quyền truy cập vào dịch vụ và kho lưu trữ KV (Khóa/Giá trị) để lưu trữ cấu hình dịch vụ.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt cụm Consul trên máy chủ Ubuntu 22.04.
Bây giờ chúng ta hãy bắt đầu.
Trong phần này, bạn sẽ cài đặt Consul vào hệ thống Ubuntu của mình bằng kho lưu trữ Consul chính thức dành cho Ubuntu.
Trước khi bắt đầu, hãy chạy lệnh bên dưới để cài đặt một số phụ thuộc cơ bản vào hệ thống của bạn. Nhập y để tiếp tục cài đặt.
Bây giờ hãy chạy lệnh bên dưới để thêm khóa GPG cho Consul kho lưu trữ.
Sau đó thêm kho lưu trữ Consul cho Ubuntu bằng lệnh bên dưới.
Tiếp theo, hãy cập nhật và làm mới chỉ mục gói Ubuntu của bạn bằng lệnh sau lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22138%22%3E%3C/svg%3E
Sau khi kho lưu trữ được cập nhật, hãy cài đặt Consul bằng lệnh apt sau. Khi được nhắc, hãy nhập y để tiếp tục và xác nhận cài đặt.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Sau khi cài đặt hoàn tất, hãy chạy lệnh bên dưới để xác minh tệp nhị phân Consul và phiên bản.
Bạn có thể thấy Consul 1.17.2 được cài đặt bên dưới tại /usr/bin/consul.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22509%22%20height=%22228%22%3E%3C/svg%3E
Để khởi động UFW, hãy chạy lệnh ufw bên dưới. Với điều này, bạn sẽ kích hoạt cấu hình OpenSSH sẽ mở cổng SSH mặc định 22, sau đó chạy và kích hoạt UFW.
Nhập y để xác nhận và bạn sẽ thấy xác nhận như sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22733%22%20height=%22186%22%3E%3C/svg%3E
Tiếp theo, bạn sẽ cần mở các cổng TCP 8300, 8301, 8302, 8400, 8500, và8600 cho Consul.
Chạy lệnh bên dưới để mở các cổng đó trên tất cả các hệ thống Ubuntu của bạn.
Cuối cùng, hãy chạy lệnh bên dưới để xác minh trạng thái UFW trên máy chủ Ubuntu của bạn. Bạn sẽ thấy trạng thái UFW đang hoạt động với các cổng mở 8300, 8301, 8302, 8400, 8500 và 8600.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22504%22%20height=%22268%22%3E%3C/svg%3E
Trước khi bắt đầu, hãy chạy lệnh bên dưới để dừng dịch vụ consul. Lệnh này sẽ đảm bảo rằng Consul đã dừng trước khi bắt đầu cấu hình.
sudo systemctl stop consul
Bây giờ hãy chạy lệnh bên dưới trên máy chủ consul1 để tạo khóa ngẫu nhiên cho Consul. Khóa này sẽ được phân phối cho tất cả các máy chủ Consul, vì vậy hãy đảm bảo sao chép khóa đã tạo.
Bây giờ hãy tạo cấu hình Consul mới /etc/consul.d/consul.hcl trong tất cả các máy chủ Consul của bạn. Trong ví dụ này, chúng ta sẽ sử dụng lệnh nano editor.
Thay đổi cấu hình Consul mặc định và đảm bảo điều chỉnh một số giá trị như sau:
Khi hoàn tất, hãy lưu và thoát tệp.
Dưới đây là một số tham số Consul mà bạn có thể tập trung vào từng servers:
Tiếp theo, chạy lệnh bên dưới để khởi động Consul trên từng máy chủ của bạn. Bắt đầu từ consul01, consul02, sau đó là consul03.
Cuối cùng, bạn có thể chạy lệnh sau để xác minh dịch vụ Consul và đảm bảo dịch vụ đang chạy trên từng máy chủ của bạn.
Bên dưới, bạn có thể thấy Consul đang chạy trên consul01.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22264%22%3E%3C/svg%3E
Dưới đây là dịch vụ Consul đang chạy trên máy chủ consul02.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22271%22%3E%3C/svg%3E
Và bên dưới là trạng thái từ consul03 máy chủ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Kiểm tra danh sách máy chủ khả dụng trên cụm Consul của bạn bằng lệnh bên dưới.
Nếu cài đặt Consul thành công, bạn sẽ thấy ba máy chủ trong cụm Consul của mình.
Ngoài việc liệt kê các thành viên, bạn cũng có thể chạy lệnh sau để lấy danh sách các đối tác trên cụm Consul. Thao tác này sẽ hiển thị cho bạn ID bè, trạng thái, cử tri và phiên bản giao thức.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2295%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh cụm Consul của bạn bằng cách tạo khóatest_db mới và giá trị testkv bằng cách sử dụng lệnh sau lệnh.
Sau khi cơ sở dữ liệu khóa-giá trị được tạo, hãy chạy lệnh consul bên dưới để lấy khóa test_db. Bạn sẽ thấy giá trị testkv.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22624%22%20height=%22140%22%3E%3C/svg%3E
Cuối cùng, hãy kiểm tra DNS của Consul bằng lệnh dig bên dưới. Điều này sẽ hiển thị cho bạn tên miền mặc định cho Consul consul.service.consul và trỏ đến địa chỉ IP của các cụm Consul.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22426%22%3E%3C/svg%3E
Khởi chạy trình duyệt web và truy cập địa chỉ IP máy chủ của bạn như http://192.168.5.36:8500/ui/. Trong bảng điều khiển Consul, bạn có thể xem thông tin của ba phiên bản Consul khả dụng.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22417%22%3E%3C/svg%3E
Tiếp theo, nhấp vào menu Nodes để hiển thị thông tin chi tiết về từng node. Bên dưới, bạn có thể thấy trạng thái Hearly, địa chỉ IP máy chủ và phiên bản Consul của từng máy chủ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22278%22%3E%3C/svg%3E
Cuối cùng, hãy nhấp vào menu Khóa/Giá trị để có danh sách dữ liệu khóa-giá trị khả dụng trong cụm Consul của bạn. Vì vậy, bên dưới bạn có thể thấy test_db mà bạn đã tạo trước đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22208%22%3E%3C/svg%3E
Ngoài ra, Consul còn cung cấp API Gateway để quản lý quyền truy cập vào dịch vụ và kho lưu trữ KV (Khóa/Giá trị) để lưu trữ cấu hình dịch vụ.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt cụm Consul trên máy chủ Ubuntu 22.04.
Điều kiện tiên quyết
Trước khi bắt đầu, hãy đảm bảo rằng bạn có 3 máy chủ Ubuntu 22.04 có thể kết nối với nhau qua mạng nội bộ. Ngoài ra, hãy đảm bảo rằng bạn có quyền root trên mỗi máy chủ của mình.Bây giờ chúng ta hãy bắt đầu.
Cài đặt Consul
Consul là dịch vụ khám phá dịch vụ mã nguồn mở và miễn phí của Hoshicorp. Nó có sẵn trên hầu hết các bản phân phối Linux, bao gồm Debian/Ubuntu và các bản phân phối RHEL/CentOS.Trong phần này, bạn sẽ cài đặt Consul vào hệ thống Ubuntu của mình bằng kho lưu trữ Consul chính thức dành cho Ubuntu.
Trước khi bắt đầu, hãy chạy lệnh bên dưới để cài đặt một số phụ thuộc cơ bản vào hệ thống của bạn. Nhập y để tiếp tục cài đặt.
Mã:
sudo apt install apt-transport-https gnupg curl wget

Bây giờ hãy chạy lệnh bên dưới để thêm khóa GPG cho Consul kho lưu trữ.
Mã:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Mã:
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
Mã:
sudo apt update
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22138%22%3E%3C/svg%3E
Sau khi kho lưu trữ được cập nhật, hãy cài đặt Consul bằng lệnh apt sau. Khi được nhắc, hãy nhập y để tiếp tục và xác nhận cài đặt.
Mã:
sudo apt install consul
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Sau khi cài đặt hoàn tất, hãy chạy lệnh bên dưới để xác minh tệp nhị phân Consul và phiên bản.
Mã:
which consul
consul version
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22509%22%20height=%22228%22%3E%3C/svg%3E
Cài đặt UFW
Trước khi triển khai cụm Consul, bạn sẽ mở các cổng sẽ được consul sử dụng thông qua UFW. Hầu hết các hệ thống Ubuntu đều có các gói UFW được cài đặt sẵn, nhưng chúng vẫn chưa được khởi động.Để khởi động UFW, hãy chạy lệnh ufw bên dưới. Với điều này, bạn sẽ kích hoạt cấu hình OpenSSH sẽ mở cổng SSH mặc định 22, sau đó chạy và kích hoạt UFW.
Mã:
sudo ufw allow OpenSSH
sudo ufw enable
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22733%22%20height=%22186%22%3E%3C/svg%3E
Tiếp theo, bạn sẽ cần mở các cổng TCP 8300, 8301, 8302, 8400, 8500, và8600 cho Consul.
Chạy lệnh bên dưới để mở các cổng đó trên tất cả các hệ thống Ubuntu của bạn.
Mã:
for i in 8300/tcp 8301/tcp 8302/tcp 8400/tcp 8500/tcp 8600/tcp
do sudo ufw allow $i
done
Mã:
sudo ufw status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22504%22%20height=%22268%22%3E%3C/svg%3E
Đang tạo Cụm Consul
Sau khi bạn đã cấu hình UFW, bước tiếp theo là tạo một cụm Consul. Bạn có thể thực hiện việc này bằng cách tạo một tệp cấu hình HCL mới trong thư mục /etc/consul.d/.Trước khi bắt đầu, hãy chạy lệnh bên dưới để dừng dịch vụ consul. Lệnh này sẽ đảm bảo rằng Consul đã dừng trước khi bắt đầu cấu hình.
sudo systemctl stop consul
Bây giờ hãy chạy lệnh bên dưới trên máy chủ consul1 để tạo khóa ngẫu nhiên cho Consul. Khóa này sẽ được phân phối cho tất cả các máy chủ Consul, vì vậy hãy đảm bảo sao chép khóa đã tạo.
Mã:
consul keygen
Mã:
sudo nano /etc/consul.d/consul.hcl
Mã:
# Full configuration options can be found at https://www.consul.io/docs/agent/config
# datacenter
datacenter = "my-dc-1"
# data_dir
# This flag provides a data directory for the agent to store state.
data_dir = "/opt/consul"
# client_addr
# The address to which the Consul will bind client interfaces, including the HTTP and DNS
# servers.
client_addr = "0.0.0.0"
# ui
# Enables the built-in web UI server and the required HTTP routes.
ui_config{
enabled = true
}
# default domain
domain = "consul"
# enable dns_config
dns_config{
enable_truncate = true
only_passing = true
}
# server
# This flag is used to control if an agent is in server or client mode. When provided,
# an agent will act as a Consul server. Each Consul cluster must have at least one
# server and ideally no more than 5 per datacenter. All servers participate in the Raft
# consensus algorithm to ensure that transactions occur in a consistent, linearizable
# manner. Transactions modify cluster state, which is maintained on all server nodes to
# ensure availability in the case of node failure. Server nodes also participate in a
# WAN gossip pool with server nodes in other datacenters. Servers act as gateways to
# other datacenters and forward traffic as appropriate.
server = true
# Advertise addr - if you want to point clients to a different address than bind or LB.
advertise_addr = "192.168.5.36"
# bootstrap_expect
# This flag provides the number of expected servers in the datacenter.
bootstrap_expect=3
# encrypt
# Specifies the secret key to use for encryption of Consul network traffic.
encrypt = "t/r8+jTHbMd9u/bD63i70e+h4pLUSRprn2mXKTKJXEY="
# retry_join
retry_join = ["192.168.5.36", "192.168.5.37", "192.168.5.38"]
Dưới đây là một số tham số Consul mà bạn có thể tập trung vào từng servers:
- server: True có nghĩa là nút sẽ hoạt động như một máy chủ Consul.
- advertise_addr: Thay đổi giá trị này bằng địa chỉ IP tương ứng của máy chủ Consul.
- bootstrap_expect: Cụm của bạn sẽ có bao nhiêu máy chủ?
- encrypt: Mọi máy chủ phải có cùng một khóa.
- retry_join: Nhập địa chỉ IP của cụm Consul vào tham số này.
Mã:
sudo consul validate /etc/consul.d/
Mã:
sudo systemctl start consul
Mã:
sudo systemctl status consul
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22264%22%3E%3C/svg%3E
Dưới đây là dịch vụ Consul đang chạy trên máy chủ consul02.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22271%22%3E%3C/svg%3E
Và bên dưới là trạng thái từ consul03 máy chủ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Tương tác với Consul
Tại thời điểm này, bạn đã hoàn tất việc cấu hình cụm Consul với ba máy chủ Ubuntu. Trong bước này, bạn sẽ xác minh cụm Consul của mình bằng cách kiểm tra danh sách máy chủ, tạo cơ sở dữ liệu khóa-giá trị trong Consul, sau đó xác minh tên miền của máy chủ Consul.Kiểm tra danh sách máy chủ khả dụng trên cụm Consul của bạn bằng lệnh bên dưới.
Mã:
consul members
Ngoài việc liệt kê các thành viên, bạn cũng có thể chạy lệnh sau để lấy danh sách các đối tác trên cụm Consul. Thao tác này sẽ hiển thị cho bạn ID bè, trạng thái, cử tri và phiên bản giao thức.
Mã:
consul operator raft list-peers
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2295%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh cụm Consul của bạn bằng cách tạo khóatest_db mới và giá trị testkv bằng cách sử dụng lệnh sau lệnh.
Mã:
consul kv put consul/configuration/test_db testkv
Mã:
consul kv get consul/configuration/test_db
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22624%22%20height=%22140%22%3E%3C/svg%3E
Cuối cùng, hãy kiểm tra DNS của Consul bằng lệnh dig bên dưới. Điều này sẽ hiển thị cho bạn tên miền mặc định cho Consul consul.service.consul và trỏ đến địa chỉ IP của các cụm Consul.
Mã:
dig @127.0.0.1 -p 8600 consul.service.consul
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22426%22%3E%3C/svg%3E
Truy cập Giao diện người dùng web của Consul
Consul cũng cung cấp bảng điều khiển quản trị web trên cài đặt mặc định và chạy trên cổng 8500 với đường dẫn /ui.Khởi chạy trình duyệt web và truy cập địa chỉ IP máy chủ của bạn như http://192.168.5.36:8500/ui/. Trong bảng điều khiển Consul, bạn có thể xem thông tin của ba phiên bản Consul khả dụng.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22417%22%3E%3C/svg%3E
Tiếp theo, nhấp vào menu Nodes để hiển thị thông tin chi tiết về từng node. Bên dưới, bạn có thể thấy trạng thái Hearly, địa chỉ IP máy chủ và phiên bản Consul của từng máy chủ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22278%22%3E%3C/svg%3E
Cuối cùng, hãy nhấp vào menu Khóa/Giá trị để có danh sách dữ liệu khóa-giá trị khả dụng trong cụm Consul của bạn. Vì vậy, bên dưới bạn có thể thấy test_db mà bạn đã tạo trước đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22208%22%3E%3C/svg%3E