【ねっとわーくなまえくうかん】

ネットワーク名前空間 とは?

💡 プロセスごとに別世界のネットワーク!コンテナ分離の秘密兵器
📌 このページのポイント
ネットワーク名前空間による分離 ホスト OS 名前空間 A eth0: 10.0.1.1 ルーティング表 iptables ソケット 名前空間 B eth0: 10.0.2.1 ルーティング表 iptables ソケット vethペア 仮想ケーブル 各名前空間は独立したネットワークスタックを持つ
ネットワーク名前空間のイメージ
ひよこ ひよこ

ネットワーク名前空間って何ができるの?

ペンギン先生 ペンギン先生

1台のLinuxマシンの中に、独立したネットワーク環境をいくつも作れるんだよ。各環境はそれぞれ別のIPアドレスルーティングテーブルを持っていて、お互いに干渉しないんだ

ひよこ ひよこ

コンテナと関係あるのかな?

ペンギン先生 ペンギン先生

大いに関係あるよ!Dockerコンテナ1つ1つが別々のネットワーク名前空間で動いているんだ。だから同じマシン上のコンテナでも、それぞれ別のIPアドレスを持って独立して通信できるんだよ

ひよこ ひよこ

名前空間同士はどうやって通信するの?

ペンギン先生 ペンギン先生

vethペアという仮想ケーブルで接続するよ。糸電話の両端みたいに、片方を名前空間Aに、もう片方を名前空間Bやブリッジに繋ぐんだ。Dockerのdocker0ブリッジもこの仕組みで動いているよ

ひよこ ひよこ

コンテナ以外でも使うことはあるの?

ペンギン先生 ペンギン先生

ネットワークのテストや検証に便利だよ。ip netns addコマンドで手軽に独立したネットワーク環境を作れるから、ルーティングの検証やファイアウォールルールのテストを本番環境に影響なく行えるんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ネットワーク名前空間」って出てきたら「プロセスごとに独立したネットワーク環境を作る仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Network Namespace」 = ネットワーク名前空間
💬 Namespace(名前空間)はLinuxカーネルのリソース分離機能で、ネットワーク版ということだよ
← 用語集にもどる