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 qua HAProxy là nó có thể cân bằng được traffic dựa trên UDP. Trong bài này chúng tôi sẽ huwóng dẫn các bạn NGINX được cấu hình làm cân bằng tải như thế nào cho các ứng dụng được triển khai trên Kubernetes cluster.
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
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 <none> 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
Máy chủ vật lý
4 Lợi Ích Thiết Thực Mà Máy Chủ Vật Lý Mang Lại Cho Doanh Nghiệp
Trong thời đại chuyển đổi số mạnh mẽ như hiện nay, việc đầu tư vào [...]
Giải pháp
Cách Phòng Chống DDoS Cho Website, VPS, và Server Hiệu Quả
Các cuộc tấn công DDoS (Distributed Denial of Service) là một mối đe dọa lớn [...]
Chưa được phân loại portal portal cloudzone Về Portal
Mã đăng nhập Portal Cloudzone là gì? 3 cách lấy mã đăng nhập
Ngày nay, khi công nghệ số phát triển mạnh mẽ, việc bảo mật thông tin [...]
Cloud hosting Blog
So sánh Cloud Hosting cPanel, DirectAdmin và Plesk
Khi lựa chọn dịch vụ Cloud Hosting để lưu trữ website hoặc ứng dụng, một [...]
Cloud VPS
[2024] Kinh Nghiệm Chọn VPS Treo Game Không Lo Gián Đoạn
Với sự phát triển nhanh chóng của các trò chơi trực tuyến, việc duy trì [...]
Blog
Tuyển Đại lý dịch vụ Cloud – Chiết khấu đến 35%
Cloudzone tuyển đại lý dịch vụ Cloud, Data Center với lợi nhuận không giới hạn, [...]