GNU/Linux >> Znalost Linux >  >> Linux

Jak nakonfigurovat NGINX jako TCP/UDP Load Balancer v Linuxu

Jak víme, NGINX je jedním z vysoce hodnocených webových serverů s otevřeným zdrojovým kódem, ale lze jej použít také jako vyrovnávač zatížení TCP a UDP. Jednou z hlavních výhod použití nginx jako nástroje pro vyrovnávání zatížení přes HAProxy je to, že může také vyvažovat provoz založený na UDP. V tomto článku si ukážeme, jak lze NGINX nakonfigurovat jako nástroj pro vyrovnávání zatížení pro aplikace nasazené v clusteru Kubernetes.

Předpokládám, že cluster Kubernetes je již nastaven a je v provozu, vytvoříme virtuální počítač založený na CentOS / RHEL pro NGINX.

Níže jsou uvedeny podrobnosti o nastavení laboratoře:

  • NGINX VM (minimální 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

Pojďme se vrhnout na instalaci a konfiguraci NGINX, v mém případě používám minimální CentOS 8 pro NGINX.

Krok 1) Povolte úložiště EPEL pro balíček nginx

Přihlaste se do svého systému CentOS 8 a povolte úložiště epel, protože balíček nginx není k dispozici ve výchozích úložištích CentOS / RHEL.

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

Krok 2) Nainstalujte NGINX pomocí příkazu dnf

Spuštěním následujícího příkazu dnf nainstalujte nginx,

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

Ověřte podrobnosti NGINX spuštěním příkazu rpm,

# rpm -qi nginx

Povolte porty NGINX ve bráně firewall spuštěním příkazů pod příkazy

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

Nastavte SELinux do permisivního režimu pomocí následujících příkazů,

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

Krok 3) Extrahujte podrobnosti NodePort pro řadič vstupu z nastavení Kubernetes

V Kubernetes se nginx ingress controller používá ke zpracování příchozího provozu pro definované zdroje. Když nasadíme ingress controller, pak se v té době také vytvoří služba, která mapuje porty hostitelského uzlu na porty 80 a 443. Tyto porty hostitelských uzlů se otevírají z každého pracovního uzlu. Chcete-li získat tyto podrobnosti, přihlaste se do hlavního uzlu kube nebo kontrolního plánu a spusťte

$ kubectl get all -n ingress-nginx

Jak můžeme vidět na výstupu výše, NodePort 32760 každého pracovního uzlu je mapován na port 80 a NodePort 32375 je mapován na port 443. Tyto porty uzlů v konfiguračním souboru Nginx použijeme pro vyrovnávání zátěže tcp provozu.

Krok 4) Nakonfigurujte NGINX, aby fungoval jako nástroj pro vyrovnávání zatížení TCP

Upravte konfigurační soubor nginx a přidejte do něj následující obsah

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

Zakomentuje řádky sekcí serveru (od 38 do 57) a přidá následující řádky

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

Uložte a ukončete soubor.

Podle výše uvedených změn, když jakýkoli požadavek přijde na portu 80 na IP serveru nginx, bude směrován na IP adresy pracovních uzlů Kubernetes (192.168.1.41/42) na NodePort (32760).

Spusťte a povolte službu NGINX pomocí následujících příkazů,

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

Otestujte NGINX pro nástroj pro vyrovnávání zatížení TCP

Chcete-li otestovat, zda nginx funguje dobře nebo ne jako nástroj pro vyrovnávání zatížení TCP pro Kubernetes, nasaďte nasazení založené na nginx, odhalte nasazení prostřednictvím služby a definujte vstupní zdroj pro nasazení nginx. K nasazení těchto objektů Kubernetes jsem použil následující příkazy a soubor yaml,

[[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] ~]$

Spuštěním následujících příkazů získáte podrobnosti o nasazení, svc a vstupu:

Perfektní, nechte aktualizovat soubor hostitele vašeho systému tak, aby nginx-lb.example.com ukazoval na IP adresu serveru nginx  (192.168.1.50)

192.168.1.50      nginx-lb.example.com

Zkusme pingnout na adresu URL, abychom potvrdili, že odkazuje na IP serveru 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

Nyní zkuste získat přístup k URL prostřednictvím webového prohlížeče,

Skvělé, výše potvrzuje, že NGINX funguje dobře jako nástroj pro vyrovnávání zatížení TCP, protože vyrovnává zatížení TCP provoz na portu 80 mezi pracovními uzly K8.

Krok 5) Nakonfigurujte NGINX tak, aby fungoval jako UDP Load Balancer

Předpokládejme, že uvnitř Kubernetes běží aplikace založená na UDP, aplikace je vystavena s portem UDP 31923 jako typ NodePort. Nakonfigurujeme NGINX tak, aby vyvažoval zatížení UDP provozu přicházejícího na port 1751 do NodePort pracovních uzlů k8s.

Předpokládejme, že již máme spuštěný modul s názvem „linux-udp-port“, ve kterém je dostupný příkaz nc, vystavte jej prostřednictvím služby na portu UDP 10001 jako typ 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] ~]$

Chcete-li nakonfigurovat NGINX jako nástroj pro vyrovnávání zatížení UDP, upravte jeho konfigurační soubor a na konec souboru přidejte následující obsah

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

Uložte a ukončete soubor a restartujte službu nginx pomocí následujícího příkazu

[[email protected] ~]# systemctl restart nginx

Povolte port UDP 1751 ve bráně firewall spuštěním následujícího příkazu

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

Otestujte UDP Load Balancing s výše nakonfigurovaným NGINX

Přihlaste se do POD a spusťte fiktivní službu, která naslouchá na portu UDP 10001,

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

Nechte to tak, přihlaste se k počítači, ze kterého chcete otestovat vyrovnávání zátěže UDP, ujistěte se, že server NGINX je z tohoto počítače dostupný, spusťte následující příkaz pro připojení k portu udp (1751) na IP serveru NGINX a poté zkuste zadejte řetězec

# nc -u 192.168.1.50 1751

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

Nyní přejděte do ssh session POD, tam bychom měli vidět stejnou zprávu,

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

Perfektní výše uvedený výstup potvrzuje, že vyvažování zátěže UDP s NGINX funguje dobře. To je vše z tohoto článku, doufám, že to najdete informativní a pomůže vám nastavit NGINX Load Balancer. Neváhejte se prosím podělit o svou technickou zpětnou vazbu v sekci komentářů níže.


Linux
  1. Jak nakonfiguruji Vim jako svůj výchozí editor v Linuxu

  2. Jak nakonfigurovat virtualizaci na Redhat Linuxu

  3. Jak nakonfigurovat HAProxy load balancer

  1. Jak načíst nebo uvolnit modul jádra Linuxu

  2. Jak nainstalovat a nakonfigurovat HAProxy load balancer na Rocky Linux/Alma Linux 8

  3. Jak nainstalovat a nakonfigurovat Nginx ze zdroje na Linuxu

  1. Jak sledovat TCP a UDP porty v reálném čase

  2. Jak nakonfigurovat Chroot SFTP Server v Linuxu

  3. Jak nakonfigurovat síťovou kartu označenou VLAN (Ethernet Card) na serverech Linux