GNU/Linux >> Linux の 問題 >  >> Linux

最もよく使用される7つのLinux名前空間

名前空間に関する技術的な定義を明確にするために、いくつかの例を示したいと思います。 。ウィキペディアには次の定義があります:

名前空間は、あるプロセスのセットが1つのリソースのセットを認識し、別のプロセスのセットが別のリソースのセットを参照するようにカーネルリソースを分割するLinuxカーネルの機能です。この機能は、リソースとプロセスのグループに同じ名前空間を使用することで機能しますが、これらの名前空間は別個のリソースを参照します。

この定義は、一部の人々にとってはかなり消化しにくいので、おそらくこのアナロジーが役立つでしょう。私のアパートの建物を考えてみましょう。技術的には、独自の入り口を持つ2つの異なる建物です。ただし、駐車場、体育館、プール、共用室は共用です。建物には独自の名前、 City Place があります およびCityPlace 2 。彼らは独自の住所、フロア、エレベーターを持っています。それでも、それらは同じ物理的複合体に接続されています。

物理的な複合体はコンピューターと同じ考えです。 2つ(またはそれ以上)の名前空間を同じ物理コンピューターに配置できます。アパートの建物と同様に、名前空間は特定のリソースへのアクセスを共有することも、排他的なアクセス権を持つこともできます。

現在広く使用されている名前空間には、7つの一般的なタイプがあります。アパートをガイドとして使用して、各タイプの機能の概要を見ていきましょう。以下は、各名前空間タイプの概要です。以降の記事では、各名前空間がどのように機能するかを例で示します。

プロセス分離(PID名前空間)

PID 、またはプロセスIDは、システムがコンピューター上の特定のタスクを追跡するのに役立ちます。コンピュータでFirefoxを起動すると、PIDが関連付けられます。コンピューターがタスクと適切に対話することを確認するために、タスクはPIDによって参照されます。 FirefoxとBraveブラウザを同時に開いていると仮定しましょう。各ブラウザでDuckDuckGoなどの好みの検索エンジンを起動し、猫の写真を検索します。 1つと犬の写真 他で。両方のブラウザが同じWebサイトに対して同様の要求を行っています。コンピューターは、正しい検索結果が正しいブラウザーに返されることをどのように確認しますか?主な方法の1つは、各PIDが行う要求をトレースし、その結果を要求しているプロセスに返すことです。

「素晴らしい、私は迷子になっている」とあなたは言う。これはアパートの建物や名前空間と何の関係がありますか?さて、あなたがソフトウェアの同一のコピーを実行したいとしましょう。一部のソフトウェアは、一度に複数のコピーを開くように作成されていません。これを実現するには、PIDを分離して、自身のプロセスの外部で何が起こっているかを認識しないようにする必要がある場合があります。これが、プロセスの分離が解決に役立つものです。

言い換えれば、私たちのアパートの建物に戻ると、複合施設内の個々のアパートはPID名前空間に似ています。集合住宅の各世帯は、テレビの電源を入れてさまざまなコンテンツを見たいと考えています。ばかげたパラレルユニバースで、アパートの1人の人がテレビをオンにしたとき、他の誰もテレビを見ることができないと想像してください。そうしないと、ケーブルプロバイダーは、どのテレビが「オフィス」と「見習い。"名前空間を使用すると、ケーブル会社は各世帯を分離し、各居住者に個別のプログラミングを提供できます。これは、複合施設内の他の人が何を見ているかが問題にならないためです。

[PID名前空間の詳細をご覧ください。 ]

ネットワークインターフェース(ネット名前空間)

