67 Nguyễn Thị Định, Phường An Hải, TP. Đà Nẵng
Hướng dẫn

Cấu hình NGINX như một cân bằng tải TCP/UDP trong Linux

Cấu hình NGINX như một cân bằng tải TCP/UDP trong Linux
Chia sẻ

Như chúng ta đã biết, NGINX là một trong những web server mã nguồn mở được nhiều người sử dụng nhưng nó cũng có thể sử dụng như một cân bằng tải TCP và UDP. Một trong những lợi ích chính khi sử dụng nginx làm cân bằng tải thông...


Trong trường hợp này Kubernetes cluster đã được cài đặt và nó đang chạy, chúng tôi sẽ tạo máy ảo CentOS/RHEL cho NGINX
Chi tiết của bài Lab này

  • NGINX VM (Minimal CentOS / RHEL) – 192.168.1.50
  • Kube Master – 192.168.1.40
  • Kube Worker 1 – 192.168.1.41
  • Kube worker 2 – 192.168.1.42

Giờ chúng ta sẽ chuyển tới phần cài đặt và cấu hình NGINX, trong trường hợp này tôi dùng CentOS 8 bản minimal cho NGINX

Mục lục

Bước 1: Kích hoạt EPEL repository
Bước 2: Cài đặt NGINX từ dnf
Bước 3: Trích xuất thông tin NodePort để cấu hình ingress controller từ Kubernetes
Bước 4: Cấu hình Nginx để cân bằng tải TCP Traffic
Bước 5: Cấu hình Nginx để cân bằng tải UDP Traffic

Bước 1: Kích hoạt EPEL repository

Chúng ta cần kích hoạt epel repository vì package nginx không có trong repository mặc định của CentOS
Chúng ta thực hiện câu lệnh

sudo dnf install epel-release -y
Bước 2: Cài đặt NGINX từ dnf
sudo dnf install nginx -y

Kiểm tra các thông tin của NGINX thông qua câu lệnh rpm

rpm -qi nginx


Cho phép NGINX port hoạt động qua Firewall

firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd –reload

Cài đặt SELinux ở permissive mode

sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config setenforce 0
Bước 3: Trích xuất thông tin NodePort để cấu hình ingress controller từ Kubernetes

Trong Kubernetes, nginx ingress controller được sử dụng để xử lí incoming traffic cho tài nguyên được định trước. Khi chúng ta triển khai ingress controller thì ngay lúc đó dịch vụ sẽ được triển khai và sẽ maps node ports vào port 80 và 443. Những host node ports này được mở cho mỗi worker node. Để có được những thông tin này, đăng nhập vào kube master node hoặc control plan và chạy câu lệnh sau

kubectl get all -n ingress-nginx


Như chúng ta đã thấy trong output ở trên. NodePort 32760 đã được mapped tới port 80 và NodePort 32375 đã được mapped tới port 443. Chúng ta sử dụng những node ports này trong file cấu hình Nginx ở bước sau để cân bằng tải TCP Traffic

Bước 4: Cấu hình Nginx để cân bằng tải TCP Traffic

Mở File cấu hình Nginx bằng câu lệnh

vim /etc/nginx/nginx.conf

Tiến hành Comment các dòng trong hình (Từ dòng 38 tới dòng 57)


Thêm vào đoạn code sau

upstream backend { server 192.168.1.41:32760; server 192.168.1.42:32760; } server { listen 80; location / { proxy_read_timeout 1800; proxy_connect_timeout 1800; proxy_send_timeout 1800; send_timeout 1800; proxy_set_header Accept-Encoding ""; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://backend; } location /nginx_status { stub_status; } } 

Lưu và thoát
Cấu hình như trên, khi có bất kì request nào tới Port 80 sẽ được điều hướng tới Kubernetes worker nodes IPs (192.168.1.41/42) trên NodePort (32760).
Giờ hãy khởi động và kích hoạt NGINX service dùng các câu lệnh sau

systemctl start nginx systemctl enable nginx
Bước 5: Cấu hình Nginx để cân bằng tải UDP Traffic

Giả sử chúng ta có một ứng dụng dựa trên UDP đang chạy trong Kubernetes, ứng dụng đang sử dụng UDP port 31923 như một NodePort. Chúng ta sẽ cấu hình NGINX để cân bằng tải UDP Traffic tới từ Port 1751 tới NodePort of k8s worker nodes.
Hãy giải sử chúng ta đang chạy một pod có tên là “linux-udp-port”, và câu lệnh nc được cài đặt sẵn, sử dụng UDP port 10001 như một NodePort

kubectl expose pod linux-udp-pod --type=NodePort --port=10001 --protocol=UDP service/linux-udp-pod exposed kubectl get svc linux-udp-pod NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE linux-udp-pod NodePort 10.96.6.216  10001:31923/UDP 19m 

Để Cấu hình Nginx để cân bằng tải UDP Traffic. Chỉnh sửa file cấu hình của Nginx và thêm vào các dòng sau

stream { upstream linux-udp { server 192.168.1.41:31923; server 192.168.1.42:31923; } server { listen 1751 udp; proxy_pass linux-udp; proxy_responses 1; }


Khởi chạy lại dịch vụ Nginx

systemctl restart nginx

Mở Port 1751 trên Firewall

firewall-cmd --permanent --add-port=1751/udp firewall-cmd --reload
Chia sẻ

Bài viết liên quan

Tối ưu chi phí hạ tầng: chọn đúng cấu hình, thuê theo nhu cầu

Tối ưu chi phí hạ tầng: chọn đúng cấu hình, thuê theo nhu cầu

Cách giảm chi phí hạ tầng hợp lý: chọn đúng cấu hình (right-sizing), thuê theo nhu cầu, kết hợp dịch vụ và rà soát tài nguyên định kỳ mà không ảnh hưởng vận hành

Cách săn khuyến mãi VPS/máy chủ, tránh bẫy giá rẻ

Cách săn khuyến mãi VPS/máy chủ, tránh bẫy giá rẻ

Cách tận dụng khuyến mãi VPS và máy chủ hợp lý, đọc kỹ điều kiện gia hạn và nhận biết bẫy giá rẻ ảnh hưởng chất lượng dịch vụ

Chọn nhà cung cấp VPS/máy chủ: tiêu chí cần kiểm tra

Chọn nhà cung cấp VPS/máy chủ: tiêu chí cần kiểm tra

Các tiêu chí chọn nhà cung cấp VPS và máy chủ: uptime/SLA, hạ tầng data center, peering, hỗ trợ kỹ thuật và chính sách hoàn tiền, kèm cách đọc cam kết dịch vụ

Phần mềm mã nguồn mở thay thế để tiết kiệm bản quyền

Phần mềm mã nguồn mở thay thế để tiết kiệm bản quyền

Gợi ý các phần mềm mã nguồn mở thay thế giải pháp có phí cho máy chủ: hệ điều hành, cơ sở dữ liệu, web server, control panel và ảo hóa, kèm lưu ý chi phí vận hành

So sánh bản quyền control panel: cPanel, DirectAdmin, Plesk

So sánh bản quyền control panel: cPanel, DirectAdmin, Plesk

So sánh cPanel, DirectAdmin và Plesk về tính năng, hệ điều hành hỗ trợ và chi phí bản quyền, kèm gợi ý chọn control panel theo số website và nhu cầu

Các loại bản quyền Windows Server và cách chọn cho đúng

Các loại bản quyền Windows Server và cách chọn cho đúng

Hiểu cấp phép Windows Server theo core, CAL và các kênh OEM/Volume/CSP, phân biệt Standard và Datacenter để chọn bản quyền phù hợp và hợp lệ