laik / demo

2 stars 0 forks source link

模拟一下docker的操作 #23

Open laik opened 2 years ago

laik commented 2 years ago
#本机地址192.168.2.134
#添加一个netns0模拟一台机器
ip netns add netns0
ip link add veth0 type veth peer name ceth0
ip link set veth0 up
ip link set ceth0 netns netns0

nsenter --net=/var/run/netns/netns0
ip link set lo up
ip link set ceth0 up
ip addr add 172.18.0.10/16 dev ceth0 
exit 

#添加一个netns1模拟另外一台机器
ip netns add netns1
ip link add veth1 type veth peer name ceth1
ip link set veth1 up
ip link set ceth1 netns netns1

nsenter --net=/var/run/netns/netns1
ip link set lo up 
ip link set ceth1 up 
ip addr add 172.18.0.20/16 dev ceth1 
exit

# 在主空间添加一个网桥
ip link add br0 type bridge
ip link set br0 up

ip link set veth0 master br0
ip link set veth1 master br0

# 给网桥添加上地址(变成三层交换机)
ip addr add 172.18.0.1/16 dev br0

# 给netns0添加一个默认路由
nsenter --net=/var/run/netns/netns0 
ip route add default via 172.18.0.1
ping -c 2 192.168.2.134  # 可以ping通主网卡的地址
ping -c 2 baidu.com # ping不通
exit

# 主空间开启ip转发
bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
# 添加来自br0的snat
iptables -t nat -A POSTROUTING -s 172.18.0.0/16 ! -o br0 -j MASQUERADE

# 给netns0添加一个默认路由
nsenter --net=/var/run/netns/netns0 
ping -c 2 baidu.com # ping通
exit

#清理
ip netns delete netns0
ip netns delete netns1
ip link del dev veth1
ip link del dev veth0
ip link del dev br0
iptables -t nat -D POSTROUTING -s 172.18.0.0/16 ! -o br0 -j MASQUERADE

# 在主空间模拟k8s nodeport/docker expose
iptables -t nat -A PREROUTING -d 192.168.2.134 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 172.18.0.10:5000 
# 本地流量 (因为它没有通过 PREROUTING chain) 
iptables -t nat -A OUTPUT -d 192.168.2.134 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 172.18.0.10:5000