ネットワーク(インターネットなど)に接続されているすべてのコンピューターには、IPアドレスが必要です。これは、コンピューターが効果的に通信できるようにする一意の番号です。特定のタイプのリソース(たとえばWebページ)にアクセスすると、その通信に使用される特定のポートがあります。これは、コンピューターが同じホスト上でWebサーバー、ゲームサーバー、およびおそらく電子メールサーバーをホストできるためです。ポートは、Webトラフィックの場合は80または443、ゲームトラフィックの場合は8888、電子メールの場合は25です。ブラウザにhttps:// <ウェブサイトアドレス>と入力すると、コンピュータはそれを変換して、ポート443でブラウザのIPxxx.xxx.xxx.xxxにトラフィックを送信します。 。次に、もう一方のサーバーは、送信元IPアドレスを介して適切なコンテンツで応答します。前述のように、一部のテクノロジスタックは、同時に実行されるソフトウェアの複数のインスタンスをサポートしていません。ただし、PID分離とは異なり、電子メールサーバーなどのソフトウェアが接続を受信して​​いる場合、特定のポート上にあることを想定しています。したがって、PIDを分離した場合でも、ポート25がすでに使用されているため、電子メールサーバーでは単一のインスタンスしか実行されません。ネットワーク名前空間を使用すると、各名前空間インスタンス内のプロセスは、すべての範囲のポートとともに新しいIPアドレスにアクセスできます。したがって、ソフトウェアの競合なしに、ポート25でリッスンしている複数のバージョンの電子メールサーバーを実行できます。

私の建物のシナリオでは、建物は同じ物理的な複合施設に接続されており、お互いの鏡像です。これは、各建物に同じ量の居住スペースがあることを意味します。さらに、それらは同じアパート番号付けスキーマに従います。これは、たとえば、各建物に707号機があることを意味します。この例では、IPアドレスはアパートの住所のようなものであり、アパート番号は港です。各集合住宅は同じ物理的な建物の一部ですが、住所は異なります。建物は物理的に分離されていないため、このネット名前空間がないと Steve Ovens、123 Fake Street Unit707に請求書を送る会社 間違ったアドレスに送信されたため、返信が届かない場合があります。おそらく、住所があいまいなため、郵便局は手紙を配達しようとはしませんでした。ただし、ネット名前空間を使用すると、 123 Fake Streetを使用できます。 および125Fake Street 同じ物理的な建物内にあります。

[ネット名前空間の詳細をご覧ください。 ]

Unixタイムシェアリングシステム(uts名前空間)

この名前空間は、残念ながら今日の標準によって名前が付けられています。これはUnixの初期にまでさかのぼり、特定のシステムコールのために情報がどのように保存されたかに関係しています。今日、この詳細は歴史にほとんど失われており、本当に知っておく必要があるのは、UTS名前空間がホスト名の分離を可能にするということです。多くの場合、ホスト名は単に便利です。前述のように、いくつかの例外を除いて、ホストとの間のほとんどの通信はIPアドレスとポート番号を介して行われます。ただし、プロセスに何らかの名前を付けると、人間の生活がはるかに楽になります。たとえば、ホスト名を特定する場合、ログファイルの検索ははるかに簡単です。動的な環境では、IPが変更される可能性があるためです。

私たちの建物の例えでは、ホスト名はアパートの建物の名前に似ています。 City Placeに住んでいるタクシー運転手に伝える アパートは通常、実際の住所を提供するよりも効果的です。単一の物理ホスト上に複数のホスト名を持つことは、大規模なコンテナ化された環境で非常に役立ちます。

[uts名前空間の詳細をご覧ください。 ]

ユーザー名前空間

すべてのコンピュータシステムには、どのユーザーがどのファイルを所有しているかを追跡する方法があります。これにより、システムは機密性の高いシステムファイルへのアクセスを制限できます。また、同じコンピューターを使用しているユーザーが互いのファイルにアクセスするのを防ぎます。エンドユーザーには、ファイルは stratusなどのログイン名で所有されていることが示されます。 。ただし、コンピュータにとって、これは英数字の任意の組み合わせにすぎません。これらの権限を正しく追跡するために、ユーザーのをマッピングするプロセスがあります。 1001などの特定のユーザーID(UID)番号に。このUIDは、ファイルのメタデータに適用されます。これにより、ユーザー名を stratus1に変更できます システムが大量のメタデータ更新を行う必要はありません。マッピングファイルが更新され、UID1001がstratus1に関連付けられます。 の代わりに 。エントリは、1つ(または少数)の場所で変更されます。

