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
Blog VPS GPU
Giá thuê VPS GPU treo game 2023: Hướng dẫn thuê và cài đặt chi tiết
Bạn là một game thủ đam mê, luôn tìm kiếm trải nghiệm chơi game tối [...]
Blog Cloud VPS VPS GPU
Vì sao nên thuê VPS GPU tại Cloudzone
Trong vô số những nhà cung cấp dịch vụ thuê VPS GPU trên thị trường, [...]
Blog Cloud VPS VPS GPU
Giải đáp những thắc mắc về dịch vụ thuê VPS có GPU
Bạn đang tìm kiếm một giải pháp VPS mạnh mẽ và hiệu suất cao để [...]
Blog Cloud VPS
Bảng giá thuê VPS GPU mới nhất năm 2023
Trong thế giới công nghệ ngày nay, VPS (Virtual Private Server) có GPU đóng vai [...]
Cloud VPS Blog
VPS GPU: Đỉnh cao hiệu suất với lợi ích & ứng dụng vượt trội
Trong thế giới công nghệ đầy cạnh tranh hiện nay, việc nâng cao hiệu suất [...]
Cloud VPS
VPS có GPU và sức mạnh xử lý đồ họa, phân tích dữ liệu của nó
VPS có GPU là lựa chọn tuyệt vời cho việc xử lý đồ họa cao [...]