GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar NGINX como equilibrador de carga TCP/UDP en Linux

Como sabemos, NGINX es uno de los servidores web de código abierto mejor calificados, pero también se puede usar como equilibrador de carga TCP y UDP. Uno de los principales beneficios de usar nginx como equilibrador de carga sobre HAProxy es que también puede equilibrar la carga del tráfico basado en UDP. En este artículo, demostraremos cómo se puede configurar NGINX como equilibrador de carga para las aplicaciones implementadas en el clúster de Kubernetes.

Supongo que el clúster de Kubernetes ya está configurado y funcionando, crearemos una máquina virtual basada en CentOS/RHEL para NGINX.

Los siguientes son los detalles de configuración del laboratorio:

  • VM NGINX (CentOS mínimo/RHEL):192.168.1.50
  • Maestro Kube:192.168.1.40
  • Trabajador de Kube 1:192.168.1.41
  • Trabajador de Kube 2:192.168.1.42

Pasemos a la instalación y configuración de NGINX, en mi caso estoy usando CentOS 8 mínimo para NGINX.

Paso 1) Habilitar el repositorio EPEL para el paquete nginx

Inicie sesión en su sistema CentOS 8 y habilite el repositorio epel porque el paquete nginx no está disponible en los repositorios predeterminados de CentOS/RHEL.

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

Paso 2) Instalar NGINX con el comando dnf

Ejecute el siguiente comando dnf para instalar nginx,

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

Verifique los detalles de NGINX ejecutando debajo del comando rpm,

# rpm -qi nginx

Permita los puertos NGINX en el firewall ejecutando debajo de los comandos

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

Configure SELinux en modo permisivo usando los siguientes comandos,

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

Paso 3) Extraiga los detalles de NodePort para el controlador de entrada de la configuración de Kubernetes

En Kubernetes, el controlador de ingreso nginx se usa para manejar el tráfico entrante para los recursos definidos. Cuando implementamos el controlador de ingreso, en ese momento también se crea un servicio que asigna los puertos del nodo host al puerto 80 y 443. Estos puertos del nodo host se abren desde cada nodo trabajador. Para obtener este detalle, inicie sesión en el nodo maestro de kube o en el plan de control y ejecute,

$ kubectl get all -n ingress-nginx

Como podemos ver en el resultado anterior, NodePort 32760 de cada nodo trabajador se asigna al puerto 80 y NodePort 32375 se asigna al puerto 443. Usaremos estos puertos de nodo en el archivo de configuración de Nginx para equilibrar la carga del tráfico tcp.

Paso 4) Configurar NGINX para que actúe como balanceador de carga TCP

Edite el archivo de configuración de nginx y agréguele los siguientes contenidos,

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

Comente las líneas de las secciones del servidor (a partir de la 38 a la 57) y agregue las siguientes líneas,

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

Guarde y salga del archivo.

Según los cambios anteriores, cuando cualquier solicitud llegue al puerto 80 en la IP del servidor nginx, se enrutará a las IP de los nodos de trabajo de Kubernetes (192.168.1.41/42) en NodePort (32760).

Comencemos y habilitemos el servicio NGINX usando los siguientes comandos,

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

Prueba NGINX para el balanceador de carga TCP

Para probar si nginx funciona bien o no como equilibrador de carga TCP para Kubernetes, implemente la implementación basada en nginx, exponga la implementación a través del servicio y defina un recurso de ingreso para la implementación de nginx. He usado los siguientes comandos y el archivo yaml para implementar estos objetos de 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] ~]$

Ejecute los siguientes comandos para obtener detalles de implementación, svc e ingreso:

Perfecto, actualicemos el archivo host de su sistema para que nginx-lb.example.com apunte a la dirección IP del servidor nginx (192.168.1.50)

192.168.1.50      nginx-lb.example.com

Intentemos hacer ping a la URL para confirmar que apunta a la IP del servidor 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

Ahora intente acceder a la URL a través del navegador web,

Genial, lo anterior confirma que NGINX está funcionando bien como balanceador de carga TCP porque está balanceando la carga del tráfico tcp que llega al puerto 80 entre los nodos trabajadores de K8.

Paso 5) Configurar NGINX para que actúe como equilibrador de carga UDP

Supongamos que tenemos una aplicación basada en UDP ejecutándose dentro de Kubernetes, la aplicación está expuesta con el puerto UDP 31923 como tipo NodePort. Configuraremos NGINX para equilibrar la carga del tráfico UDP que llega del puerto 1751 al NodePort de los nodos de trabajo k8s.

Supongamos que ya ejecutamos un pod llamado "linux-udp-port" en el que está disponible el comando nc, expóngalo a través del servicio en el puerto UDP 10001 como 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] ~]$

Para configurar NGINX como balanceador de carga UDP, edite su archivo de configuración y agregue los siguientes contenidos al final del archivo

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

Guarde y salga del archivo y reinicie el servicio nginx usando el siguiente comando,

[[email protected] ~]# systemctl restart nginx

Permita el puerto UDP 1751 en el firewall ejecutando el siguiente comando

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

Pruebe el equilibrio de carga UDP con NGINX configurado anteriormente

Inicie sesión en el POD e inicie un servicio ficticio que escucha en el puerto UDP 10001,

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

Deje esto como está, inicie sesión en la máquina desde donde desea probar el equilibrio de carga UDP, asegúrese de que el servidor NGINX sea accesible desde esa máquina, ejecute el siguiente comando para conectarse al puerto udp (1751) en la IP del servidor NGINX y luego intente escriba la cadena

# nc -u 192.168.1.50 1751

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

Ahora ve a la sesión ssh de POD, allí deberíamos ver el mismo mensaje,

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

La salida perfecta anterior confirma que el equilibrio de carga UDP funciona bien con NGINX. Eso es todo de este artículo, espero que lo encuentre informativo y lo ayude a configurar el balanceador de carga NGINX. No dude en compartir sus comentarios técnicos en la sección de comentarios a continuación.


Linux
  1. Cómo configuro Vim como mi editor predeterminado en Linux

  2. Cómo configurar la virtualización en Redhat Linux

  3. Cómo configurar el balanceador de carga HAProxy

  4. Cómo instalar y configurar el balanceador de carga HAProxy en Rocky Linux/Alma Linux 8

  5. Cómo instalar y configurar Nginx desde el origen en Linux

Cómo configurar el cortafuegos de iptables en Linux

Cómo configurar una VLAN en Linux

Cómo configurar HAProxy como Load Balancer para Nginx en CentOS 7

Cómo configurar NGINX en un servidor CentOS 7

Cómo instalar y configurar el servidor web Nginx en Oracle Linux 8

Cómo configurar Load Balancing con NGINX en Jelastic Cloud