如何从外部节点访问本地网络命名空间?

如何从外部节点访问本地网络命名空间?

我正在尝试在 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 对)连接的不同计算机一样工作,因此您需要设置正确的路由,尤其在原始节点和中间节点。

如果您控制“外部节点,不一定在同一网络中”以及该节点和容器之间的所有内容,那么这是可行的。如果没有,您需要假装容器网络名称空间“外部”可以在与主网络名称空间相同的 IP 下访问,这意味着您需要设置端口转发(google,有很多教程)。

相关内容