最近のクラウドコンピューティングの動向を追いかけている方なら、「eBPF」という言葉を頻繁に目にしているはずです。むしろ目にしないほうが難しいほどです。その理由を探っていきましょう。
パフォーマンスを犠牲にせず、最新のセキュリティ・可観測性・モニタリングを実現したい――そんなソリューションをお探しなら、答えはeBPFかもしれません。本記事では、このLinuxカーネル機能がなぜクラウドネイティブスタックを代表するバズワードになったのかを掘り下げます。さらに、eBPFを基盤とした注目のクラウドソリューションを取り上げ、それがクラウドシステムのセキュリティ・可観測性・モニタリングをどのように強化するのかを見ていきます。それでは、その「バズ」の中身に迫ってみましょう。

すでにeBPFをご存じで、Cilium/Dataplane V2について読みたい方は、 後編 へどうぞ。
eBPFはLinuxカーネルの領域に属する技術で、私たちの多くが普段足を踏み入れることのない世界です。では、「クラウドの上」で仕事をしている人が、なぜこのような低レイヤーのLinuxカーネル機能に関心を持つべきなのでしょうか?それは、eBPFがある種の革命であり、低レイヤーから高レイヤーまで幅広い領域に大きなインパクトを与えているからです。
たとえば、コンテナ間を行き交うすべてのネットワークパケットを詳細に検査し、特定の条件を満たすHTTPパケットだけを通過させるカスタムロジックを書きたい、というケースを考えてみましょう。
ネットワークトラフィックを統合・注入・制限したいなら、カーネル空間で作業すべきだというのは周知の事実です。Linuxカーネルこそが、Linux OSの内部動作と、パフォーマンス・セキュリティ・信頼性のために構築された巨大なネットワーキング層を操作できる場所なのです。
eBPFが登場するまで、これを実現するにはLinuxカーネルのコード(C言語)を書く必要がありました。具体的には、カーネルのソースコードを直接書き換えるか、ローダブルカーネルモジュールを書くかのいずれかです。元々の複雑さに加え、カーネルモジュールはカーネルにアタッチされる動的ライブラリ(.DLLや.soファイルのようなもの)であるため、多くのリスクを伴いました。
コードにクラッシュを引き起こすバグがあれば、カーネルパニックに直結し、OS全体が停止しかねません。クラウドユーザー、特にKubernetesでマイクロサービスをデプロイしているエンジニアにとって、独自のカーネルコードを書くべきでない理由は他にも数多くあります。セキュリティ、開発スピード、複雑さ、そもそも環境的に現実的でない、などです。要するに、明らかにやり過ぎなのです。
そこに登場したeBPF 🐝
eBPFが登場したことで、カーネルコードに手を加えることなく、つまりユーザー空間からカーネルにロジックを注入できるようになりました。eBPFはこのプロセスを簡素化するだけでなく、安全性も格段に高めてくれます。eBPFの検証プロセスは、各種の安全性チェックを強制することで、カーネルにロードするeBPFコードが安全に実行可能であることを保証します。具体的には、以下のような点が確実にチェックされます。
- コードが有限ステップで終了すること(無限ループがないこと)
- コードがクラッシュしたり、システムに害を及ぼす致命的なバグを引き起こさないこと
- eBPFコードをロードするプロセスに必要な権限があること
- コードのサイズが上限内に収まっていること
- 到達不能なコードが含まれていないこと
検証プロセスに加えて、コードには一定の制約も課されます。たとえば、特定のカーネルリソースには専用のeBPFヘルパー関数を介してのみアクセスできるよう強制されます。要するに、eBPFは安全性、開発のしやすさ、スムーズなデプロイ、そして高いパフォーマンスを同時にもたらしてくれるのです。今や数多くのツールやエンジンがeBPF技術を活用し、クラウドネイティブなworkloadsに新機能を、透過的かつ高性能に提供しています。
eBPFを実際に試してみたい方は、 こちらの動画 をご覧ください。
eBPFを活用した注目プロジェクト 🔋
- Cilium — Kubernetes向けのeBPFベースのネットワーキング・セキュリティ・可観測性
- Falco — クラウドネイティブなランタイムセキュリティ
- Tracee — eBPFを活用したランタイムセキュリティとフォレンジック
- Pixie — Kubernetes向けアプリケーショントラブルシューティングプラットフォーム(要チェック!)
本記事が参考になれば幸いです。eBPFを活用したその他のプロジェクトは、こちらの一覧をご覧ください。後編では、K8s向けeBPFソリューションとして注目を集めるCiliumを取り上げ、Dataplane V2との関係を解き明かしていきます。
お読みいただきありがとうございました。最新情報は DoiT Engineering Blog 、 DoiT LinkedInチャンネル 、 DoiT Twitterチャンネル でご確認ください。採用情報は https://careers.doit-intl.com をご覧ください。