DUICUO

オープンソースの Cillium プロジェクトは、コンテナに強力なネットワーク機能を提供します。

[51CTO.com クイック翻訳]実験的なオープンソースの Cillium プロジェクトは、Linux カーネルの既存の機能を使用して、コンテナーに高速で強力なネットワーク機能を提供します。

[[187654]]

コンテナを使用する上で、ネットワークは依然として最も厄介な問題の一つです。Googleのオープンソースコンテナクラスタ管理システムであるKubernetesでさえ、コンテナオーケストレーションの主要技術として急速に台頭しているにもかかわらず、ネットワーク機能の実装には限界があります。そのため、ネットワークセキュリティといった既に厄介な問題への対処がさらに困難になっています。

現在、Cilium と呼ばれるオープンソース プロジェクトが、Linux カーネルで使用されるテクノロジに基づいて、コンテナに新しいネットワーク アプローチを提供しようとしています。このプロジェクトは Google が部分的にスポンサーとなっていて、コンテナに優れたネットワーク セキュリティとよりシンプルなネットワーク モデルを提供することを目指しています。

BPFを使用したネットワーク

Linuxのネットワークセキュリティメカニズム(iptablesなど)は通常、ネットワーク層、パケット層、アドレス層、つまりOSI参照モデルの第3層にのみ適用されます。これらのメカニズムは、HTTPなどのプロトコルとは通信できません。

Cilium は、Linux の Berkeley Data Protection Filtering (BPF) テクノロジーを使用して、ネットワーク レベルと HTTP レベルの両方で Docker コンテナーまたは Kubernetes ポッドのネットワーク セキュリティ ポリシーを適用します。

BPFはLinux 2.5で導入され、その後カーネルの安定した機能となりました。BPFのおかげで、ネットワークフィルタリング機構、パフォーマンス分析、トレース機能を提供する小規模なプログラムをカーネル内でコンパイルして実行できるようになりました。

Cilium GitHubリポジトリのドキュメントによると、Ciliumはコンテナで直接実行できるカーネルレベルのBPFプログラムを生成することで動作します。Ciliumは各コンテナにIPv6アドレス(または追加のIPv4アドレス)を割り当てることができ、コンテナ間の分離を強制するためにネットワークルーティングルールではなくコンテナラベルを使用します。コンテナ間にオーバーレイネットワークを作成する必要はありません。また、Ciliumポリシーの作成と適用を処理するオーケストレーションシステムとの統合も含まれています。

Ciliumは主に速度と利便性のためにBPFを使用しています。BPFプログラムはネイティブマシンコードにコンパイルされるため、他のカーネルコードと同等の速度で動作します。Ciliumが使用するBPFプログラムを変更する場合、再起動はもちろん、コンテナの再起動も必要ありません。Ciliumの開発者は、BPFプログラムは各コンテナ向けに最適化されているため、「コンテナに不要な機能はコンパイルする必要が全くない」と主張しています。

現在は実験段階ですが、最終的には欠かせないものとなるでしょう。

Cilium の潜在的な問題点の一つは、非常に新しい Linux カーネル(4.8.0 以降、推奨は 4.9.17)と LLVM 3.7.1 以降)を必要とすることです。ただし、Cilium の機能セットは特定の Linux バージョンに限定されるものではありません。例えば、「Linux カーネルでは提供されない追加の統計情報」や「追加の転送ロジック」などが追加されます。

Ciliumはコンテナ内のネットワーク処理のための実験的なソリューションですが、Dockerの開発段階においても、他の多くのアプローチに比べてまだかなりの改善の余地があります。Dockerの初期のネットワーク処理アプローチは煩雑で管理が困難だったため、同社はSocketPlaneを買収し、同社のOpenDaylight風のネットワークファブリックをDocker 1.9に追加しました。このソリューションはDockerにデフォルトで付属していますが、理論的にはDocker APIと互換性のある他のネットワーク製品に置き換えることも可能です。

Ciliumの優位性は、既存のLinuxカーネル技術を活用し、コンテナと同じ原理で構築されている点にあります。Dockerスタイルのコンテナは、本質的にLinuxカーネルに長年存在してきた機能を再パッケージ化したものです。同様に、Ciliumは長年利用されてきた既存の技術と互換性があり、明確に定義された幅広いユースケースを備え、コンテナ自体と同様にカーネル内のコンテナ層に非常に近い位置にあります。

原題: Linuxカーネルが高度なコンテナネットワークの鍵を握る、著者: Serdar Yegulalp

[この記事は51CTOによって翻訳されました。提携サイトへの転載の際は、元の翻訳者と出典を51CTO.comとして明記してください。]