ker系列(三)容器网络通信实验_第1页
ker系列(三)容器网络通信实验_第2页
ker系列(三)容器网络通信实验_第3页
ker系列(三)容器网络通信实验_第4页
ker系列(三)容器网络通信实验_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大话docker系列(三):容器网络通信实验sdn哪家强 15-02-09 5,911人围观1综述前文已经对docker的基本环境进行构建,本文主要通过实验验证docker的bridge网络 模式在宿主机内的容器间通信和利用open vswitch和docker的none网络模式实现跨宿 主机间的容器通信,从而加深对docker容器间网络通信的理解。2环境准备2.1操作系统shelld i/1 rootubuntu:# lsbjrelease2 no lsb modules are available.3 disiributor id: ubuntu4 description:ubuntu14

2、.04.1lts5 release: 14.046 codename: trusty注建议在ubuntul4.04.:l做下面的实验在ubuntu:l2.04.5下安装使用docker时比较麻烦。2.2主要组件用于完成下面实验的相关组件。2.2.1 dockerl.4使用最新版本dockerl.4 安装方法(以下安装使用均在root用户权限下完成):shelld 1j1 apt-get update2 apt-get install docker.io3 source /etc/bash_completion.d/docker.ioapt-key adv keyserver hkp:/:8()

3、-recv-keys436a1d7869245c8950f966e92d8576a8ba88d21e95sh -c hecho deb docker main6> /etc/apt/sourcesis(d/docker.lisl”7apt-gel update8apt-get install lxc-d(x:ker2.2.2 open vswitch2.3.0使用最新版本的openvswitch2.3.0安装方法:l自行获取官网的openvswitch2310.tar.gz包2. 开始安装shell_d_lji ./configure -with-linux=/lib/modulesf

4、uname -r'/build 2>/dev/null3 make install4 make modules_install5 /sbin/modprobe openvswilch6 mkdir p /usr/l(x:al/etc/openvswitch7 ovsdb-tool create /usr/local/ctc/opcnvswitch/conf.db8 vswitchd/vswitch.ovsschema9 ovsclb-server -remote=punix:/usr/iocal/var/run/openvswitch/db.sock 10 -remote=db:

5、open_vswitch,open_vswitch,manager_options 11 private-key=db:open_vswitch,ssl5private_key 12 -ccrtificatcdb:opcn_vswitch,ssl,certificate 13 -bootstrap-ca-cert=db:open_vswitch,ssl,ca_cert 14 -pidfile -detach15 ovs-vsctl -no-wait init16 ovs-vswitchd pidfile -detach23 ovs-dockerdocker公司开发的一款开源的工具脚本,用于简化

6、操作ovs和docker之间关联使用。类似工具还有pipworkoshell_d_lj1 wget 2 chmod a+x ovs-docker安装 pipeworkd i1 git clone 2 cp /pipcwork/pipcwork /usr/local/bin/3实验3.1宿主机内容器通信docker在启动容器时,如果不指定网络模式选项时,会创建名dockero的虚拟网桥,通过 该网桥实现与宿主机之间的通信。3.1.1实验目的验证在一个宿主机内部,容器1与容器2之间如何通信。3.1.2实验拓扑f1<)1dockero: 172.17.42.1host: 192.168.5.3

7、1c1etnu: 1/.1/c2 ettotzztt3.1.3实验方法假设你已经有ubuntul4的镜像如果没有可以通过docker pull ubuntu:latest下载一个。1. 启动容器cl :1 docker run -t -i name cl 192.168.5.31:5000/sdnpool/ubuntu 14.04:latest /bin/bash2查看docker默认的网桥分配的网卡信息root4c7ee3edl49e:/# ifconfigeth0link encap:ethernet hwaddr 02:42:ac:11:00:03tnet addr:172.17.0.3

8、 beast:0.0.0.0mask:255.255.0.0inet6 addr: fe80:42:acff:fell:3/64 scope:linkup broadcastrx packets:6tx packets:6running mtu:1566 errors:© dropped:© errors:© dropped:©metric:1 overruns:© frame:© overruns:© carrier:©collisions:© rx bytes:508txqueuelen:1000(5

9、08.0 b) tx bytes:508 (508.0 b)tolink encap:local loopbacktnet addr:127.0.0.1mask:255.o.o.0tnet6 addr: : :1/128 scope:hostup loopback running mtu:65536 metric:1rx packets:0 errors:© dropped:© overruns:0 frame:©tx packets:© errors:© dropped:© overruns:0 carrier:© col

10、lisions:© txqueuelen:©rx bytes:© (0.0 b) tx bytes:© (0.0 b)3. 启动容器c2 ,并关联容器cljink的别名为c2-clshellroote7528f4f21b3:/# tfconftg eth©link encap:ethernet hwaddr 02:42:ac:11:00:05tnet addr:172>17.0>5 beast:0.0-o>0 mask:255.255sotnet6 addr: fe80:42:acff:fell:5/64 scope:link

11、louprxtxbroadcast running mtu:1500 metric:1packets:6 packets:6collisions:© rx bytes:508errors:© dropped:© errors:© dropped:0overruns:© frame:© overruns:0 carrier:©txqueuelen:1000(508.0 b) tx bytes:508 (508.0 b)link encap:local loopbacktnet addr:127.0<0.1mask:255

12、.0.0.0tnet6 addr: :1/128 scope:host up loopback running mtu:65536rxtxpackets:© errors:© dropped:© packets:© errors:0 dropped:©overruns:6 frame:© overruns:0 carrier:©collisions:0 txqueuelen:©rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)4.验证在容器c2中ping容器cl的ip,可以互通roote75

