はじめに
v0.6.0 で検証済み。コマンドは root 権限のある Linux ホストと、eBPF/XDP をサポートする比較的新しいカーネルを想定する。ビルドには Rust 1.85.0 以降 (edition 2024) が必要だ。
前提
- Linux ホスト (eBPF と XDP は Linux カーネル機能。bpfman は macOS や Windows では動かない)。
- Rust ツールチェーン 1.85.0 以降 (rustup から)。
sudoまたは root (eBPF プログラムのロードはカーネルに触れる)。- アタッチ先のネットワークインターフェース名 (例:
eth0)。ip linkで確認できる。
インストール
リポジトリをクローンし、workspace をビルドし、同梱スクリプトでバイナリと systemd ユニットをインストールする。
git clone https://github.com/bpfman/bpfman.git
cd bpfman
cargo build
sudo ./scripts/setup.sh installcargo build は bpfman CLI と bpfman-rpc サーバをコンパイルする。setup.sh install はバイナリを /usr/sbin/ にコピーし、systemd サービスファイルをインストールする (実行すると全ステップを表示する)。
最初の動く構成
事前ビルド済みの xdp_pass プログラムを OCI (Open Container Initiative) イメージからロードし、インターフェースにアタッチし、最後に削除する。v0.6.0 では load と attach は別ステップだ。load がプログラム id を返し、その id を attach に渡す。
bytecode イメージをロードする。これはプログラムをカーネルに置くだけで、まだアタッチしない。
bashsudo bpfman load image --image-url quay.io/bpfman-bytecode/xdp_pass:latest \ --programs xdp:pass --application XdpPassProgram前のコマンドが表示したプログラム id を控え、インターフェースにアタッチする。
<PROGRAM_ID>をその id に、eth0を自分のインターフェースに置き換える。bashsudo bpfman attach <PROGRAM_ID> xdp --iface eth0 --priority 35終わったらアンロードする。これでデタッチされ、カーネルから取り除かれる。
bashsudo bpfman unload <PROGRAM_ID>
動作確認
bpfman が管理しているプログラムを一覧し、設定したアプリケーション名で自分のものが出るか確認する。
sudo bpfman list programs --application XdpPassProgramロードしたプログラムが id・型 (xdp)・名前とともに 1 行表示されるはずだ。unload 後は同じコマンドで一覧に出なくなる。
次に読むもの
gRPC サーバ、Kubernetes operator と CRD (Custom Resource Definition)、socket activation による権限分離、独自 bytecode イメージのビルドについては、公式ドキュメント bpfman.io と起動ガイド Launching bpfman を参照。