Docker高級應(yīng)用之多臺主機網(wǎng)絡(luò)互聯(lián)

責(zé)任編輯:editor005

2015-02-12 14:39:17

摘自:吟—技術(shù)交流 的博客

結(jié)果也是一樣,能ping通自己的em1與NODEA(10 10 17 3)的em1網(wǎng)卡,并且對方的ovs2的ip也能ping通,但ovs2里的主機無法ping通 可以看到能ping通NODEA(10 10 17 3)與NODEB(10 10 17 4)(em1網(wǎng)卡都是走物理交換機),但他們2個的ovs2都無法ping通

目前docker主要應(yīng)用于單機環(huán)境,使用網(wǎng)橋模式,但如果想把多臺主機網(wǎng)絡(luò)互相,讓多臺主機內(nèi)部的container互相通信,就得使用其他的軟件來幫忙,可以使用Weave、Kubernetes、Flannel、SocketPlane或者openvswitch等,我這里就使用openvswitch來介紹docker多臺主機網(wǎng)絡(luò)互通。

  先看一個使用openvswitch連接的架構(gòu)圖,連接的方式是vxlan

說明:

  這里有2臺主機,分別是NODEA與NODEB,系統(tǒng)是centos7,內(nèi)核是3.18(默認centos7內(nèi)核是3.10,但想使用vxlan,所以得升級,參考http://dl528888.blog.51cto.com/2382721/1609850)

  docker是1.3.2版本,存儲引擎是devicemapper。

  每臺主機里都有2個網(wǎng)橋ovs1與ovs2,ovs1是管理網(wǎng)絡(luò),連接內(nèi)網(wǎng)網(wǎng)卡em1,ovs2是數(shù)據(jù)網(wǎng)絡(luò),docker測試機都連接這個ovs2,并且container創(chuàng)建的時候網(wǎng)絡(luò)都是none,使用pipework指定固定ip。

  然后2臺主機使用vxlan連接網(wǎng)絡(luò)。

  重要:

  我個人認為使用這個模式并且指定固定ip,適用于的環(huán)境主要是給研發(fā)或者個人的測試模式,如果是集群環(huán)境,沒必要指定固定ip(我這里的集群就沒有使用固定ip,使用動態(tài)ip,效果很好,后續(xù)給大家介紹集群)。

  下面是部署方法

  環(huán)境

一、安裝openvswitch

  我的版本是最新的2.3.1

  1、安裝基礎(chǔ)環(huán)境

  2、下載最新的包

  3、解壓與打包

  之后會在~/rpmbuild/RPMS/x86_64/里有2個文件

  安裝第一個就行

  4、安裝

  5、啟動

  6、查看狀態(tài)

  可以看到是正常運行狀態(tài)

  具體的安裝詳細步驟可以參考



  https://github.com/openvswitch/ovs/blob/master/INSTALL.RHEL.md與http://www.linuxidc.com/Linux/2014-12/110272.htm
 

二、部署單機環(huán)境的docker

  1、下載pipework

  使用這個軟件進行固定ip設(shè)置

2、在NODEA(ip是10.10.17.3)里運行下面命令

  可以把下面內(nèi)容復(fù)制到腳本里運行

  根據(jù)自己的環(huán)境修改上面內(nèi)容

  運行腳本

可以看到已經(jīng)啟動了2個容器,分別是test1與test2

  下面從本地登陸指定的ip試試

登陸后可以看到容器內(nèi)的ip是指定的,并且能ping另外同一個網(wǎng)段的172.16.0.6,外網(wǎng)也能ping通。

  下面進行vxlan測試,需要現(xiàn)在另外一個物理宿主機進行上面的腳本安裝,然后在進行vxlan配置

  3、在NODEB(ip是10.10.17.4)里運行

  腳本內(nèi)容是

  運行這個腳本

  登陸分別的固定ip試試

可以看到結(jié)果跟NODEA(10.10.17.3)里運行的一樣,登陸后可以看到容器內(nèi)的ip是指定的,并且能ping另外同一個網(wǎng)段的172.16.0.9,外網(wǎng)也能ping通

  然后在試試能否ping通對方的em1網(wǎng)卡與對方ovs2的ip

  4、在NODEA里測試

  能ping通自己的em1與10.10.17.4的em1網(wǎng)卡,并且對方的ovs2的ip也能ping通,但ovs2里的主機無法ping通

  5、在NODEB里測試

結(jié)果也是一樣,能ping通自己的em1與NODEA(10.10.17.3)的em1網(wǎng)卡,并且對方的ovs2的ip也能ping通,但ovs2里的主機無法ping通

  6、vxlan設(shè)置

  在NODEA里運行

  在NODEB里運行

現(xiàn)在NODEA與NODEB這2臺物理機的網(wǎng)絡(luò)都是互通的,容器的網(wǎng)絡(luò)也是互通。

  然后在NODEA(10.10.17.3)里ping NODEB(10.10.17.4)的ovs2 ip與容器的ip

可以看到可以在NODEA(10.10.17.3)里ping通NODEB(10.10.17.4)的ovs2 ip與交換機下面的容器ip

  如果各自設(shè)置vxlan,還是無法連接請看看iptables里是否給ovs1進行了input放行

  在NODEB里測試

  結(jié)果也是一樣,設(shè)置了vxlan就可以2個宿主機的所有服務(wù)器進行通信。

  目前是2個節(jié)點的vxlan,如果是3個節(jié)點呢

  7、vxlan多節(jié)點應(yīng)用(超過2個節(jié)點)

  架構(gòu)圖為

  新節(jié)點是NODEC(ip是10.10.21.199)

  環(huán)境為

  部署單機環(huán)境,腳本內(nèi)容是

  運行腳本

  可以看到可以ping通本地的ovs2 的ip與交換機下面是ip

  可以看到能ping通NODEA(10.10.17.3)與NODEB(10.10.17.4)(em1網(wǎng)卡都是走物理交換機),但他們2個的ovs2都無法ping通

  下面是在NODEC(10.10.21.199)里與10.10.17.3做一個vxlan

  然后還需要在NODEA(10.10.17.3)里配置

之前在NODEA(10.10.17.3)里與NODE(10.10.17.4)做的vxlan使用vx1,這里NODEA(10.10.17.3)與NODEC(10.10.21.199)就使用vx2端口

  然后在NODEA(10.10.17.3)里ping NODEC(10.10.21.199)的ovs2 ip與交換機下面的ip

可以看到是通的

  在NODEC(10.10.21.199)里ping NODEA(10.10.17.3)的ovs2的ip與交換機下面的ip

也是通的,然后從NODEC(10.10.21.199) ping NODEB(10.10.17.4)的ovs2的ip與其交換機的ip

可以看到是通的,平均延遲0.608,并且可以發(fā)現(xiàn)使用了vxlan,3個節(jié)點,如果想全部互通,只需要2個線連接就行。

  如果使用gre模式,3個節(jié)點就需要3個線了,架構(gòu)圖為

目前使用docker結(jié)合openvswitch的vxlan模式就把多臺主機的docker連接起來,這樣很多測試就方便很多,但還是建議把這樣的方式作為測試環(huán)境。

  本文來源:吟—技術(shù)交流 的博客 原文鏈接:http://dl528888.blog.51cto.com/2382721/1611491

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號