概要
nftlb の略 nftablesロードバランサーiptablesに代わる次世代のLinuxファイアウォールは、完全なロードバランサおよびトラフィックディストリビュータとして振る舞うようになっています。
nftlb は、レイヤー2、レイヤー3、レイヤー4で負荷分散するための仮想サービスを作成するnftablesルールマネージャーであり、ルールの数を最小限に抑え、構造を使用してパケットを効率的に照合します。 また、プログラムでnftlbと対話し、自動化に対応する柔軟性を備えた、簡単なJSONAPIサービスも提供されます。 したがって、好みのヘルスチェッカーを使用して、nftlbと非常に簡単に統合できます。
の哲学 nftlb 最大限のパフォーマンスを達成するためにカーネルへのデータパスを維持することですが、コントロールプレーンとヒースはユーザー空間をチェックして、動作を簡単に変更できる柔軟性を持つだけでなく、残りのLinuxスタックとも互換性があります。 。
Zevenetでは、フル機能のロードバランサーを作成するために、iptablesとnetfilterインフラストラクチャを何年も使用してきました。そのため、このようなアプローチの限界をよく知っています。 nftlb.
なぜnftlbが必要なのですか?
LinuxカーネルはすでにIPVSと呼ばれる内部ロードバランサ、またはLVS(Linux Virtual Server)と呼ばれるものを数えています。これは完全なソフトウェアで、非常に安定しており、何年にもわたって使用されています。 しかし、そのようなロードバランサにはいくつかの制限があります:カーネル側はユーザスペースによって実行されるべきタスクのために使われ、特定の機能のために現在netfilterが提供するインフラストラクチャを複製します。より複雑(透過プロキシ、マルチポート、マルチプロトコルなど)。 SNATおよびDSRトポロジを提供しますが、DNATは提供しません。
iptablesアプローチでの主な制限は、仮想サービスによって作成されるルールの数とバックエンドの数(いくつかのマッチを含むバックエンドあたり最低〜2のルール)と追加されたバックエンドの数に従って増加する線形の複雑さです。 。 含まれるルールが多すぎると、ルールを順次処理することでパフォーマンスが低下します。これは、従来のiptablesのロックの問題によりさらに悪化します。 IPv6の負荷分散を提供するためには、異なるコマンドip6tablesを使用するという不便があります。 さらに、このアプローチでは、DNAT(透過性のための宛先NAT)およびSNAT(発信元NAT)のロードバランシングを提供できますが、DSR(Direct Server Return)トポロジでは機能できません。
nftlb レビューに基づき nftables 私たちはこれらの問題をすべて保存します
それはこれらのすべてのトポロジを構築し、あるトポロジから別のトポロジに非常に簡単に変更できます。
マルチポートとマルチプロトコルをネイティブに処理できます。
それはシームレスにIPv64とIPv66トラフィックを管理することができます。
負荷分散に必要なすべての機能を提供するために、XNUMXつのインターフェイスのみが使用されます。
nftablesはより表現力のある言語を提供するので、2ルールを使用して一定の複雑さを持つ完全なロードバランサーを構築することができます。
一致は仮想サービスごとにインデックス付けされるため、すべてを順番に処理する必要はありません。
これはRCUサブシステムで提供されるため、ルールを更新するときにロックの問題はありません。
データパスはカーネル空間に残りますが、コントロールプレーンのユーザー空間に柔軟性を提供します。
それは証明されています LVSよりも速く10xを実行できます.
nftlbの機能
現在、 nftlb 以下の機能を提供します。
サポートされるトポロジ:宛先NAT、送信元NAT、ダイレクトサーバリターン、およびステートレスDNAT。 これにより、片腕および双腕ネットワークアーキテクチャでロードバランサを使用できます。
IPv64ファミリとIPv66ファミリの両方をサポートします。
マルチレイヤロードバランサ:レイヤ2のDSR、レイヤ3ではプロトコルにとらわれないIPベースのロードバランシング、レイヤ4ではUDP、TCP、およびSCTPのロードバランシングのサポート。
ポートの範囲とリストに対するマルチポートのサポート。
複数の仮想サービス(またはファーム)のサポート
利用可能なスケジューラ:ウェイト、ラウンドロビン、設定可能なハッシュ(IP、ポート、MAC、またはそれらの組み合わせごと)、および対称ハッシュ
設定可能な持続性またはタイムアウト付きのクライアント - バックエンドアフィニティ(IP、ポート、MACまたはそれらの組み合わせごと)のサポート。
サービスごとのセキュリティポリシーのサポート:(入力からの)ホワイトリストとブラックリスト、ユーザスペースフィルタへのキューイング、偽のTCPフレームのフィルタリング、確立された接続の最大数、1秒あたりのTCP RSTの制限、1秒あたりの新しい接続の制限など。
バックエンドごとの優先サポート。
JSON APIを介したプログラムによる仮想サービスおよびバックエンドのライブ管理。
セキュリティキーを使用したWebサービス認証
自動テストベッドが含まれています。
公式Gitリポジトリ https://github.com/zevenet/nftlb
変更履歴: https://www.zevenet.com/knowledge-base/nftlb/nftlb-changelog/