私のホストコンピュータでRHEL-7.2を実行しています。内部でLXCを実行しています。 LXCの内部にネットワーク名前空間を作成します。名前空間内の変数の変更がsysctl
失敗します(ルートとして):
$ ip netns add testns
$ ip netns exec testns bash
$ sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
/proc/sys
シェルにRWを再インストールしてから、sysctl -w
同じシェルに再インストールすると機能します。
$ ip netns exec testns bash
$ mount -o remount,rw /proc/sys
$ sysctl net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
その後、2番目のシェルを起動してnetnsと入力しましたが、/proc/sys
読み取り専用としてマークされましたが、1shシェルではまだ書き込みが可能でした。これは私を混乱させる。最初のシェルで変更された値の効果は、2番目のシェルで見ることができます。
構成スクリプトに再インストールを追加しようとしていますが、この問題により足首が捕まっています。
$ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
$ ip netns exec testns sh -c \
> 'mount -o remount,rw /proc/sys && sysctl net.ipv6.conf.all.disable_ipv6=1'
net.ipv6.conf.all.disable_ipv6 = 1
$ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=0
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
sysctl
ホストシステムとLXCのデフォルトの名前空間で問題なくこの変更を実行できます。ホストから直接名前空間を作成しても、この問題は発生しません。 LXC内の名前空間内では、/proc/sys
読み取り専用の状況のみが発生します。
私の質問は次のとおりです
第1四半期。/proc/sys
いつでもsysctl変数を設定できるように、LXC内の名前空間にRWを永久にインストールしたいと思います。
第2四半期。なぜこれが起こるのか理解したいです。/proc/sys
プロセスごとまたはシステムコールsetns
ごとにマウントが行われているようです。man ip-netns
バインドマウントについて話しましたが、/etc/netns/<name>/file
それに関する情報はまったく表示されません/proc
。私は明らかなものを見逃していますか?
修正する
最も可能性の高い答えを見つけました。第2四半期。まず実験してから、次の手順を実行してくださいman ip-netns
。
ip netns execはインストール名前空間を作成し、すべてのネットワーク固有の名前空間設定ファイルを作成します
/etc
。
したがって、ip netns exec
新しいマウント名前空間が毎回作成されますが、/proc/sys
マウントオプションが何であれ影響を受けます。私の推測では、バインドがLXCの下の読み取り専用モードでマウントされる原因を見つける必要があるということです。ip netns exec
これが私の質問Q1に答えることができます。/proc/sys
答え1
私に合ったものを見つけました。このソリューションは、コンテナがホストシステムを妨げないようにするなど、セキュリティを心配している人にとっては良いアイデアではないかもしれません。私の解決策の全体的な結果を実際に理解していません。私はLXCで独自のコードを実行し、Jenkinsテストのみを実行するので、これは私にとって問題ではありません。
ここで見つけました。https://libvirt.org/drvlxc.html#fsmounts:
次の特別なマウントはlibvirtによって設定されます。
/proc/sys the host "/proc/sys" bind-mounted read-only
なぜLXC内のデフォルトネットワークネームスペース内では設定できますが、sysctl
他のネットワークネームスペース内では設定できないのかはまだわかりません。
/proc/sys
コンテナ構成XMLに明示的なマウントを追加しました。
<devices>
...
<filesystem type='mount' accessmode='passthrough'>
<source dir='/proc/sys/'/>
<target dir='/proc/sys/'/>
</filesystem>
sysctl
これにより、LXCコンテナ内にデフォルトの名前空間と追加の名前空間を設定できます。 LXCの内部設定がコンソールにも影響を与えるか心配していましたが、そうではありませんでした。すべてのネットワークネームスペース(ホスト、LXCデフォルト、LXCカスタマイズ)には、sysctl
毎回再マウントすることなく、独自に書き込み可能な(ルート経由で)変数があります。または、少なくともsysctl
クエリレポートに記載されているものです。