1.软件介绍;        
顾名思义,Open vSwitch即开放虚拟交换标准!具体点说,Open vSwitch是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准!它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议(如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。总的来说,它被设计为支持分布在多个物理服务器,例如VMware的vNetwork分布式vSwitch或思科的Nexus1000V。
那么什么是虚拟交换?虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。跟传统的物理交换机相比,虚拟交换机同样具备众多优点,一是配置更加灵活。一台普通的服务器可以配置出数十台甚至上百台虚拟交换机,且端口数目可以灵活选择。例如,VMware的ESX一台服务器可以仿真出248台虚拟交换机,且每台交换机预设虚拟端口即可达56个;二是成本更加低廉,通过虚拟交换往往可以获得昂贵的普通交换机才能达到的性能,例如微软的Hyper-V平台,虚拟机与虚拟交换机之间的联机速度轻易可达10Gbps。[1] 
Open vSwitch的特性
1 支持通过NetFlow sFlow IPFIX, SPAN, RSPAN, 和 GRE-tunneled镜像使虚拟机内部通讯可以被监控;
2 支持LACP (IEEE 802.1AX-2008)(多端口绑定)协议;
3 支持标准的 802.1Q VLAN模型以及 trunk模式;
4 支持 BFD 和 802.1ag 链路状态监测;
5 支持STP (IEEE 802.1D-1998);
6 支持细粒度的Qos;
7 支持HFSC系统级别的流量控制队列;
8 支持每虚拟机网卡的流量的流量控制策略;
9 支持基于源MAC负载均衡模式、主备模式、L4哈希模式的多端口绑定;
10 支持OpenFlow协议(包括许多虚拟化的增强特性);
11 支持IPV6
12 支持多种隧道协议((GRE, VXLAN, IPsec, GRE and VXLAN over IPsec)
13 支持通过C或者Python接口远程配置;
14 支持内核态和用户态的转发引擎设置;
15 支持多列表转发的发送缓存引擎;
16 支持转发层抽象以容易的定向到新的软件或者硬件平台;    
    
2..获取软件包;
   
                  http://openvswitch.org/download/
3.部署详细;
(1).依赖环境包;
yum -y install wget openssl-devel kernel-devel bridge-utils
(2).安装依赖的工具
yum groupinstall "Development Tools"
(3).添加一个ovswitch用户
    adduser ovswitch
(4).下载并解压openvswitch源码 (as ovswitch user)
$ su - ovswitch
$ mkdir -p ~/rpmbuild/SOURCES
$ cd ~/rpmbuild/SOURCES
$ wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
$ tar xfz openvswitch-2.3.1.tar.gz
(4).我们需要修改下openvswitch的spec-file文件并使用ceontos内核模块不哦也那个新建一个
$ sed 's/openvswitch-kmod, //g' openvswitch-2.3.1/rhel/openvswitch.spec > openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec
(5).新建一个RPM-file文件方便后面使用,比如后面升级等
$ rpmbuild -bb --nocheck ~/openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec
$ exit
(6).现在安装RPM-package (切换到root)
yum localinstall /home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.3.1-1.x86_64.rpm
如果你没有禁用SElinux的话你会遇到下面的SELinux问题,你只要启用openvswitch服务就可以了
install: cannot change owner and permissions of ‘/etc/openvswitch': No such file or directory and Creating empty database /etc/openvswitch/conf.db ovsdb-tool: I/O error: /etc/openvswitch/conf.db: failed to lock lockfile (No such file or directory)
这是一个修复的方法
# mkdir /etc/openvswitch
# semanage fcontext -a -t openvswitch_rw_t "/etc/openvswitch(/.*)?"
# restorecon -Rv /etc/openvswitch
(7).开启openvswitch服务
systemctl start openvswitch

clipboard01.png


1.验证下是否安装了openvswitch服务

clipboard.png


安装参考链接:

http://www.linuxdown.net/install/soft/2016/0228/4857.html


(8).创建ovs网桥;

 ovs-vsctl add-br br0

(9).创建gre隧道连接对端

ovs-vsctl add-port br0 gre1 --  set interface gre1 type=gre option:remote_ip=172.16.100.124

(10).添加br0 到本地docker0 使容器流量通过ovs流经tunnel

[root@centos-minion ~]# brctl addif docker0 br0

(11).启动br0和docker 0 网桥;

[root@centos-minion ~]# ip link set dev br0 up

[root@centos-minion ~]# ip link set dev docker0 up

(12).添加路由规则;

ip route add 172.17.0.0/16 dev docker0

(13).清除防火墙规则;

iptables -t nat -F ;iptables -F

(14).另外一端也需要以上步骤;注意;

ovs-vsctl add-port br0 gre1 --  set interface gre1 type=gre option:remote_ip=172.16.100.123

(15).测试docker 通信;

配置测试ip地址

Docker之跨主机网络通信-Openvswitch_第1张图片

Docker之跨主机网络通信-Openvswitch_第2张图片

进行测试通信测试

minion-1 ping minion-2

Docker之跨主机网络通信-Openvswitch_第3张图片

minion-1 ping minion-2


Docker之跨主机网络通信-Openvswitch_第4张图片