あけましておめでとうございます。サイバーエージェントの青山真也(@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のサイト より)
他にも、eBPFはカーネルに任意の機能を組み込むための機能としても使えるため、オブザーバビリティやセキュリティの向上を実現する手段としても注目されています。たとえばPixieではeBPFを活用 して、カーネル空間とユーザー空間の双方のデータを取得し、サービスとアプリケーション間のオブザーバビリティを実現しています。FalcoではeBPFを活用 して、ポリシーに違反しているカーネル空間のイベントをフックしてアラートを通知します。
また、eBPFプログラムをKubernetesノードに組み込む形をとることで、そのノード上のすべてのコンテナに対して様々な制御を行えるほか、アプリケーションやマニフェストの変更・Sidecarの利用をせずに様々なことが実現できるようになります。
WebAssembly(Wasm)
WebAssemby(Wasm)はもともとブラウザ上で動作することを目的に作られたバイナリフォーマットです。様々な言語で関数を実装し、Wasmバイナリにビルドしたあとは、それをブラウザ上で読み込んで実行できるようになっています。
図2 WebAssembyをブラウザで実行する概要
この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インターフェースの関係
Istio でもEnvoyFilter CustomResourceでProxy-Wasmのサポートがされており、Service Meshとして展開されているEnvoyに対して任意のWasmモジュールをロードさせて、動的に機能を拡張できます。KubeCon NA 2021の基調講演で、この機能を利用してトラフィックの情報を外部に集約し、OpenAPI specとの差分比較を行うAPIClarity の紹介がされていたのも印象的でした。
図4 APIClarityのアーキテクチャ(APIClarityのサイト より)
他にも、Open Policy AgentでもWasmのサポート が行われています。ポリシーをRegoで評価するだけではなく、Wasmで実装した関数を使って評価することもできます。
このように、様々なミドルウェアを動的に拡張する手段としてのWasm利用がより進歩しており、2022年はより具体的な事例やエコシステムが登場してくることを期待しています。
CNCFのSandboxプロジェクトにも採択されたWasmランタイム
Wasmを実行するランタイム環境は、wasmCloud、Wasmtime、Lucet、Wasmerなど様々な実装があります。そのうちの1つであるwasmCloudが、CNCFのSandboxプロジェクトとして採択されました。
wasmCloudはただのWasmランタイムではなく、地理的に分散した環境でのコンピューティングを可能にするために、NATSとActorモデルを利用したLattice と呼ばれるネットワーク機能も持っています。また、HTTPサーバとしての公開・HTTPリクエスト・KVSとの連携といった、ビジネスロジック以外の非機能要件をCapability Providerとして抽象化して利用する機能も持っています。これにより、Providerの裏側にある実装がRedisなのかmemcachedなのかといった違いを意識することなく、ビジネスロジックの実装だけに注力できるのも特徴の一つです。wasmCloudは現状では成熟度はまだまだですが、CNCFプロジェクトとして採択されたランタイムの一つとして2022年も注目度は高そうです。
図5 wasmCloudが目指す世界観(wasmColudのTwitterの投稿 より)
図6 wasmCloudがターゲットにしている実行環境(CNCFのYoTube より)
図7 wasmCloudが提供するCapability Providerと実装するビジネスロジックの分離
複数Kubernetesクラスタの管理・連携
ここ数年、複数のKubernetesクラスタをどう管理していくかについて試行錯誤がなされています。Multi-cluster Service Mesh(istio) ・Federation v2・Admiralty・virtual-kubelet・submarinerなど、様々な手法も登場しています。
2021年に特に印象的だったのは、GCPがKubernetesのクラスタDNSとしてCloud DNSが利用 できるようになった点です。これにより、複数のGKEクラスタ横断での名前解決や、VMをあわせたServiceの名前解決(たとえばsample.default.svc.cluster.local)が可能になり、より柔軟なアーキテクチャを実現する土壌が整いました。今後はAnthosなども含め、複数拠点で連携した構成も実現しやすくなるのではないでしょうか。
また、筆者としては今年はIstioによるMulti-cluster Service Meshの実例なども出てくるのではないかと期待しています。
図8 Cloud DNSを利用した利用した複数クラスタ間でのサービスディスカバリ(Google Cloudのサイト より)
そしてOpen Cluster Management プロジェクトも開始され、複数クラスタ・複数クラウドでの管理に焦点を当てた標準化や開発も始まりました。まだ日が浅いプロジェクトですが、既にArgo CD ApplicationSet やPersistentVolumeのDisaster Recovery対応を実現するRamenプロジェクト などによって利用され始めています。2022年はOCMの発展も見ていきたいと思います。
CNCF Technical Advisory Groups(TAGs)によるWhitepaper
CNCFには、Security・Storage・App-Delivery・Network・Runtime・Observabilityといった領域ごとに、Technical Advisory Group(TAG)が作られており、各領域のCNCFプロジェクト全体での整合性の維持や品質の向上のための活動が行われています。昨年は各TAGsから様々なWhitepaperなどが公開・更新され、用語や定義の明確化やプロジェクトの比較などが整備されました。
まとめ
新春のお話として、eBPFとWasmによる機能拡張や利用事例の動向、マルチクラスタ・マルチクラウド環境への適用・高度な様々なトピックに対応するWhitepaperを紹介しました。
最後に少し国内での動向もご紹介したいと思います。今年実施したCloudNative Days Tokyo 2021では、「 みんなの銀行 」や「三菱UFJインフォメーションテクノロジー 」によるKubernetesやCloudNativeな技術スタックの利用事例が基調講演で取り上げることができたほど、一定の裾野の広がりを見せました。
2022年はさらに一歩進んだ活用事例、高度な問題解決などもあり、楽しい一年になりそうです。本年も皆様よろしくお願いいたします。