测试1:⽆⽹络情况下通过ovs镜像打通⽹络
mkdir /var/run/netns/
创造主机 (ovs主机⼀定要以--privileged执⾏!!!!)
docker run -it --rm --name=host1 myubuntu
docker run -it --rm --name=ovs1 --privileged=true ovs:my
docker run -it --rm --name=host2 myubuntu
nspid1=$(docker inspect -f '{{.State.Pid}}' host1)
sudo ln -s /proc/${nspid1}/ns/net /var/run/netns/${nspid1}
**容器被创建出来后,ip netns命令是无法管理容器的网络命名空间的,**
nspid2=$(docker inspect -f '{{.State.Pid}}' ovs1)
sudo ln -s /proc/${nspid2}/ns/net /var/run/netns/${nspid2}
nspid3=$(docker inspect -f '{{.State.Pid}}' host2)
sudo ln -s /proc/${nspid3}/ns/net /var/run/netns/${nspid3}
补充知识
- 网络命名空间
网络命名空间基础知识 - docker容器互联
docker容器互联
sudo ip link add ens0 type veth peer name ens1
sudo ip link set ens0 netns ${nspid1}
sudo ip link set ens1 netns ${nspid2}
sudo ip netns exec ${nspid1} ip link set ens0 up
sudo ip netns exec ${nspid1} ip addr add 100.0.0.1/24 dev ens0
sudo ip netns exec ${nspid2} ip link set ens1 up
sudo ip link add ens2 type veth peer name ens3
sudo ip link set ens2 netns ${nspid2}
sudo ip link set ens3 netns ${nspid3}
sudo ip netns exec ${nspid2} ip link set ens2 up
sudo ip netns exec ${nspid3} ip link set ens3 up
sudo ip netns exec ${nspid3} ip addr add 100.0.0.2/24 dev ens3
```bash
/usr/share/openvswitch/scripts/ovs-ctl start
ovs-vsctl add-br br0
ovs-vsctl add-port br0 ens1
ovs-vsctl add-port br0 ens2
ovs-ofctl add-flow br0 "cookie=0,priority=40001,in_port=1 actions=output:2"
ovs-ofctl add-flow br0 "cookie=0,priority=40001,in_port=2 actions=output:1"