Wat is nftlb?

GEPOST DOOR Zevenet | 2 februari 2018

Overzicht

nftlb staat voor nftables load balancer, de volgende generatie linux-firewall die iptables zal vervangen, is aangepast om zich te gedragen als een complete load-balancer en verkeersverdeler.

nftlb is een nftables-regelsbeheerder om virtuele services te creëren voor taakverdeling op laag 2, laag 3 en laag 4, waarbij het aantal regels wordt geminimaliseerd en structuren worden gebruikt om de pakketten efficiënt op elkaar af te stemmen. Het is ook voorzien van een eenvoudige JSON API-service om de flexibiliteit te hebben om programmatisch met nftlb te communiceren en om te voldoen aan automatisering. U kunt dus uw favoriete health checker gebruiken om heel gemakkelijk met nftlb te worden geïntegreerd.

De filosofie van nftlb is om het datapad in de kernel te houden, om de best mogelijke prestaties te bereiken, maar het controlevlak en de heath controleren in gebruikersruimte om de flexibiliteit te hebben om het gedrag gemakkelijk te veranderen, maar ook om compatibel te zijn met de rest van de linux-stack .

Bij Zevenet gebruiken we iptables en de netfilter-infrastructuur al jaren om een ​​complete load-balancer te maken, daarom kennen we heel goed de beperkingen van een dergelijke aanpak waarmee we besparen nftlb.

Waarom is nftlb nodig?

De linux kernel telt al van een interne loadbalancer genaamd IPVS, of ook bekend als LVS (Linux Virtual Server), wat een volledig stuk software is en zeer stabiel dat al jaren wordt gebruikt. Maar zo'n load-balancer heeft enkele beperkingen: de kernel-kant wordt gebruikt voor taken die moeten worden uitgevoerd door de gebruikersruimte, voor bepaalde mogelijkheden dupliceert het de infrastructuur die momenteel netfilter biedt, en het vertrouwt op iptables en andere stukjes software als iets nodig is complexer (zoals transparante proxy, multipoort of multiprotocol). Het biedt SNAT- en DSR-topologieën, maar niet DNAT.

Met de iptables-benadering zijn de belangrijkste beperkingen het aantal regels dat moet worden gemaakt door de virtuele service en het aantal backends (minimaal ~ 2-regels per backend met verschillende matches erin) en een toenemende lineaire complexiteit afhankelijk van het aantal toegevoegde backends . Het sequentieel verwerken van regels vertraagt ​​ook de prestaties als er te veel regels zijn opgenomen, en dit is nog erger vanwege het klassieke probleem met de vergrendeling van iptables. Om IPv6 load balancing te bieden heeft dit het nadeel van het gebruik van een ander commando, ip6tables. Bovendien biedt deze methode de mogelijkheid om DNAT (Destination NAT for transparency) en SNAT (Source NAT) load balancing te bieden, maar niet in DSR-topologieën (Direct Server Return).

met nftlb gebaseerd op nftables we besparen al deze problemen:
Het kan al deze topologieën bouwen en gemakkelijk van de ene naar de andere veranderen.
Het kan zowel multipoort als multiprotocol verwerken.
Het kan IPv4- en IPv6-verkeer naadloos beheren.
Het heeft slechts één interface gebruikt om alle vereiste mogelijkheden voor taakverdeling te bieden.
nftables biedt een meer expressieve taal, zodat we 2-regels kunnen gebruiken om een ​​complete load balancer met een constante complexiteit te bouwen!
De overeenkomsten worden geïndexeerd per virtuele service, dus we hoeven ze niet allemaal opeenvolgend te verwerken.
Het is voorzien van het RCU-subsysteem, dus er is geen vergrendelingsprobleem bij het bijwerken van regels.
Het gegevenspad blijft in de kernelruimte maar biedt de flexibiliteit in de gebruikersruimte voor het besturingsvlak.
Het is bewezen dat het kan 10x sneller uitvoeren dan LVS.

nftlb-functies

Momenteel nftlb biedt de volgende mogelijkheden:
Ondersteunde topologieën: Destination NAT, Source NAT, Direct Server Return en Stateless DNAT. Dit maakt het gebruik van de load balancer in eenarmige en tweearmige netwerkarchitecturen mogelijk.
Ondersteuning voor zowel IPv4- als IPv6-families.
Multilayer load balancer: DSR in layer 2, IP-gebaseerde load balancing met protocol agnost op laag 3 en ondersteuning voor taakverdeling van UDP, TCP en SCTP op laag 4.
Multiport-ondersteuning voor bereiken en lijsten met poorten.
Ondersteuning voor meerdere virtuele services (of boerderijen).
Beschikbare schema's: gewicht, round robin, configureerbare hash (per IP, poort, MAC of combinatie hiervan) en symmetrische hash.
Ondersteuning van configureerbare persistentie of client-backend-affiniteit met een time-out (per IP, poort, MAC of combinatie hiervan).
Ondersteuning van beveiligingsbeleid per service: witte en zwarte lijsten (van binnenkomst), wachtrijen naar gebruikersruimtefilter, filteren van nep-TCP-frames, maximaal aantal tot stand gebrachte verbindingen, limiet TCP RST per seconde, beperking van nieuwe verbindingen per seconde en meer.
Prioritaire ondersteuning per backend.
Live management van virtuele services en backends programmatisch via een JSON API.
Webservice-authenticatie met een beveiligingssleutel.
Geautomatiseerd testbed inbegrepen.

Officiële git repository: https://github.com/zevenet/nftlb

changelog: https://www.zevenet.com/knowledge-base/nftlb/nftlb-changelog/

Delen op:

Documentatie onder de voorwaarden van de GNU-licentie voor vrije documentatie.

Was dit artikel behulpzaam?

Gerelateerde artikelen