IstioアンビエントモードにおけるeBPFを用いたトラフィックリダイレクト
アプリケーションポッドのトラフィックをノードごとのztunnelにリダイレクトするための代替アプローチ。
Istioの新しいアンビエントモードでは、各Kubernetesワーカーノードで実行されている`istio-cni`コンポーネントが、そのノード上のゼロトラストトンネル(ztunnel)にアプリケーショントラフィックをリダイレクトする役割を担っています。デフォルトでは、iptablesとGeneric Network Virtualization Encapsulation (Geneve)オーバーレイトンネルを使用して、このリダイレクションを実現しています。今回、eBPFベースのトラフィックリダイレクション方法のサポートを追加しました。
eBPFを選択する理由
Istioアンビエントモードのリダイレクションの実装においてパフォーマンスの考慮事項は不可欠ですが、多様なカスタマイズされた要件の実装を可能にするために、プログラミングの容易さも考慮することが重要です。eBPFを使用すると、カーネル内の追加コンテキストを活用して複雑なルーティングをバイパスし、パケットを最終目的地に簡単に送信できます。
さらに、eBPFはカーネル内のパケットに対するより深い可視性と追加のコンテキストを提供し、iptablesと比較して、より効率的で柔軟なデータフロー管理を可能にします。
動作方法
トラフィック制御の入口と出口フックにアタッチされたeBPFプログラムが、Istio CNIコンポーネントにコンパイルされています。`istio-cni`はポッドイベントを監視し、ポッドがアンビエントモードに出入りするときに、関連する他のネットワークインターフェースにeBPFプログラムをアタッチ/デタッチします。
eBPFプログラム(iptablesの代わりに)を使用することで、(Geneveのための)タスクのカプセル化が不要になり、ルーティングタスクをカーネル空間でカスタマイズできるようになります。これにより、ルーティングのパフォーマンスと柔軟性の両方が向上します。
アプリケーションポッドとの間のすべてのトラフィックはeBPFによってインターセプトされ、対応するztunnelポッドにリダイレクトされます。ztunnel側では、eBPFプログラム内の接続ルックアップ結果に基づいて、適切なリダイレクションが実行されます。これにより、アプリケーションとztunnel間のネットワークトラフィックをより効率的に制御できます。
IstioアンビエントモードでeBPFリダイレクションを有効にする方法
アンビエントメッシュの開始方法の手順に従ってクラスタをセットアップしてください。ただし、Istioをインストールする際に、`values.cni.ambient.redirectMode`設定パラメータを`ebpf`に設定するという小さな変更を加えます。
$ istioctl install --set profile=ambient --set values.cni.ambient.redirectMode="ebpf"
`istio-cni`ログを確認して、eBPFリダイレクションが有効になっていることを確認してください。
ambient Writing ambient config: {"ztunnelReady":true,"redirectMode":"eBPF"}
パフォーマンス向上
eBPFリダイレクションのレイテンシとスループット(QPS)は、iptablesを使用する場合よりもわずかに優れています。以下のテストは、FortioクライアントがFortioサーバーにリクエストを送信する`kind`クラスタで実行されました。両方ともアンビエントモード(eBPFデバッグログは無効)で、同じKubernetesワーカーノード上で実行されています。
$ fortio load -uniform -t 60s -qps 0 -c <num_connections> http://<fortio-svc-name>:8080
$ fortio load -uniform -t 60s -qps 8000 -c <num_connections> http://<fortio-svc-name>:8080
まとめ
トラフィックリダイレクションに関しては、eBPFとiptablesの両方にそれぞれ長所と短所があります。eBPFは、現代的で柔軟性があり、強力な代替手段であり、ルール作成のカスタマイズ性を向上させ、パフォーマンスも向上させます。ただし、一部のシステムでは利用できない可能性のある、最新のカーネルバージョン(リダイレクションの場合、4.20以降)が必要です。一方、iptablesは広く使用されており、古いカーネルを搭載したシステムを含むほとんどのLinuxディストリビューションと互換性があります。ただし、eBPFの柔軟性と拡張性に欠け、パフォーマンスが低い可能性があります。
最終的に、トラフィックリダイレクションにeBPFとiptablesのどちらを選択するかは、システムの具体的なニーズと要件、および各ツールの使用に関するユーザーの専門知識レベルによって異なります。一部のユーザーはiptablesのシンプルさと互換性を好む一方で、他のユーザーはeBPFの柔軟性とパフォーマンスを必要とする場合があります。
さまざまなCNIプラグインとの統合など、まだ多くの作業が残っています。使いやすさを向上させるための貢献は大歓迎です。Istio Slackの#ambientにご参加ください。