1. OpenvSwitch簡介
linux
Open vSwitch(下面簡稱爲 OVS)是由 Nicira Networks 主導的,運行在虛擬化平臺(例如 KVM,Xen)上的虛擬交換機。在虛擬化平臺上,OVS能夠爲動態變化的端點提供 2 層交換功能,很好的控制虛擬網絡中的訪問策略、網絡隔離、流量監控等等。主要實現代碼爲可移植的C代碼。git
它的目的是讓大規模網絡自動化能夠經過編程擴展,同時仍然支持標準的管理接口和協議(例如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag)。此外,它被設計爲支持跨越多個物理服務器的分佈式環境,相似於vmware的vmnetwork分佈式switch或cisconexus 1000v。Open vSwitch支持多種Linux虛擬化協議,包括Xen/Xen Server,KVM,和VirtualBox。github
2.環境docker
2.1 拓撲圖:編程
2.2 試驗環境:bash
虛擬機操做系統Centos7.2.1511服務器
Openvswitch 2.3.1網絡
3.OpenvSwitch安裝
分佈式
Postil:爲了能正常使用service,ifconfig等命令你須要裝ide
yum -y install systemd systemd-libs net-tools
3.1 關閉selinux和防火牆
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config systemctl stop firewalld && systemctl disablefirewalld
3.2 安裝依賴包
yum -y install openssl-devel wget kernel-devel
3.3 安裝開發工具
yum -y groupinstall "Development Tools"
3.4 添加用戶並切換用戶
useradd ovswitch su - ovswitch
3.5 建立編譯目錄並cd進去
mkdir -p ~/rpmbuild/SOURCES cd ~/rpmbuild/SOURCES/
3.6 下載OpenvSwitch源碼包並解壓
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz tar zxvf openvswitch-2.3.1.tar.gz
3.7 從spec文件中刪除openvswitch-kmod的依賴包,並建立一個新的spec文件
sed 's/openvswitch-kmod,//g' openvswitch-2.3.1/rhel/openvswitch.spec >openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec
3.8 編譯,而後退出當前用戶使用root
rpmbuild -bb --nocheck ./openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec exit
3.9 安裝編譯生成的rpm文件
yum -y localinstall/home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.3.1-1.x86_64.rpm
3.10 啓動服務
service openvswitch start service openvswitch status chkconfig openvswitch on
3.11 安裝完成,驗證是否安裝成功
[root@docker1 ~]# ovs-vsctl --version ovs-vsctl (Open vSwitch) 2.3.1 Compiled Jul 1 2016 19:52:39 DB Schema 7.6.2
4.0部署OVS實現docker跨主機通訊
Docker1_Server與Docker2_Server都執行
安裝pipework創建容器間的網絡互聯的工具
git clonehttps://github.com/jpetazzo/pipework cp ~/pipework/pipework /usr/bin
4.1 中止docker服務
service docker stop
4.2 安裝網橋工具
yum -y install bridge-utils
4.3 停掉docker0網橋並刪除
ip link set dev docker0 down brctl delbr docker0
4.5 配置
Docker1_Server
使用OVS添加網橋br0
ovs-vsctl add-br br0
清空eth0網卡IP
ifconfig eth0 0 up
將物理主機ip賦給br0,並設置網關
ifconfig br0 192.168.200.6/24 up route add default gw 192.168.200.2
將eth0加入br0
ovs-vsctl add-port br0 eth0
測試是否恢復通訊
[root@docker1 ~]# ping baidu.com PING baidu.com (123.125.114.144) 56(84)bytes of data. 64 bytes from 123.125.114.144: icmp_seq=1ttl=128 time=6.50 ms 64 bytes from 123.125.114.144: icmp_seq=2ttl=128 time=4.80 ms 64 bytes from 123.125.114.144: icmp_seq=3ttl=128 time=6.11 ms 64 bytes from 123.125.114.144: icmp_seq=4ttl=128 time=3.82 ms
讓docker使用咱們的br0橋接網絡
vi /etc/sysconfig/docker-network 修改內容以下行便可: DOCKER_NETWORK_OPTIONS="-b=br0"
啓動docker服務
service docker start chkconfig docker on
啓動容器併爲容器指定IP
docker run -itd --name test1 --net=none busybox:latest sh docker run -itd --name test2 --net=none busybox:latest sh pipework br0 test1 192.168.200.10/24@192.168.200.6 pipework br0 test2 192.168.200.11/24@192.168.200.6 可用docker ps -a查看容器是否啓動
測試訪問
docker exec -it test1 sh
Docker2_Server
使用OVS添加網橋br0
ovs-vsctl add-br br0
清空eth0網卡IP
ifconfig eth0 0 up
將物理主機ip賦給br0,並設置網關
ifconfig br0 192.168.200.7/24 up route add default gw 192.168.200.2
將eth0加入br0
ovs-vsctl add-port br0 eth0
測試是否恢復通訊
[root@docker2 ~]# ping baidu.com PING baidu.com (123.125.114.144) 56(84)bytes of data. 64 bytes from 123.125.114.144: icmp_seq=1ttl=128 time=5.96 ms 64 bytes from 123.125.114.144: icmp_seq=2ttl=128 time=6.03 ms 64 bytes from 123.125.114.144: icmp_seq=3ttl=128 time=4.59 ms 64 bytes from 123.125.114.144: icmp_seq=4ttl=128 time=6.86 ms
讓docker使用咱們的br0橋接網絡
vi /etc/sysconfig/docker-network 修改內容以下行便可: DOCKER_NETWORK_OPTIONS="-b=br0"
啓動docker服務
service docker start chkconfig docker on
啓動容器併爲容器指定IP
docker run -itd --name test3 --net=none busybox:latest sh docker run -itd --name test4 --net=none busybox:latest sh pipework br0 test3 192.168.200.12/24@192.168.200.7 pipework br0 test4 192.168.200.13/24@192.168.200.7 可用docker ps -a查看容器是否啓動
測試訪問
docker exec -it test3 sh
綜合測試由docker1_Server來訪問docker2_Server
總結
經過本次測試,能夠看到OpenvSwitch的強大之處,ovs不單單用於docker容器,還能夠應用虛擬主機網絡。經過軟件定義網絡,極大的簡化了網絡配置。docker在1.9版本以後加入overlay網絡,運用的也是ovs技術。
OpenvSwitch性能是優於docker自己的docker0網橋的。