Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

eBPF・Cilium・Dataplane V2を徹底解説(前編)

By Yarel MamanOct 3, 20214 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

最近のクラウドコンピューティングの動向を追いかけている方なら、「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 をご覧ください。