13、28f4f21b3:/# ping 172.17.o.3ping 172.17.0.3 (172.17.0.3) 56(84) bytes of data. 6464646464bytes bytes bytes bytes bytesfrom from from from from172.17.0.3:172.17.6.3:172.17.0.3:172.17.0.3:172.17.0.3:ttl=64 ttl=64 ttl=64 ttl=64 ttl=64ttme=0.109 ms time=0.669 ms time=0.667 ms time=0.061 ms ttme=0.068 ms

14、在容器c2中,发现m/etc/hosts文件中写入了与cl的连接信息c2-cl :roote7528f4f21b3:/# cat /etc/hosts 172.17.0.5e7528f4f21b3127.0.0.1localhost:1 localhost tp6-localhost tp6loopback feo0:0 tp6-locainet ffoo:0 ip6-mcastpreftx ff02:1 tp6-allnodes ff02:2 tp6-allrouters172.17.0.3c2-c15. ping外网实验在容器c2中可直接ping外网,因为dockero作为各个容器的默认网

15、关,通过地址转换所 有的数据包都被转发到宿主机的etho网卡岀去了。root0e7528f4f21b3:/# ping data. ttme=136 ns ttme=136 ns ttme=136 msping (220.181.57.216) 56(84) bytes of64 bytes from 220.181 57216: tcmp_seq=l ttl=4964 bytes from 220.181.57.216: icmp_seq=2 ttl=4964 bytes from 220.181.57.216: icmp_seq=3 ttl=493.2跨宿主机容器通信 3.2.1实验验证利

16、用openvswitch的桥接+gre隧道实现容器间的跨宿主机通信。3.2.2实验拓扑3.2.3实验方法在主机host2上192.168.573做如下配置:shelld iy1 ovs-vsctladd-br tech-br2 ovs-vsctl add-port tcch-br tcpo - set interface tepo typc=intcrnal3 ifeonfig tepo 192.168.1.1netmask255.255.255.04 ovs-vsctladd-br sdn-bro5 ovsvsctlset bridge sdn-br()stp_enable=true6 ov

17、s-vsctl add-port sdn-bio greo set interface greo type=gre options:remote_ip= 192.168.5.312. 启动容器c3shell<i i/1 docker run -t -i -name c3 -net=none -privileged=true ubuntu:latest /bin/bash默认没有分配ip信息:ootfb700ea73293:/# tfconftgolink encap:local loopbacktnet addr:127.0.0.1mask:255.0.0.0tnet6 addr: :1

18、/128 scope:hostup loopback running mtu:65536 metric:1rx packets:© errors:© dropped:© overruns:0 frame:©tx packets:© errors:© dropped:© overruns:© carrier:© collisions:© txqueuelerx bytes:© (0.0 b) tx bytes:0 (0.0 b)分配容器c3的网络ip ,建立sdn-bro和容器的映射:s

19、hell1 pipework sdn-bro fb700ea73293 192.168.0.3/24rootgfb700ea73293:/# tfconftgethllink encap:ethernet hwaddr 56:c2:a7:61:d8:letnet addr:192.168.0.3 beast:0.0.0.0mask:255.255.255.0xnet6 addr: fe80:54c2:a7ff:fe61:d81e/64 scope:link up broadcast running multicast mtu:1560 metric:1rx packets:23 errors:

20、© dropped:© overruns:0 frame:© tx packets:8 errors:© dropped:© overruns:© carrier:© colltstons:0 txqueuelen:1000rx bytes:1428 (1.4 kb) tx bytes:648 (648.0 b)link encap:local loopbacktnet addr:127.0.0.1mask:255-0-oe0metrtc:loverruns:0 frame:© overruns:0 carrier