これは私のアパートの床にある郵便受けに似ていると考えてください。各メールボックスには、1つまたは複数の名前が関連付けられています。誰かが私にメールを配達したいとき、例えば、彼らはそのメールをボックス707に入れます。名前を変更したり、妻の名前をメールボックスに追加したりしても、何も変わりません。メールは引き続き同じ場所に送信され、許可された人だけがこれらのファイルを表示でき、ボックスのロックを解除するための私のキーは変更されません。

[ユーザーの名前空間の詳細をご覧ください。 ]

マウント(mnt名前空間)

マウント名前空間は、異なる名前空間のプロセスが互いのファイルを表示できないようにマウントポイントを分離するために使用されます。 chrootコマンドに精通している場合は、同様に機能します。

私たちの例えでは、私はアパートから少し逸脱するつもりです。二人が結婚したとしましょう。このシナリオでは、通常は共有されることになるものがたくさんあります。あなたはおそらく彼らの名前を住所リストに載せ、請求書に両方の名前を付け、車の所有権に両方の名前を付け、クレジットカードなどに追加するかもしれません。この意味で、あなたは同じマウントポイントを他の人。ただし、クレジットが別々である場合や、税金を自分で支払う場合などがあります。彼らの社会保険番号(米国の友人の社会保障番号)はあなたのものとは区別されたままであり、その逆も同様です。したがって、あなたのパートナーは財政状況について同様の見方をするかもしれませんが、それは完全に同じではありません。彼らには、法的にあなたの唯一の所有物である金銭的問題を見る本当の能力はありません。

同じことがファイルシステムのマウントポイントにも当てはまります。デフォルトでは、異なるマウント名前空間は他のコンテンツを表示できません。名前空間に関する限り、それはファイルシステムのルートにあり、他には何も存在しません。ただし、基になるファイルシステムの一部をマウント名前空間にマウントして、追加情報を表示できるようにすることができます。

[mnt名前空間の詳細をご覧ください。 ]

プロセス間通信(IPC)

この名前空間は非常に技術的で、理解して説明するのが複雑です。 Marty KalinがOpensource.comにプロセス間通信(IPC)の詳細を説明する一連の記事を掲載しているほどです。あなたが本当に興味を持っているなら、私はこのトピックの正義を行うことができなかったので、マーティのシリーズを紹介します。 IPCは、共有メモリ領域、メッセージキュー、およびセマフォを使用してプロセス間の通信を処理します。そのすべてがあなたにとって異質に聞こえても、心配しないでください、あなたは一人ではありません。このタイプの管理の最も一般的なアプリケーションは、おそらくデータベースの使用です。

IPCの単一の側面である共有メモリにズームインすると、重要性の基本的な理解を得ることができます。プログラミングでは、アプリケーションが一時的に情報を追跡する必要がある場合は常に、オペレーティングシステムがそのプロセスに一定量のランダムアクセスメモリ(RAM)を割り当てるように要求します。これは、チャットプログラムで誰かと会話を始めるのと同じように考えることができます。デフォルトでは、受信者は自分と相手の2人、または別の方法で考えているオペレーティングシステムとアプリケーションの2つだけです。両方の参加者は会話の履歴全体を見ることができますが、他の誰も見ることができません。ただし、新しい人がチャットに招待された場合は、その人も読んでディスカッションに参加できます。共有メモリも同様に機能し、2つ以上のプログラムが同じ情報にアクセスできるようにします。あるプログラムによる変更は、他のプログラムにすぐに表示されます。

Cgroups

