How GitHub uses eBPF to improve deployment safety | TechDistill
> Source: GitHub_Blog
Execute Primary Source
// Problem
GitHubのデプロイにはGitHub自体が必要という循環依存が存在する。MySQL等の障害時に、デプロイスクリプトがGitHubへのアクセス(バイナリ取得やアップデート確認)を試みると、復旧作業が不能になる。しかし、ホスト全体の通信を制限することは、本番稼働中のサービスへの影響が大きすぎるため困難であった。
// Approach
eBPFを用いて、デプロイプロセスを隔離したcgroupに対してのみネットワーク制限を適用する。CGROUP_SKBでパケットを監視し、CGROUP_SOCK_ADDRでDNSクエリをユーザー空間のプロキシへ転送。プロキシがドメインベースで通信を判定し、eBPF Mapを通じて通信の許可・拒否を制御する仕組みを構築した。
// Result
6ヶ月のロールアウトを経て実戦投入。循環依存の検知だけでなく、どのプロセスがどのドメインにアクセスしようとしたかの詳細なログ取得や、cgroupによるリソース制限も実現。インシデント発生時のMTTR(平均復旧時間)の短縮と、デプロイの安全性向上に大きく寄与している。
Senior Engineer Insight
> 極めて洗練されたアプローチだ。単なる「通信遮断」ではなく、cgroupによるプロセス隔離とDNSインターセプトを組み合わせることで、本番トラフィックへの影響をゼロにしつつ、デプロイの安全性のみをピンポイントで強化している。eBPFの導入は学習・保守コストが高いが、GitHubのような規模では、手動レビューの限界をシステム的に解決する価値が十分にある。ただし、DNSプロキシが単一障害点(SPOF)にならないよう、プロキシ自体の高可用性設計が不可欠である。また、この手法はデプロイだけでなく、セキュリティ境界の構築にも応用可能な強力なパターンだ。