GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengonfigurasi NGINX sebagai Penyeimbang Beban TCP/UDP di Linux

Seperti yang kita ketahui NGINX adalah salah satu server web open source dengan rating tinggi tetapi juga dapat digunakan sebagai penyeimbang beban TCP dan UDP. Salah satu manfaat utama menggunakan nginx sebagai penyeimbang beban di atas HAProxy adalah nginx juga dapat memuat keseimbangan lalu lintas berbasis UDP. Dalam artikel ini kami akan mendemonstrasikan bagaimana NGINX dapat dikonfigurasi sebagai Load balancer untuk aplikasi yang di-deploy di cluster Kubernetes.

Saya berasumsi bahwa cluster Kubernetes sudah disiapkan dan aktif dan berjalan, kami akan membuat VM berdasarkan CentOS / RHEL untuk NGINX.

Berikut adalah detail penyiapan lab:

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

Mari masuk ke instalasi dan konfigurasi NGINX, dalam kasus saya, saya menggunakan minimal CentOS 8 untuk NGINX.

Langkah 1) Aktifkan repositori EPEL untuk paket nginx

Masuk ke sistem CentOS 8 Anda dan aktifkan repositori epel karena paket nginx tidak tersedia di repositori default CentOS / RHEL.

[[email protected] ~]$ sudo dnf install epel-release -y

Langkah 2) Instal NGINX dengan perintah dnf

Jalankan perintah dnf berikut untuk menginstal nginx,

[[email protected] ~]$ sudo dnf install nginx -y

Verifikasi detail NGINX dengan menjalankan di bawah perintah rpm,

# rpm -qi nginx

Izinkan port NGINX di firewall dengan menjalankan perintah di bawah

[[email protected] ~]# firewall-cmd --permanent --add-service=http
[[email protected] ~]# firewall-cmd --permanent --add-service=https
[[email protected] ~]# firewall-cmd –reload

Atur SELinux dalam mode permisif menggunakan perintah berikut,

[[email protected] ~]# sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config
[[email protected] ~]# setenforce 0
[[email protected] ~]#

Langkah 3) Ekstrak detail NodePort untuk pengontrol ingress dari penyiapan Kubernetes

Di Kubernetes, pengontrol ingress nginx digunakan untuk menangani lalu lintas masuk untuk sumber daya yang ditentukan. Ketika kita menyebarkan pengontrol ingress maka pada saat itu juga dibuat sebuah layanan yang memetakan port node host ke port 80 dan 443. Port node host ini dibuka dari setiap node pekerja. Untuk mendapatkan detail ini, login ke kube master node atau control plan dan jalankan,

$ kubectl get all -n ingress-nginx

Seperti yang kita lihat output di atas, NodePort 32760 dari setiap node pekerja dipetakan ke port 80 dan NodePort 32375 dipetakan ke port 443. Kami akan menggunakan port node ini dalam file konfigurasi Nginx untuk lalu lintas tcp penyeimbangan beban.

Langkah 4) Konfigurasi NGINX untuk bertindak sebagai penyeimbang beban TCP

Edit file konfigurasi nginx dan tambahkan konten berikut ke dalamnya,

[[email protected] ~]# vim /etc/nginx/nginx.conf

Beri komentar pada baris bagian Server (Mulai dari 38 hingga 57) dan tambahkan baris berikut,

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;
    }
}

Simpan &keluar dari file.

Sesuai dengan perubahan di atas, ketika ada permintaan yang masuk pada port 80 pada IP server nginx, maka permintaan tersebut akan dirutekan ke IP node pekerja Kubernetes (192.168.1.41/42) di NodePort (32760).

Mari kita mulai dan aktifkan layanan NGINX menggunakan perintah berikut,

[[email protected] ~]# systemctl start nginx
[[email protected] ~]# systemctl enable nginx

Uji NGINX untuk TCP Load balancer

Untuk menguji apakah nginx berfungsi dengan baik atau tidak sebagai penyeimbang beban TCP untuk Kubernetes, terapkan penerapan berbasis nginx, paparkan penerapan melalui layanan, dan tentukan sumber daya masuk untuk penerapan nginx. Saya telah menggunakan perintah berikut dan file yaml untuk menerapkan objek Kubernetes ini,

[[email protected] ~]$ kubectl create deployment nginx-deployment --image=nginx
deployment.apps/nginx-deployment created
[[email protected] ~]$ kubectl expose deployments nginx-deployment  --name=nginx-deployment --type=NodePort --port=80
service/nginx-deployment exposed
[[email protected] ~]$
[[email protected] ~]$ vi nginx-ingress.yaml

