EC2 Ubuntu x86 20.04 ノード、カーネル v5.10 で mongoDB Enterprise Edition v4.4 を実行する runc コンテナを設定しようとしています。以下を使用してコンテナのネットワーク名前空間を設定しました。
sudo brctl addbr runc0
sudo ip link set runc0 up
sudo ip addr add 192.168.10.1/24 dev runc0
sudo ip link add name veth-host type veth peer name veth-guest
sudo ip link set veth-host up
sudo brctl addif runc0 veth-host
sudo ip netns add mongo_enter
sudo ip link set veth-guest netns runc
sudo ip netns exec mongo_enter ip link set veth-guest name eth1
sudo ip netns exec mongo_enter ip addr add 192.168.10.101/24 dev eth1
sudo ip netns exec mongo_enter ip link set eth1 up
sudo ip netns exec mongo_enter ip route add default via 192.168.10.1
私が望むのは、同じネットワーク上にいなくても、外部ノードからこの名前空間で実行されているrunc mongoサーバーにアクセスすることです。名前空間とブリッジに対してEC2インスタンスのプライベートIPに似たIPを設定しようとしましたが、次のエラーが発生しました。
Error: Nexthop has invalid gateway
これが名前空間を設定する正しい方法ですか、それとも別のより簡単で/正しい/標準的な方法がありますか?
ありがとうございます。
答え1
ただし、これは名前空間を設定する正しい方法です。
ネットワークネームスペースは、デフォルトでLANケーブル(veth pair)で接続されている他のコンピュータのように動作するため、正しいルーティングを設定する必要があります。特に元のノードと中間ノードから。
これは、「同じネットワークにある必要はない外部ノード」と、そのノードとコンテナ間のすべてを制御する場合に機能します。そうでない場合は、コンテナネットワークネームスペースがプライマリネットワークネームスペースと同じIPから「外部」にアクセスできるようにする必要があります。つまり、ポート転送を設定する必要があります(google、多数のチュートリアルがあります)。