GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare NGINX come bilanciatore di carico TCP/UDP in Linux

Come sappiamo NGINX è uno dei server Web open source più apprezzati, ma può anche essere utilizzato come bilanciatore di carico TCP e UDP. Uno dei principali vantaggi dell'utilizzo di nginx come bilanciamento del carico su HAProxy è che può anche bilanciare il traffico basato su UDP. In questo articolo dimostreremo come NGINX può essere configurato come Load Balancer per le applicazioni distribuite nel cluster Kubernetes.

Presumo che il cluster Kubernetes sia già configurato e funzionante, creeremo una VM basata su CentOS/RHEL per NGINX.

Di seguito sono riportati i dettagli di configurazione del laboratorio:

  • NGINX VM (CentOS minimo / RHEL) – 192.168.1.50
  • Maestro di Kube – 192.168.1.40
  • Kube Worker 1 – 192.168.1.41
  • Operaio Kube 2 – 192.168.1.42

Passiamo all'installazione e alla configurazione di NGINX, nel mio caso sto usando CentOS 8 minimo per NGINX.

Passaggio 1) Abilita il repository EPEL per il pacchetto nginx

Accedi al tuo sistema CentOS 8 e abilita il repository epel perché il pacchetto nginx non è disponibile nei repository predefiniti di CentOS/RHEL.

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

Passaggio 2) Installa NGINX con il comando dnf

Esegui il seguente comando dnf per installare nginx,

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

Verifica i dettagli di NGINX eseguendo sotto il comando rpm,

# rpm -qi nginx

Consenti le porte NGINX nel firewall eseguendo sotto i comandi

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

Imposta SELinux in modalità permissiva usando i seguenti comandi,

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

Passaggio 3) Estrai i dettagli di NodePort per il controller di ingresso dalla configurazione di Kubernetes

In Kubernetes, il controller di ingresso nginx viene utilizzato per gestire il traffico in entrata per le risorse definite. Quando distribuiamo il controller di ingresso, in quel momento viene creato anche un servizio che mappa le porte del nodo host sulle porte 80 e 443. Queste porte del nodo host vengono aperte da ciascun nodo di lavoro. Per ottenere questi dettagli, accedi al nodo master kube o al piano di controllo ed esegui,

$ kubectl get all -n ingress-nginx

Come possiamo vedere l'output sopra, NodePort 32760 di ogni nodo di lavoro è mappato sulla porta 80 e NodePort 32375 è mappato sulla porta 443. Utilizzeremo queste porte dei nodi nel file di configurazione di Nginx per il bilanciamento del carico del traffico TCP.

Passaggio 4) Configura NGINX in modo che agisca come bilanciatore di carico TCP

Modifica il file di configurazione di nginx e aggiungi i seguenti contenuti,

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

Commenta le righe delle sezioni del server (a partire da 38 a 57) e aggiungi le righe seguenti,

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

Salva ed esci dal file.

In base alle modifiche precedenti, quando una richiesta arriva sulla porta 80 sull'IP del server nginx, verrà instradata agli IP dei nodi di lavoro Kubernetes (192.168.1.41/42) su NodePort (32760).

Iniziamo e abilitiamo il servizio NGINX usando i seguenti comandi,

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

Testa NGINX per il bilanciamento del carico TCP

Per verificare se nginx funziona correttamente o meno come bilanciatore del carico TCP per Kubernetes, distribuire la distribuzione basata su nginx, esporre la distribuzione tramite il servizio e definire una risorsa di ingresso per la distribuzione di nginx. Ho usato i seguenti comandi e il file yaml per distribuire questi oggetti Kubernetes,

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

Esegui i seguenti comandi per ottenere i dettagli di distribuzione, svc e ingresso:

Perfetto, aggiorna il file host del tuo sistema in modo che nginx-lb.example.com punti all'indirizzo IP del server nginx  (192.168.1.50)

192.168.1.50      nginx-lb.example.com

Proviamo a eseguire il ping dell'URL per confermare che punta all'IP del 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

Ora prova ad accedere all'URL tramite browser web,

Ottimo, quanto sopra conferma che NGINX funziona correttamente come bilanciamento del carico TCP perché sta bilanciando il traffico TCP in arrivo sulla porta 80 tra i nodi di lavoro K8s.

Passaggio 5) Configura NGINX in modo che agisca come UDP Load Balancer

Supponiamo di avere un'applicazione basata su UDP in esecuzione all'interno di Kubernetes, l'applicazione è esposta con la porta UDP 31923 come tipo NodePort. Configurare NGINX per bilanciare il carico del traffico UDP in arrivo sulla porta 1751 a NodePort dei nodi di lavoro k8s.

Supponiamo di avere già in esecuzione un pod chiamato "linux-udp-port" in cui è disponibile il comando nc, esporlo tramite servizio sulla porta UDP 10001 come tipo 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] ~]$

Per configurare NGINX come bilanciatore del carico UDP, modifica il suo file di configurazione e aggiungi i seguenti contenuti alla fine del 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;
  }
 ……

Salva ed esci dal file e riavvia il servizio nginx usando il seguente comando,

[[email protected] ~]# systemctl restart nginx

Consenti la porta UDP 1751 nel firewall eseguendo il comando seguente

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

Verifica il bilanciamento del carico UDP con NGINX configurato in precedenza

Accedi al POD e avvia un servizio fittizio in ascolto sulla porta UDP 10001,

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

Lasciare così com'è, accedere alla macchina da cui si desidera testare il bilanciamento del carico UDP, assicurarsi che il server NGINX sia raggiungibile da quella macchina, eseguire il comando seguente per connettersi alla porta udp (1751) sull'IP del server NGINX e quindi provare a digita la stringa

# nc -u 192.168.1.50 1751

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

Ora vai alla sessione ssh del POD, lì dovremmo vedere lo stesso messaggio,

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

Perfetto sopra l'output conferma che il bilanciamento del carico UDP funziona bene con NGINX. Questo è tutto da questo articolo, spero che tu lo trovi informativo e ti aiuti a configurare il bilanciamento del carico NGINX. Non esitare a condividere il tuo feedback tecnico nella sezione commenti qui sotto.


Linux
  1. Come configuro Vim come editor predefinito su Linux

  2. Come configurare la virtualizzazione su Redhat Linux

  3. Come configurare il servizio di bilanciamento del carico HAProxy

  4. Come installare e configurare il sistema di bilanciamento del carico HAProxy su Rocky Linux/Alma Linux 8

  5. Come installare e configurare Nginx dal sorgente su Linux

Come configurare iptables Firewall in Linux

Come configurare una VLAN in Linux

Come configurare HAProxy come Load Balancer per Nginx in CentOS 7

Come configurare NGINX su un server CentOS 7

Come installare e configurare il server Web Nginx su Oracle Linux 8

Come configurare il bilanciamento del carico con NGINX su Jelastic Cloud