![为应用程序实例提供自己的 IP?极轻量级容器化?](https://linux22.com/image/125056/%E4%B8%BA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%AE%9E%E4%BE%8B%E6%8F%90%E4%BE%9B%E8%87%AA%E5%B7%B1%E7%9A%84%20IP%EF%BC%9F%E6%9E%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%AE%B9%E5%99%A8%E5%8C%96%EF%BC%9F.png)
大约两年前,我收到了一张带有方法的笔记,但我现在找不到该笔记或方法。有人知道实现这一目标的最简单方法吗?
杰布
答案1
为了帮助您开始,这里有一个简单的脚本,它创建一个新的网络命名空间,并xterm
在其中启动一个,因此其中的所有操作都发生在该命名空间中。它还通过 veth-pair 将命名空间连接到主命名空间。
将所有 veth 端点放在网桥的主命名空间中,这样多播就很简单(或者添加多播路由器,如果您愿意),从 xterm 运行您的应用程序(或修改脚本),看看是否已经达到您想要的效果。您需要替换your_userid
为应运行实例的用户 ID。
#!/bin/bash
# Setup network namespace with veth pair, start xterm in it
# nsterm ns0 veth0 10.0.0 yellow 24
#
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3-:10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}
# echo ns=$NS dev=$DEV col=$COL mask=$MASK
ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" your_userid
答案2
啊,答案过去是,现在也是火狱。比网络命名空间更容易处理。