GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So konfigurieren Sie NGINX als TCP/UDP-Load-Balancer unter Linux

Wie wir wissen, ist NGINX einer der am besten bewerteten Open-Source-Webserver, kann aber auch als TCP- und UDP-Load-Balancer verwendet werden. Einer der Hauptvorteile der Verwendung von nginx als Load Balancer gegenüber HAProxy besteht darin, dass es auch UDP-basierten Datenverkehr ausgleichen kann. In diesem Artikel zeigen wir, wie NGINX als Load Balancer für die im Kubernetes-Cluster bereitgestellten Anwendungen konfiguriert werden kann.

Ich gehe davon aus, dass der Kubernetes-Cluster bereits eingerichtet ist und ausgeführt wird. Wir werden eine VM basierend auf CentOS / RHEL für NGINX erstellen.

Im Folgenden finden Sie die Details zur Lab-Einrichtung:

  • 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

Lassen Sie uns in die Installation und Konfiguration von NGINX einsteigen, in meinem Fall verwende ich minimal CentOS 8 für NGINX.

Schritt 1) ​​Aktivieren Sie das EPEL-Repository für das Nginx-Paket

Melden Sie sich bei Ihrem CentOS 8-System an und aktivieren Sie das epel-Repository, da das nginx-Paket nicht in den Standard-Repositorys von CentOS / RHEL verfügbar ist.

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

Schritt 2) Installieren Sie NGINX mit dem Befehl dnf

Führen Sie den folgenden dnf-Befehl aus, um nginx zu installieren,

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

Überprüfen Sie die NGINX-Details, indem Sie den Befehl rpm ausführen,

# rpm -qi nginx

Lassen Sie NGINX-Ports in der Firewall zu, indem Sie unter den Befehlen ausführen

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

Versetzen Sie SELinux mit den folgenden Befehlen in den zulässigen Modus,

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

Schritt 3) Extrahieren Sie NodePort-Details für den Ingress-Controller aus dem Kubernetes-Setup

In Kubernetes wird der nginx Ingress Controller verwendet, um den eingehenden Datenverkehr für die definierten Ressourcen zu verarbeiten. Wenn wir den Eingangscontroller bereitstellen, wird zu diesem Zeitpunkt auch ein Dienst erstellt, der die Ports der Hostknoten auf Port 80 und 443 abbildet. Diese Ports der Hostknoten werden von jedem Worker-Knoten geöffnet. Um dieses Detail zu erhalten, melden Sie sich beim Kube-Master-Knoten oder Kontrollplan an und führen Sie es aus,

$ kubectl get all -n ingress-nginx

Wie wir der obigen Ausgabe entnehmen können, wird NodePort 32760 jedes Worker-Knotens Port 80 zugeordnet und NodePort 32375 wird Port 443 zugeordnet. Wir werden diese Knotenports in der Nginx-Konfigurationsdatei für den Lastenausgleich des TCP-Verkehrs verwenden.

Schritt 4) Konfigurieren Sie NGINX so, dass es als TCP-Load-Balancer fungiert

Bearbeiten Sie die nginx-Konfigurationsdatei und fügen Sie ihr den folgenden Inhalt hinzu,

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

Kommentieren Sie die Zeilen der Serverabschnitte (von 38 bis 57 beginnend) aus und fügen Sie die folgenden Zeilen hinzu,

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

Speichern und beenden Sie die Datei.

Gemäß den obigen Änderungen wird jede Anfrage, die an Port 80 auf der nginx-Server-IP eingeht, an die IPs der Kubernetes-Arbeitsknoten (192.168.1.41/42) auf NodePort (32760) weitergeleitet.

Lassen Sie uns den NGINX-Dienst mit den folgenden Befehlen starten und aktivieren,

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

Testen Sie NGINX für den TCP-Load-Balancer

Um zu testen, ob nginx als TCP-Load-Balancer für Kubernetes gut funktioniert oder nicht, stellen Sie eine nginx-basierte Bereitstellung bereit, stellen Sie die Bereitstellung über den Dienst bereit und definieren Sie eine Ingress-Ressource für die nginx-Bereitstellung. Ich habe die folgenden Befehle und die Yaml-Datei verwendet, um diese Kubernetes-Objekte bereitzustellen,

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

