新春特別企画

2022年に注目したいCloudNative関連技術

この記事を読むのに必要な時間:およそ 3 分

あけましておめでとうございます。サイバーエージェントの青山真也@amsy810です。今年の新春企画では,2022年にも動向を見ていきたいと思っている,2021年のCloudNative関連のトピックを紹介します。項目としてはeBPF,WebAssembly(Wasm⁠⁠,複数Kubernetesクラスタの管理・連携,CNCF Technical Advisory Groups(TAGs)によるWhitepaperを取り上げていきます。

eBPF

eBPFは,カーネルのソースコードの変更なしに任意のプログラムをカーネルに組み込み,カーネル空間で任意の処理を実行するための仕組みです。CNCFのプロジェクトでは,Cilium・Calico・Falco・Pixieなどで利用されています。

CloudNative領域でのeBPFは,ネットワーク関連での利用が一番活発です。eBPFを利用したCNI(Container Networking Interface)としては,Ciliumが有名です。Ciliumは2021年にCNCFのIncubatingプロジェクトにも採択されました。Ciliumでは,kube-proxyで行われていたバランシングの処理もeBPFがサポートしており,kube-proxyが不要になります。さらに従来iptablesで行っていた処理に比べてパフォーマンス効率も向上します。

CNIとして現在最も利用されているCalicoでも,eBPFがサポートされました。Calico eBPF modeでもCiliumと同様の機能を持っています。GKEのDataplane V2でもCiliumが利用されていたり,EKSでもCalico eBPF modeが利用できるようになってきており,今後はeBPFを利用したCNIが一般的になるでしょう。

さらに昨年末,CiliumではeBPFを利用することでSidecarコンテナ(Envoy)なしでService Meshを構築する機能をベータリリースしました。一部の機能はEnvoyが必要なため,従来Pod単位だったEnvoyがNode単位にデプロイする形で残っていますが,リソース効率やパフォーマンスの向上が見込まれています。eBPFはService Meshの新たな形を実現する手段としても注目されています。

図1 Sidecar利用型のService MeshとeBPF利用型のService Meshの比較Ciliumのサイトより)

図1

他にも,eBPFはカーネルに任意の機能を組み込むための機能としても使えるため,オブザーバビリティやセキュリティの向上を実現する手段としても注目されています。たとえばPixieではeBPFを活用して,カーネル空間とユーザー空間の双方のデータを取得し,サービスとアプリケーション間のオブザーバビリティを実現しています。FalcoではeBPFを活用して,ポリシーに違反しているカーネル空間のイベントをフックしてアラートを通知します。

また,eBPFプログラムをKubernetesノードに組み込む形をとることで,そのノード上のすべてのコンテナに対して様々な制御を行えるほか,アプリケーションやマニフェストの変更・Sidecarの利用をせずに様々なことが実現できるようになります。

WebAssembly(Wasm)

WebAssemby(Wasm)はもともとブラウザ上で動作することを目的に作られたバイナリフォーマットです。様々な言語で関数を実装し,Wasmバイナリにビルドしたあとは,それをブラウザ上で読み込んで実行できるようになっています。

図2 WebAssembyをブラウザで実行する概要

図2

このWasm関連で注目しているのは,⁠Wasmを利用した機能拡張」「CNCFのSandboxプロジェクトにも採択されたWasmランタイム」の2つです。

Wasmを利用した機能拡張

Wasmを用いることで,様々な言語を用いて実装し,ミドルウェアを動的に拡張できます。

このWasmにはシステムと連携するためのインターフェースであるWASI(WebAssembly System Interface)が定義されています。これらのインターフェースを利用することで,WasmでもPOSIXシステムコール相当の関数を利用できるようになり,一般的なサーバーサイドアプリケーションが実行できるようになることも行えるようになります。

WASIと似た形で,EnvoyやNginxといったプロキシと連携するためのインターフェースであるProxy-Wasmの定義も進められています。Proxy-Wasmを利用することで,Wasmからプロキシの機能を利用するような命令を送ったり,特定のイベント発生時にWasmの関数を呼び出したりすることが可能になります。

図3 WebAssemblyからシステムやプロキシと連携するWASIとProxy-Wasmインターフェースの関係

図3

IstioでもEnvoyFilter CustomResourceでProxy-Wasmのサポートがされており,Service Meshとして展開されているEnvoyに対して任意のWasmモジュールをロードさせて,動的に機能を拡張できます。KubeCon NA 2021の基調講演で,この機能を利用してトラフィックの情報を外部に集約し,OpenAPI specとの差分比較を行うAPIClarityの紹介がされていたのも印象的でした。

図4 APIClarityのアーキテクチャAPIClarityのサイトより)

図4

他にも,Open Policy AgentでもWasmのサポートが行われています。ポリシーをRegoで評価するだけではなく,Wasmで実装した関数を使って評価することもできます。

このように,様々なミドルウェアを動的に拡張する手段としてのWasm利用がより進歩しており,2022年はより具体的な事例やエコシステムが登場してくることを期待しています。

著者プロフィール

青山真也(あおやままさや)

株式会社サイバーエージェント CyberAgent group Infrastructure Unit ソフトウェアエンジニア/Developer Experts(Kubernetes/CloudNative領域)

2016年CyberAgent入社。プライベートクラウド上のKubernetes as a Serviceのプロダクトオーナー,Kubernetes/CloudNative領域のDeveloper Expertsとしても従事。国内カンファレンスでのKeynoteや海外カンファレンス等での登壇経験。著書に『Kubernetes完全ガイド』『みんなのDocker/Kubernetes』。現在はOSSへのContribute活動をはじめ,CloudNative Days Tokyo のCo-chair,CNCF公認のCloud Native Meetup TokyoやKubernetes Meetup TokyoのOrganizerなどコミュニティ活動にも従事。