GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer NGINX en tant qu'équilibreur de charge TCP/UDP sous Linux

Comme nous le savons, NGINX est l'un des serveurs Web open source les mieux notés, mais il peut également être utilisé comme équilibreur de charge TCP et UDP. L'un des principaux avantages de l'utilisation de nginx comme équilibreur de charge par rapport à HAProxy est qu'il peut également équilibrer la charge du trafic basé sur UDP. Dans cet article, nous montrerons comment NGINX peut être configuré en tant qu'équilibreur de charge pour les applications déployées dans le cluster Kubernetes.

Je suppose que le cluster Kubernetes est déjà configuré et qu'il est opérationnel, nous allons créer une machine virtuelle basée sur CentOS/RHEL pour NGINX.

Voici les détails de la configuration de l'atelier :

  • VM NGINX (minimal CentOS/RHEL) – 192.168.1.50
  • Maître Kube – 192.168.1.40
  • Travailleur Kube 1 – 192.168.1.41
  • Travailleur Kube 2 – 192.168.1.42

Passons à l'installation et à la configuration de NGINX, dans mon cas, j'utilise un minimum de CentOS 8 pour NGINX.

Étape 1) Activer le référentiel EPEL pour le package nginx

Connectez-vous à votre système CentOS 8 et activez le référentiel epel car le package nginx n'est pas disponible dans les référentiels par défaut de CentOS / RHEL.

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

Étape 2) Installez NGINX avec la commande dnf

Exécutez la commande dnf suivante pour installer nginx,

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

Vérifiez les détails NGINX en exécutant sous la commande rpm,

# rpm -qi nginx

Autoriser les ports NGINX dans le pare-feu en exécutant les commandes ci-dessous

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

Réglez le SELinux en mode permissif à l'aide des commandes suivantes,

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

Étape 3) Extraire les détails NodePort pour le contrôleur d'entrée à partir de la configuration de Kubernetes

Dans Kubernetes, le contrôleur d'entrée nginx est utilisé pour gérer le trafic entrant pour les ressources définies. Lorsque nous déployons le contrôleur d'entrée, un service est également créé à ce moment-là, qui mappe les ports du nœud hôte sur les ports 80 et 443. Ces ports de nœud hôte sont ouverts à partir de chaque nœud de travail. Pour obtenir ce détail, connectez-vous au nœud maître kube ou au plan de contrôle et exécutez,

$ kubectl get all -n ingress-nginx

Comme nous pouvons le voir dans la sortie ci-dessus, le NodePort 32760 de chaque nœud de travail est mappé au port 80 et le NodePort 32375 est mappé au port 443. Nous utiliserons ces ports de nœud dans le fichier de configuration Nginx pour équilibrer la charge du trafic TCP.

Étape 4) Configurer NGINX pour qu'il agisse en tant qu'équilibreur de charge TCP

Modifiez le fichier de configuration nginx et ajoutez-y le contenu suivant,

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

Commente les lignes des sections du serveur (à partir de 38 à 57) et ajoute les lignes suivantes,

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

Enregistrez et quittez le fichier.

Conformément aux modifications ci-dessus, lorsqu'une demande arrive sur le port 80 sur l'adresse IP du serveur nginx, elle est acheminée vers les adresses IP des nœuds de travail Kubernetes (192.168.1.41/42) sur NodePort (32760).

Démarrons et activons le service NGINX à l'aide des commandes suivantes,

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

Tester NGINX pour l'équilibreur de charge TCP

Pour tester si nginx fonctionne correctement ou non en tant qu'équilibreur de charge TCP pour Kubernetes, déployez un déploiement basé sur nginx, exposez le déploiement via le service et définissez une ressource d'entrée pour le déploiement de nginx. J'ai utilisé les commandes suivantes et le fichier yaml pour déployer ces objets 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] ~]$

Exécutez les commandes suivantes pour obtenir les détails du déploiement, du svc et de l'entrée :

Parfait, laissez mettre à jour le fichier hôte de votre système afin que nginx-lb.example.com pointe vers l'adresse IP du serveur nginx (192.168.1.50)

192.168.1.50      nginx-lb.example.com

Essayons d'envoyer un ping à l'URL pour confirmer qu'elle pointe vers l'IP du serveur 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

Essayez maintenant d'accéder à l'URL via un navigateur Web,

Génial, ci-dessus confirme que NGINX fonctionne correctement en tant qu'équilibreur de charge TCP, car il équilibre la charge du trafic TCP entrant sur le port 80 entre les nœuds de travail K8.

Étape 5) Configurez NGINX pour qu'il agisse en tant qu'équilibreur de charge UDP

Supposons que nous ayons une application basée sur UDP exécutée à l'intérieur de Kubernetes, l'application est exposée avec le port UDP 31923 en tant que type NodePort. Nous allons configurer NGINX pour équilibrer la charge du trafic UDP entrant sur le port 1751 vers NodePort des nœuds de travail k8s.

Supposons que nous ayons déjà exécuté un pod nommé "linux-udp-port" dans lequel la commande nc est disponible, exposez-le via le service sur le port UDP 10001 en tant que type 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] ~]$

Pour configurer NGINX en tant qu'équilibreur de charge UDP, modifiez son fichier de configuration et ajoutez le contenu suivant à la fin du fichier

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

Enregistrez et quittez le fichier et redémarrez le service nginx à l'aide de la commande suivante,

[[email protected] ~]# systemctl restart nginx

Autorisez le port UDP 1751 dans le pare-feu en exécutant la commande suivante

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

Tester l'équilibrage de charge UDP avec NGINX configuré ci-dessus

Connectez-vous au POD et démarrez un service factice qui écoute sur le port UDP 10001,

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

Laissez cela tel quel, connectez-vous à la machine à partir de laquelle vous souhaitez tester l'équilibrage de charge UDP, assurez-vous que le serveur NGINX est accessible à partir de cette machine, exécutez la commande suivante pour vous connecter au port udp (1751) sur l'IP du serveur NGINX, puis essayez de tapez la chaîne

# nc -u 192.168.1.50 1751

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

Allez maintenant à la session ssh de POD, nous devrions y voir le même message,

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

La sortie parfaite ci-dessus confirme que l'équilibrage de charge UDP fonctionne correctement avec NGINX. C'est tout de cet article, j'espère que vous trouverez cela informatif et vous aidera à configurer l'équilibreur de charge NGINX. N'hésitez pas à partager vos commentaires techniques dans la section des commentaires ci-dessous.


Linux
  1. Comment configurer Vim comme éditeur par défaut sous Linux

  2. Comment configurer la virtualisation sur Redhat Linux

  3. Comment configurer l'équilibreur de charge HAProxy

  4. Comment installer et configurer l'équilibreur de charge HAProxy sur Rocky Linux/Alma Linux 8

  5. Comment installer et configurer Nginx à partir de la source sous Linux

Comment configurer le pare-feu iptables sous Linux

Comment configurer un VLAN sous Linux

Comment configurer HAProxy comme équilibreur de charge pour Nginx dans CentOS 7

Comment configurer NGINX sur un serveur CentOS 7

Comment installer et configurer le serveur Web Nginx sur Oracle Linux 8

Comment configurer l'équilibrage de charge avec NGINX sur Jelastic Cloud