[[email protected] ~]$ kubectl create -f nginx-ingress.yaml
ingress.networking.k8s.io/nginx-ingress-example created
[[email protected] ~]$

Jalankan perintah berikut untuk mendapatkan detail penerapan, svc, dan ingress:

Sempurna, perbarui file host sistem Anda sehingga nginx-lb.example.com mengarah ke alamat ip server nginx  (192.168.1.50)

192.168.1.50      nginx-lb.example.com

Mari coba ping url untuk mengonfirmasi bahwa itu menunjuk ke IP Server NGINX,

# ping nginx-lb.example.com
Pinging nginx-lb.example.com [192.168.1.50] with 32 bytes of data:
Reply from 192.168.1.50: bytes=32 time<1ms TTL=64
Reply from 192.168.1.50: bytes=32 time<1ms TTL=64

Sekarang coba akses URL melalui browser web,

Bagus, di atas mengonfirmasi bahwa NGINX berfungsi dengan baik sebagai penyeimbang beban TCP karena lalu lintas tcp penyeimbang beban datang pada port 80 antara node pekerja K8.

Langkah 5) Konfigurasikan NGINX untuk bertindak sebagai Penyeimbang Beban UDP

Misalkan kita memiliki aplikasi berbasis UDP yang berjalan di dalam Kubernetes, aplikasi diekspos dengan port UDP 31923 sebagai tipe NodePort. Kami akan mengonfigurasi NGINX untuk menyeimbangkan beban lalu lintas UDP yang datang pada port 1751 ke NodePort dari node pekerja k8s.

Mari kita asumsikan kita telah menjalankan pod bernama “linux-udp-port” di mana perintah nc tersedia, ekspos melalui layanan pada port UDP 10001 sebagai jenis NodePort.

[[email protected] ~]$ kubectl expose pod linux-udp-pod --type=NodePort --port=10001 --protocol=UDP
service/linux-udp-pod exposed
[[email protected] ~]$
[[email protected] ~]$ 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
[[email protected] ~]$

Untuk mengonfigurasi NGINX sebagai penyeimbang beban UDP, edit file konfigurasinya dan tambahkan konten berikut di akhir file

[[email protected] ~]# vim /etc/nginx/nginx.conf
……
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;
  }
 ……

Simpan dan keluar dari file dan mulai ulang layanan nginx menggunakan perintah berikut,

[[email protected] ~]# systemctl restart nginx

Izinkan port UDP 1751 di firewall dengan menjalankan perintah berikut

[[email protected] ~]# firewall-cmd --permanent --add-port=1751/udp
[[email protected] ~]# firewall-cmd --reload

Uji Load balancing UDP dengan NGINX yang dikonfigurasi di atas

Masuk ke POD dan mulai layanan dummy yang mendengarkan pada port UDP 10001,

[[email protected] ~]$ kubectl exec -it linux-udp-pod -- bash
[email protected]:/# nc -l -u -p 10001

Biarkan ini apa adanya, masuk ke mesin dari mana Anda ingin menguji penyeimbangan beban UDP, pastikan server NGINX dapat dijangkau dari mesin itu, jalankan perintah berikut untuk terhubung ke port udp (1751) pada IP Server NGINX dan kemudian coba ketik string

# nc -u 192.168.1.50 1751

[[email protected] ~]# nc -u 192.168.1.50 1751
Hello, this UDP LB testing

Sekarang masuk ke sesi ssh POD, di sana kita akan melihat pesan yang sama,

[email protected]:/# nc -l -u -p 10001
Hello, this UDP LB testing

Output sempurna di atas menegaskan bahwa, penyeimbangan beban UDP berfungsi dengan baik dengan NGINX. Itu saja dari artikel ini, saya harap Anda menemukan ini informatif dan membantu Anda mengatur NGINX Load balancer. Jangan ragu untuk menyampaikan masukan teknis Anda di bagian komentar di bawah.


Linux
  1. Bagaimana saya mengonfigurasi Vim sebagai editor default saya di Linux

  2. Cara mengkonfigurasi Virtualisasi di Redhat Linux

  3. Cara Install dan Konfigurasi HAProxy load balancer di Rocky Linux/Alma Linux 8

  1. Cara memuat atau membongkar modul kernel Linux

  2. Cara mengonfigurasi penyeimbang beban HAProxy

  3. Cara Menginstal dan Mengkonfigurasi Nginx dari Sumber di Linux

  1. Cara Menonton Port TCP dan UDP secara Real-time

  2. Cara Mengkonfigurasi Server SFTP Chroot di Linux

  3. Cara Mengkonfigurasi NIC (Ethernet Card) dengan tag VLAN di Server Linux