仮想化

LXCとは?

別名: Linux Containers
定義

LXC is Linux-native containerisation that isolates processes with namespaces and cgroups while sharing the host kernel. LXC is excellent inside a trust boundary you already own and weak as a multi-tenant boundary, because a kernel escape affects every container on the host.

LXCが重要な理由

LXCは、既に所有している信頼境界内では優れており、マルチテナント境界としては脆弱です。なぜなら、カーネルエスケープはホスト上のすべてのコンテナに影響するからです。

実践でのLXC

LXCでは、ホストカーネルを共有する軽量コンテナを利用できます。lxcコマンド群またはAPIで管理し、CPUとメモリのプレッシャーをcgroup統計で監視します。チューニングは主にネームスペースとcgroupの制限、つまりプロセスのピン留めやメモリ上限の設定です。失敗した場合のコストは露呈です。カーネルエスケープが発生するとホスト上のすべてのコンテナが危険にさらされるため、ホストを単一の信頼ドメインとして扱い、フェイルオーバーはコンテナ単位ではなくホスト単位で計画する必要があります。

LXCについて人々が誤解していること

LXCをKVMと同等のセキュリティ境界として扱う人がいます。それは誤りです。コンテナはカーネルを共有するため、そのカーネルの欠陥があれば、任意のコンテナから脱出できる可能性があります。正しくは、LXCは所有する信頼境界内での分離に使うものであり、テナントが敵対的になり得るマルチテナントホスティング用の境界ではありません。

LXC — よくある質問

LXCはDockerと同じですか?

いいえ。DockerはLXCのようなコンテナの基本要素を基に構築されていますが、イメージ管理、レイヤリング、オーケストレーションを追加しています。LXCはより軽量なVMに似ており、その中で完全なディストリビューションを実行し、systemdやinitで直接管理します。Dockerはアプリのパッケージングを目的とし、LXCはシステムの仮想化を目的としています。

LXCでカスタムカーネルを実行できますか?

ホストによります。OnionVPSのような一部のプロバイダーは完全なrootアクセスを提供し、カスタムカーネルを許可しますが、LXCではホストカーネルを共有するため、カスタムカーネルはコンテナ自体のためのものではありません。その場合はKVMを使うことになります。LXCはホストが提供するカーネルのバージョンと設定に依存します。

LXCが登場する箇所

仮想化の詳細

KVM
KVMはLinuxカーネルに組み込まれたフルハードウェア仮想化であり、各ゲストに独自のカーネルと、他のテナントからのハードウェア強制分離を提供します。
OpenVZ
OpenVZはコンテナベースの仮想化であり、すべてのインスタンスがホストカーネルを共有するため、ゲストはカーネルモジュールをロードしたり、異なるオペレーティングシステムを実行したりできません。
ハイパーバイザー
ハイパーバイザーとは、仮想マシンを作成・実行し、物理CPU、メモリ、I/Oを割り当てるソフトウェアレイヤーです。
嵌套虚拟化
ネスト仮想化により、仮想マシン自体が仮想マシンを実行できるようになり、プロセッサの仮想化拡張機能がゲストに公開されます。
vCPU
vCPUは、ゲストに提示される仮想プロセッサであり、物理コアまたはスレッド上のスケジューリング時間によって支えられています。
cloud-init
cloud-initは、プラットフォームが提供するメタデータを使用して、仮想マシンを初回起動時に構成するための標準的なメカニズムです。