Overzicht #
nftlb is gebaseerd op de Linux-netwerkstack netfilter/nftables. Deze nieuwe stack biedt nieuwe concepten en mogelijkheden die we nodig hebben om te integreren in het huidige load balancing-ontwerp.
Dit artikel is bedoeld om een algemeen begrip te geven van hoe het gegevenspad en het besturingspad van de nftables-loadbalancer zijn ontworpen.
Gegevenspad-hooks #
Dit zijn de Netfilter-hooks die nftlb gebruikt, waarbij gebruik wordt gemaakt van de configureerbare ketens. Nieuwe concepten zoals het offloaden van verbindingstracking moeten worden opgenomen om de totstandkoming van doorgestuurde verbindingen naar de backends te versnellen.
------------ | DNSBL | ------------ | wachtrij-ingang | prerouting forward postrouting ------------ ------------- ------------- ------------ ------- -------------- ------- | filter | filter | filter | | filter | nat | | filter | | nat | | 0 | 50-99 | 100 | | -150 | 0 | | 0 | | 100 | --> | | | SEC.-beleid |-( Conntrack )-> | SEC.-limieten | |-( Routing )-> | | --> | | | Clustering | Stroomtabellen | DSR | VS{} | Helpers | dNAT | VS{} | Stroom-offload | | sNAT | | | | stless dNAT | | Merken | | -------------- ------- ------------ ------------- ------------- ------------ -------
toegang #
(0) filter: Gereserveerd voor clusterbeheer. Nog niet opgenomen in nftlb.
(50-99) filter: Gereserveerd voor versnelling van stroomtabellen. Nog niet opgenomen in nftlb.
(100) filterGereserveerd, in volgorde, voor: Beveiligingsbeleid (zwarte lijsten en witte lijsten), Direct Server Return en Stateless dNAT-topologieën.
voorroutering #
(-150) filter: Gereserveerd voor beveiligingslimieten per virtuele service of per backend, zoals: maximaal aantal tot stand gebrachte verbindingen, limiet van TCP RST per seconde, limiet van TCP SYN per seconde, verwijderen van niet-strikt TCP-verbindingen, wachtrij voor DNSBL-service, markeringen voor virtuele service en backends, gebruik van helpers, registratie van invoerverbindingen per virtuele service.
(0) nat: Gereserveerd voor bestemmings-NAT-mangling.
vooruit #
(0) filter : Gereserveerd voor stroomafvoer. Nog niet opgenomen in nftlb.
naroutering #
(100) nat : Gereserveerd voor bestemming NAT mangling.
Controlepad #
Het nftlb-besturingspad is ontworpen als een daemon die een eenvoudige http-server voorziet van een API of een zelfstandig binair bestand dat een configuratiebestand in JSON-formaat accepteert.
------------- vertaling ------------- -------- JSON API | | objs naar nft | | netlink | | ------------> | http-server | -------------> | libnftables | --------> | kernel | | | | | | | ------------- | ----------- -------- | netlink | ---------------------------------------