cgroupsの詳細については、redhat.comで私のシリーズを読むことをお勧めします。その4部構成のシリーズでは、cgroupがどのように機能し、どのように実践できるかについて詳しく説明します。簡単に言うと、cgroupはシステムリソースを制御するためのメカニズムです。 cgroupがアクティブな場合、CPU、RAM、ブロックI / O、およびプロセスが消費する可能性のあるその他のファセットの量を制御できます。デフォルトでは、cgroupは仮想ファイルシステム/sys/fs/cgroupに作成されます 。別のcgroup名前空間を作成すると、基本的にcgroupのルートディレクトリが移動します。たとえば、cgroupが/sys/fs/cgroup/mycgroupの場合 、新しい名前空間cgroupは、これをルートディレクトリとして使用できます。ホストには/sys/fs/cgroup/mycgroup/{group1,group2,group3}が表示される場合があります ただし、新しいcgroup名前空間を作成すると、新しい名前空間には{group1,group2,group3}のみが表示されます。 。

なぜこれが必要なのか不思議に思うかもしれません。この一部はセキュリティ関連です。新しいcgroup名前空間が作成されなかった場合、情報が漏洩する可能性があります。マニュアルページにはそれが最もよく書かれています:

コンテナ外のcgroupディレクトリパスがコンテナ内のプロセスに表示されることによる情報漏えいを防ぎます。このような漏洩は、たとえば、コンテナ化されたアプリケーションにコンテナフレームワークに関する情報を明らかにする可能性があります。

従来のcgroup階層では、ネストされたcgroupがその祖先にアクセスできる可能性があります。これは、/sys/fs/cgroup/mycgroup/group1のプロセスを意味します mycgroupの下にネストされたものを読み取ったり操作したりする可能性があります 。

最後に、特にコンテナーについて考えると、cgroup名前空間により、コンテナーは祖先のcgroupに依存しなくなります。これは、ホスト間でコンテナーを移行する可能性のあるOpenShiftのようなものにとって重要です。名前空間によって分離が提供されていない場合、コンテナーを移行するときに、完全なcgroupパス名を新しいホストに複製する必要があります。パスは一意である必要があるため、cgroup名前空間は新しいホストシステムでの競合を回避するのに役立ちます。

建物の例えでは、cgroupは各ユニットのユーティリティに似ています。 cgroupsはリソースの使用を制限できますが、会計士としても機能します。ですから、私のアパートは私が一定量の電力や水を使うことを妨げませんが、それは間違いなく私の使用量を追跡(そして請求)します。その使用法は、建物全体の使用法のほんの一部にすぎません。建物の総使用量(アパートの先祖)も、隣人がどれだけ利用しているかもわかりません。それらは完全に異なるcgroup名前空間にあります。

[この無料の電子書籍を入手する:ダミーのKubernetesクラスターを管理する。 ]

まとめ

これで、最もよく使用される7つの名前空間の概要がわかります。うまくいけば、私のアナロジーが有用で明確でした。次のいくつかの記事では、これらの名前空間のいくつかと、それらが手動で作成される方法について説明します。これにより、名前空間の有用性をよりよく理解できるようになります。最後の記事では、コンテナが「内部」でどのように機能するかを説明するためのcgroupの使用を含め、すべてを結び付けています。


Linux
  1. どのLinuxターミナルコマンドを最もよく使用しますか?

  2. Linuxの歴史の中で最も重要な瞬間は何でしたか?

  3. Linux名前空間

  1. Linuxlsコマンドをマスターする

  2. Linux – Linuxで名前空間を一覧表示する方法は?

  3. 最も頻繁に使用される 25 の Linux IPTables ルールの例

  1. Linux:デバイスに使用されているデバイスドライバーを見つける方法は?

  2. 802021年に最も使用されたEssentialLinuxアプリケーション

  3. Linux で最も一般的なインターネットの問題を解決する方法