Führen Sie die folgenden Befehle aus, um Bereitstellungs-, Service- und Ingress-Details abzurufen:

Perfekt, lassen Sie die Hostdatei Ihres Systems aktualisieren, sodass nginx-lb.example.com auf die IP-Adresse des nginx-Servers (192.168.1.50) zeigt

192.168.1.50      nginx-lb.example.com

Versuchen wir, die URL zu pingen, um zu bestätigen, dass sie auf die NGINX-Server-IP verweist,

# 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

Versuchen Sie nun, über den Webbrowser auf die URL zuzugreifen,

Großartig, oben wird bestätigt, dass NGINX als TCP-Load-Balancer gut funktioniert, da es TCP-Verkehr, der auf Port 80 zwischen K8s-Worker-Knoten kommt, lastausgleicht.

Schritt 5) Konfigurieren Sie NGINX so, dass es als UDP-Load-Balancer fungiert

Angenommen, wir haben eine UDP-basierte Anwendung, die in Kubernetes ausgeführt wird, die Anwendung wird mit dem UDP-Port 31923 als NodePort-Typ verfügbar gemacht. Wir werden NGINX konfigurieren, um den UDP-Verkehr, der auf Port 1751 kommt, auf NodePort von k8s-Worker-Knoten auszugleichen.

Nehmen wir an, wir haben bereits einen Pod namens „linux-udp-port“, in dem der Befehl nc verfügbar ist, stellen Sie ihn über den Dienst auf UDP-Port 10001 als NodePort-Typ bereit.

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

Um NGINX als UDP-Load-Balancer zu konfigurieren, bearbeiten Sie seine Konfigurationsdatei und fügen Sie den folgenden Inhalt am Ende der Datei hinzu

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

Speichern und beenden Sie die Datei und starten Sie den Nginx-Dienst mit dem folgenden Befehl neu:

[[email protected] ~]# systemctl restart nginx

Lassen Sie den UDP-Port 1751 in der Firewall zu, indem Sie den folgenden Befehl ausführen

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

Testen Sie den UDP-Load-Balancing mit dem oben konfigurierten NGINX

Melden Sie sich beim POD an und starten Sie einen Dummy-Dienst, der auf UDP-Port 10001 lauscht,

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

Lassen Sie dies unverändert, melden Sie sich bei dem Computer an, von dem aus Sie den UDP-Lastenausgleich testen möchten, stellen Sie sicher, dass der NGINX-Server von diesem Computer aus erreichbar ist, führen Sie den folgenden Befehl aus, um eine Verbindung zum UDP-Port (1751) auf der NGINX-Server-IP herzustellen, und versuchen Sie es dann Geben Sie die Zeichenfolge ein

# nc -u 192.168.1.50 1751

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

Gehen Sie jetzt zur SSH-Sitzung von POD, dort sollten wir dieselbe Nachricht sehen,

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

Die perfekte obige Ausgabe bestätigt, dass der UDP-Load-Balancing mit NGINX gut funktioniert. Das ist alles aus diesem Artikel. Ich hoffe, Sie finden dies informativ und helfen Ihnen beim Einrichten des NGINX Load Balancer. Bitte zögern Sie nicht, Ihr technisches Feedback im Kommentarbereich unten zu teilen.


Linux
  1. Wie ich Vim als meinen Standardeditor unter Linux konfiguriere

  2. So konfigurieren Sie die Virtualisierung unter Redhat Linux

  3. So konfigurieren Sie den HAProxy-Load-Balancer

  4. So installieren und konfigurieren Sie den HAProxy-Load-Balancer unter Rocky Linux/Alma Linux 8

  5. So installieren und konfigurieren Sie Nginx von der Quelle unter Linux

So konfigurieren Sie die iptables-Firewall unter Linux

So konfigurieren Sie ein VLAN unter Linux

So richten Sie HAProxy als Load Balancer für Nginx in CentOS 7 ein

So konfigurieren Sie NGINX auf einem CentOS 7-Server

So installieren und konfigurieren Sie den Nginx-Webserver unter Oracle Linux 8

So konfigurieren Sie Load Balancing mit NGINX in Jelastic Cloud