21、:©tnet6 addr: :1/128 scope:host up loopback running mtu:65536rx packets:0 errors:© dropped:© tx packets:© errors:© dropped:©colltstons:0 txqueuelen:©rx bytes:© (0.0 b) tx bytes:0 (0>0 b)3启动容器c4shelld 1j1 docker run -t i -name c4 -nct=nonc 一privileged二true u

22、buntu:latcst /bin/bashrootubuntu:-#docker ps -acontainer idimagecommandcreatednames509330e73275ubunm/bin/bash"49 seconds agoc4fb700ea73293ubuntu:14.64w/btn/bash"7 minutes agoc3shell1 pipework sdn-bro 509330e73275 192.168.0.4/24ootubuntu:# ovsvsttl show8615f94-6a6f-4809-af81-52c3a3dl60f0bri

23、dge tech-brport wtep0h interface mtep0w type: tnternalport tech-br interface tech-br type: tnternalbridge hsdn-br0*'port "sdn-bre" interface msdn-bro" type: internalport hvethlpl5575" interface mvethlpl5575"port "gree"interface "gre0h type: gre options: re

24、mote_tp=”192168.5.31"port hvethlpl5339"interface mvethlpl5339"4在主机hostl配置192.168.531 f通主机host2方法一样shelld 1jovs-vsctl add-br tech-br1ovs-vsctl add-port tcch-br tcpo set interface tcpo typc=intcrnal2ifeonfig tepo 192.168.1.2 netmask 255.255.255.03ovs-vsctl add-br sdn-bro4ovs-vsctl set b

25、ridge sdn-bro stp_enable=true5ovs-vsctl add-port sdn-bio greo set interface greo type=gre options:remote_ip= 192.168.5.736docker run -t -i -name cl -nct=nonc -privilcgcd=truc 192168531:500()/sdnpool/iibiinitul404:lihcst3 /bin/bash4 docker run -l -i -name c2 -net=none -privileged=true 192.168.5.3 l:5

26、000/sdnpool/ubum(ul4.04:lalesl/bin/bashdockeryanjw-opttplex-390:*$ docker ps container idimageports441ce7ecf5cfd341b3915d29names192.168.5.31:5000/sd叩ool/ubuntul404:latest c2192.168.5.31:500o/sdnpool./ubuntul4.04:latest clcommandm/bin/bem/btn/bcshelld i/1 pipework sdn-bro 44 ice7ecf5cf 192.168.0.2/24

27、2 pipework sdn-bro d341b3915d29 192.168.0.1/24dockeryanjw0pttplex390:$ sudo ovsvsctl show 412f4225-bfl7-4bf3-879b-a92e7f84cf2bbridge tech-brport tech-brinterface tech-br type: tnternal port ”tepo”interface mtep0h type: internalbridge hsdn-br6nport hvethlpll7184hinterface "vethlpl.l7184,'por

28、t "vethlpi17228winterface wvethlpll7228m port "sdn-bro"interface hsdn-bro" type: internal port mgreominterface mgre0"type: gre options: remotestp=m192.168573”5. 验证结果容器2 : 192.168.0.2分别ping容器1 ,容器3 ,容器4均可通。bytes of data ttl=64 ttme=0.331 ms ttl=64 ttme=0.231 msroot441ce7ecf5c

29、f:/# ping 192.168.0.1ping 192.168.0.1 (192.168.0.1) 56(84) 64 bytes from 192.168.0.1: tcmp_seq=l 64 bytes from 192.168.0.1: icmp_seq=2 192.168.0.1 ping statistics 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt mtn/avg/max/mdev = 0.231/0.281/0.331/0.050 ms root441ce7ecf5cf:/# ping

30、 192.168.0.3ping 192:16803 (192 16863) 56(84) bytes of data54 bytes from 192.168.0.3: tcmp_seq=l ttl=64 ttme=1.88 ms64 bytes from 192.168.0.3: tcmp_seq=2 ttl=64 ttme=0.902 ms 192.168.0.3 ping statistics 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt mtn/avg/max/mdev = 0.902/1.395

31、/1.889/0.494 msroot441ce7ecf5cf:/# ping 192.168.0.4ping 192.168.0.4 (192.168.0.4) 56(84) bytes of data.64 bytes from 192.168.0.4: tcmp_seq=l ttl=64 ttme=1.32 ms54 bytes from 19216804: tcmp_seq=2 ttl=64 ttme=0697 msy一 192.168.0.4 ping statistics 八2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt mtn/avg/max/mdev = 0.697/1.010/1.324/0.315 ms6. 使用sdn控制器floodlight管理上面的docker容器集群在主机hostl上的sdn-bro设置连接控制器:shell<1 11 ovs-vsctl set-controller sdn-bro tcp: 192.168.5.31:6633在容器做互ping操作,可让floodlight拓扑发现这些容器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论