用ovs-docker让容器网络支持Vlan隔离

本文介绍了如何利用ovs-docker工具解决docker原生网络无法进行VLAN隔离的问题。通过ovs-docker,可以借助netns和veth在容器与OpenvSwitch网桥间建立桥接,从而实现更细粒度的网络隔离。
摘要由CSDN通过智能技术生成

声明:
本博客欢迎转载,但请保留原作者信息!
作者:柯晓东
团队:华为杭州OpenStack团队

docker原生使用linux bridge来创建网桥,这样无法使用vlan对容器间的网络进行网络隔离。

openvswitch社区提供了一个工具ovs-docker来给docker快速搭建ovs网络。

先看一下ovs-docker应用的一个例子:

(1)从ovs社区下载ovs-docker工具
wget https://raw.githubusercontent.com/openvswitch/ovs/master/utilities/ovs-docker

(2)创建几个容器,设置网络为none
docker run -t -i --name RouterA --net=none --privileged -v /lib/modules:/lib/modules ubuntu /bin/bash
docker run -t -i --name RouterB --net=none --privileged -v /lib/modules:/lib/modules ubuntu /bin/bash
docker run -t -i --name RouterC --net=none --privileged -v /lib/modules:/lib/modules ubuntu /bin/bash

(3)创建一个ovs网桥
ovs-vsctl add-br vswitch0

(4)用工具给容器添加网口
添加网口的参数为:网桥名、容器内的新网口名、容器名、新网口的ip地址
./ovs-docker add-port vswitch0 eth0 RouterA --ipaddress=192.168.100.1/24
./ovs-docker add-port vswitch0 eth0 RouterB --ipaddress=192.168.100.2/24
./ovs-docker add-port vswitch0 eth1 RouterB --ipaddress=192.168.200.2/24
./ovs-docker add-port vswitch0 eth0 RouterC --ipaddress=192.168.100.3/24

(5)测试1
在容器 RouterB 可以ping通 RouterA和RouterC

(6)设置Vlan隔离
设置Vlan的参数为:网桥名、容器内网口名、容器名、vlan号
./ovs-docker set-vlan vswitch0 eth0 RouterA 100
./ovs-docker set-vlan vswitch0 eth0 RouterB 100
./ovs-docker set-vlan vswitch0 eth1 RouterB 200
./ovs-docker set-vlan vswitch0 eth0 RouterC 203

(7)测试2
在容器 RouterB 发现ping不通 RouterC



ovs-docker简单又好用,它的原理就是用netns和veth来作容器和ovs网桥间的桥接!
下面来详细解说ovs-docker的代码:

#!/bin/bash

#检查对应的可执行程序有没有在$PATH目录下
#检查的可执行程序有 ovs-vsctl、docker、uuidgen
search_path () {
    save_IFS=$IFS
    IFS=:
    for dir in $PATH; do
        IFS=$save_IFS
        if test -x "$dir/$1"; then
            return 0
        fi
    done
    IFS=$save_IFS
    echo >&2 "$0: $1 not found in \$PATH, please install and try again"
    exit 1
}

#给所有的ovs-vsctl命令增加超时时间
ovs_vsctl () {
    ovs-vsctl --timeout=60 "$@"
}

#每个容器是一个netns
#但是只有在 /va/run/netns 下面建立链接࿰
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值