Resumen
nftlb representa balanceador de carga nftables, el firewall de Linux de próxima generación que reemplazará a iptables está adaptado para comportarse como un completo equilibrador de carga y distribuidor de tráfico.
nftlb es un administrador de reglas de nftables para crear servicios virtuales para el balanceo de carga en la capa 2, capa 3 y capa 4, minimizando el número de reglas y usando estructuras para hacer coincidir eficientemente los paquetes. También se proporciona un servicio de API JSON sencillo para tener la flexibilidad de interactuar con nftlb mediante programación y cumplir con la automatización. Por lo tanto, puede usar su verificador de salud preferido para integrarse con nftlb muy fácilmente.
La filosofia de nftlb es mantener la ruta de datos en el kernel, para lograr el mayor rendimiento posible, pero el plano de control y el heath ingresan en el espacio del usuario para tener la flexibilidad de cambiar el comportamiento fácilmente pero también para ser compatibles con el resto de la pila de Linux .
En Zevenet, hemos estado utilizando iptables y la infraestructura de netfilter durante años para crear un equilibrador de carga con todas las funciones, por lo que conocemos muy bien las limitaciones de dicho enfoque con el que estamos ahorrando. nftlb.
¿Por qué se necesita nftlb?
El kernel de Linux ya cuenta con un equilibrador de carga interno llamado IPVS, o también conocido como LVS (Servidor Virtual de Linux), que es un software completo y muy estable que se ha utilizado durante años. Pero dicho equilibrador de carga tiene algunas limitaciones: el lado del kernel se usa para tareas que debe realizar el espacio de usuario, para ciertas capacidades duplica la infraestructura que actualmente proporciona netfilter, y se basa en iptables y otras piezas de software si se requiere algo. Más complejo (como proxy transparente, multipuerto o multiprotocolo). Proporciona topologías SNAT y DSR, pero no DNAT.
Con el enfoque de iptables, las principales limitaciones son la cantidad de reglas que se crearán por el servicio virtual y la cantidad de backends (un mínimo de ~ reglas 2 por backend con varias coincidencias incluidas) y una complejidad lineal creciente según la cantidad de backends agregadas. . El procesamiento secuencial de reglas también ralentiza el rendimiento si se incluyen demasiadas reglas, y esto es aún peor debido al clásico problema de bloqueo de iptables. Para proporcionar el equilibrio de carga de IPv6 tiene el inconveniente de usar un comando diferente, ip6tables. Además, este enfoque es capaz de proporcionar el equilibrio de carga DNAT (NAT de destino para transparencia) y SNAT (NAT de origen) pero no puede funcionar en las topologías DSR (retorno directo del servidor).
Con nftlb basados en mesas de juego Guardamos todos estos problemas:
Puede construir todas estas topologías y cambiar de una a otra muy fácilmente.
Puede manejar multiport y multiprotocolo de forma nativa.
Puede administrar el tráfico de IPv4 e IPv6 a la perfección.
Se utiliza una sola interfaz para proporcionar todas las capacidades necesarias para el equilibrio de carga.
nftables proporciona un lenguaje más expresivo para que podamos usar las reglas de 2 para crear un equilibrador de carga completo con complejidad constante.
Las coincidencias se indexan por servicio virtual, por lo que no es necesario procesarlas todas secuencialmente.
Se proporciona del subsistema RCU para que no haya problemas de bloqueo al actualizar las reglas.
La ruta de datos permanece en el espacio del kernel pero proporciona la flexibilidad en el espacio del usuario para el plano de control.
Se ha demostrado que puede realizar 10x más rápido que LVS.
características nftlb
Actualmente, nftlb proporciona las siguientes capacidades:
Topologías compatibles: NAT de destino, NAT de origen, Retorno directo del servidor y DNAT sin estado. Esto permite el uso del equilibrador de carga en arquitecturas de red de uno y dos brazos.
Soporte para las familias IPv4 e IPv6.
Equilibrador de carga multicapa: DSR en la capa 2, equilibrio de carga basado en IP con protocolo independiente en la capa 3 y soporte del equilibrio de carga de UDP, TCP y SCTP en la capa 4.
Soporte multipuerto para rangos y listas de puertos.
Soporte para múltiples servicios virtuales (o granjas).
Programadores disponibles: peso, round robin, hash configurable (por IP, puerto, MAC o combinación de ellos) y hash simétrico.
Soporte de persistencia configurable o afinidad de backend de cliente con un tiempo de espera (por IP, puerto, MAC o combinación de ellos).
Soporte de políticas de seguridad por servicio: listas blancas y negras (desde el ingreso), puesta en cola al filtro de espacio de usuario, filtrado de tramas TCP falsas, número máximo de conexiones establecidas, límite de RST de TCP por segundo, límite de nuevas conexiones por segundo y más.
Soporte prioritario por backend.
Administración en vivo de servicios virtuales y backends mediante programación a través de una API JSON.
Autenticación del servicio web con una clave de seguridad.
Testbed automatizado incluido.
Repositorio oficial de git: https://github.com/zevenet/nftlb
Cambios: https://www.zevenet.com/knowledge-base/nftlb/nftlb-changelog/