Overzicht #
nftlb staat voor nftables-loadbalancer. Het maakt gebruik van nftables, de volgende generatie Linux-firewall die iptables moet vervangen en is aangepast om te functioneren als een volledig uitgeruste load balancer en verkeersverdeler.
nftlb fungeert als een nftables-regelsbeheerder, ontworpen om virtuele services te creëren voor load balancing op lagen 2, 3 en 4. Het minimaliseert het aantal benodigde regels door efficiënte datastructuren te gebruiken om pakketten te matchen. Bovendien bevat het een gebruiksvriendelijke JSON API, wat naadloze programmatische interactie en automatisering mogelijk maakt. Deze flexibiliteit maakt het eenvoudig om nftlb te integreren met uw favoriete health checker-tools.
De kernfilosofie van nftlb is om het datapad binnen de Linux-kernel te houden, de prestaties te maximaliseren en tegelijkertijd het controlevlak en de gezondheidscontroles in de gebruikersruimte te behouden. Deze scheiding zorgt voor eenvoudige aanpassing, verbeterde compatibiliteit met de Linux-stack en de mogelijkheid om gedrag dynamisch aan te passen.
At RELIANOID, hebben we uitgebreide ervaring met het gebruik van iptables en het Netfilter-framework om feature-rijke load balancers te bouwen. Door deze ervaring begrijpen we de beperkingen van deze benaderingen—beperkingen die nftlb door ontwerp overwint.
Waarom is nftlb nodig zijn? #
De Linux-kernel bevat een interne load balancer genaamd IPVS (ook wel bekend als LVS – Linux Virtual Server). Hoewel IPVS een stabiele en beproefde softwareoplossing is die al jaren wordt gebruikt, kent het bepaalde beperkingen:
- Taken die beter geschikt zijn voor de gebruikersruimte, worden in de kernel afgehandeld, waardoor de flexibiliteit wordt beperkt.
- Het dupliceert de infrastructuur die Netfilter al biedt.
- Het is afhankelijk van aanvullende hulpmiddelen, zoals iptables, voor geavanceerde functies zoals transparante proxying en ondersteuning voor meerdere poorten of meerdere protocollen.
- Het ondersteunt SNAT (Source NAT) en DSR (Direct Server Return) topologieën, maar mist DNAT (Destination NAT).
De op iptables gebaseerde aanpak kent daarentegen zijn eigen beperkingen:
- Voor elke virtuele service zijn meerdere regels nodig, met minimaal twee regels per backend. De complexiteit neemt hierdoor lineair toe naarmate er meer backends worden toegevoegd.
- Sequentiële regelverwerking verslechtert de prestaties wanneer er veel regels bij betrokken zijn, wat nog wordt verergerd door het klassieke iptables-vergrendelingsprobleem.
- Voor IPv6-ondersteuning is een aparte opdracht nodig, ip6tables, waardoor de configuratie lastig is.
- Hoewel iptables DNAT- en SNAT-load balancing ondersteunt, kan het niet in DSR-topologieën werken.
nftlb, gebouwd op nftablespakt al deze beperkingen aan met een efficiëntere en modernere aanpak:
Ondersteunt alle topologieën (SNAT, DNAT, DSR) en maakt naadloze omschakeling tussen deze topologieën mogelijk.
Kan multipoort- en multiprotocolverkeer op een natuurlijke manier verwerken.
Beheert naadloos IPv4- en IPv6-verkeer via één interface.
Biedt alle vereiste load-balancing-mogelijkheden via één uniforme interface.
Maakt gebruik van de expressieve taal van nftables om een complete load balancer te bouwen met slechts twee regels, waardoor een constante complexiteit wordt gegarandeerd, ongeacht het aantal backends.
Overeenkomsten worden per virtuele service geïndexeerd, waardoor sequentiële regelverwerking niet meer nodig is.
Maakt gebruik van het RCU-subsysteem (Read-Copy-Update) en voorkomt vergrendelingsproblemen tijdens regelupdates.
Houdt het gegevenspad in de kernelruimte voor optimale prestaties, terwijl de flexibiliteit van de gebruikersruimte voor het besturingsvlak behouden blijft.
Bewezen 10x snellere prestaties dan LVS.
nftlb functionaliteiten #
De nftlb load balancer biedt momenteel de volgende mogelijkheden:
Ondersteunde topologieën :
- Bestemmings-NAT (DNAT), bron-NAT (SNAT), directe serverretour (DSR) en stateless DNAT.
- Dankzij deze topologieën kan nftlb functioneren in zowel eenarmige als tweearmige netwerkarchitecturen.
IPv4- en IPv6-ondersteuning: Volledig compatibel met beide IP-families voor moderne netwerkomgevingen.
Meerlaagse lastverdeling:
- Laag 2: DSR-gebaseerde load balancing.
- Laag 3: Protocol-agnostische, IP-gebaseerde load balancing.
- Laag 4: Ondersteuning voor UDP-, TCP- en SCTP-protocollen.
Ondersteuning voor meerdere poorten: Verwerkt poortbereiken en lijsten voor flexibel verkeersbeheer.
Meerdere virtuele diensten (farms): Ondersteunt het gelijktijdig beheren van meerdere virtuele services.
Planners: Omvat op gewicht gebaseerde planning, round robin, configureerbare hash (op basis van IP, poort, MAC of combinaties) en symmetrische hash.
Configureerbare persistentie (affiniteit): Biedt client-backend-affiniteit met een time-out op basis van IP, poort, MAC of combinaties hiervan.
Beveiligingsbeleid:
- Servicespecifieke witte en zwarte lijsten voor ingangsfiltering.
- Filteren van gebruikersruimte, wachtrijen en detectie van valse TCP-frames.
- Limieten voor het maximale aantal tot stand gebrachte verbindingen, TCP RST-pakketten per seconde en nieuwe verbindingen per seconde.
Backend Prioriteit Ondersteuning: Hiermee kunnen prioriteiten aan backends worden toegewezen voor een optimale verdeling van het verkeer.
Levend beheer: Programmatisch beheer van virtuele services en backends via een JSON API.
Beveiliging van webservices: Authenticatie via een beveiligde sleutel om API-toegang te beveiligen.
Geautomatiseerde testomgeving: Bevat een ingebouwde testbed voor gestroomlijnd testen en valideren.
Officiële Git-repository: https://github.com/relianoid/nftlb
Wijzigingslogboek: https://www.relianoid.com/knowledge-base/nftlb/nftlb-changelog/