设为首页 收藏本站
查看: 942|回复: 0

[经验分享] docker高级应用之多台主机网络互联

[复制链接]

尚未签到

发表于 2015-10-13 09:46:29 | 显示全部楼层 |阅读模式
  转载:http://dl528888.blog.iyunv.com/2382721/1611491
  
先看一个使用openvswitch连接的架构图,连接的方式是vxlan
说明:
docker是1.3.2版本,存储引擎是devicemapper。
然后2台主机使用vxlan连接网络。
我个人认为使用这个模式并且指定固定ip,适用于的环境主要是给研发或者个人的测试模式,如果是集群环境,没必要指定固定ip(我这里的集群就没有使用固定ip,使用动态ip,效果很好,后续给大家介绍集群)。
环境

一、安装openvswitch
1、安装基础环境

123yum install gcc make python-devel openssl-devel kernel-devel graphviz \   kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \   libtool3、解压与打包
12345tar zxvf openvswitch-2.3.1.tar.gzmkdir -p ~/rpmbuild/SOURCEScp openvswitch-2.3.1.tar.gz ~/rpmbuild/SOURCES/sed 's/openvswitch-kmod, //g' openvswitch-2.3.1/rhel/openvswitch.spec > openvswitch-2.3.1/rhel/openvswitch_no_kmod.specrpmbuild -bb --without check openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec安装第一个就行
5、启动
1systemctl start openvswitch具体的安装详细步骤可以参考
二、部署单机环境的docker
使用这个软件进行固定ip设置
12cd /tmp/git clone https://github.com/jpetazzo/pipework.git可以把下面内容复制到脚本里运行
123456789101112131415161718192021222324#!/bin/bash#author: Deng Lei#email: dl528888@gmail.com#删除docker测试机docker rm `docker stop $(docker ps -a -q)`#删除已有的openvswitch交换机ovs-vsctl list-br|xargs -I {} ovs-vsctl del-br {}#创建交换机ovs-vsctl add-br ovs1ovs-vsctl add-br ovs2#把物理网卡加入ovs2ovs-vsctl add-port ovs1 em1ip link set ovs1 upifconfig em1 0ifconfig ovs1 10.10.17.3ip link set ovs2 upip addr add 172.16.0.3/16 dev ovs2 pipework_dir='/tmp/pipework'docker run --restart always --privileged -d  --net="none" --name='test1' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test1 172.16.0.5/16@172.16.0.3 docker run --restart always --privileged -d  --net="none" --name='test2' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test2 172.16.0.6/16@172.16.0.3运行脚本
123456789[iyunv@docker-test3 tmp]# sh openvswitch_docker.sh5a1139276ccd03d866e20f586352f9ecd69450e332a13ec5dfecba106e58cf2a301e9b539a7e690cd61934f78e294816e5225dbee7e8442be1d9d5b4c6072d935b68e332b84196ea1db6f07c[iyunv@docker-test3 tmp]# docker ps -aCONTAINER ID        IMAGE                                          COMMAND                CREATED             STATUS              PORTS               NAMES8e294816e522        docker.ops-chukong.com:5000/centos6-http:new   "/usr/bin/supervisor   3 seconds ago       Up 2 seconds                            test26352f9ecd694        docker.ops-chukong.com:5000/centos6-http:new   "/usr/bin/supervisor   3 seconds ago       Up 3 seconds                            test1下面从本地登陆指定的ip试试
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354[iyunv@docker-test3 tmp]# ssh 172.16.0.5The authenticity of host '172.16.0.5 (172.16.0.5)' can't be established.RSA key fingerprint is 39:7c:13:9f:d4:b0:d7:63:fc:ff:ae:e3:46:a4:bf:6b.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '172.16.0.5' (RSA) to the list of known hosts.root@172.16.0.5's password:Last login: Mon Nov 17 14:10:39 2014 from 172.17.42.1root@6352f9ecd694:~18:57:50 # ifconfigeth1      Link encap:Ethernet  HWaddr 26:39:B1:88:25:CC          inet addr:172.16.0.5  Bcast:0.0.0.0  Mask:255.255.0.0          inet6 addr: fe80::2439:b1ff:fe88:25cc/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:65 errors:0 dropped:6 overruns:0 frame:0          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:8708 (8.5 KiB)  TX bytes:5992 (5.8 KiB) lo        Link encap:Local Loopback          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING  MTU:65536  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) root@6352f9ecd694:~18:57:51 # ping 172.16.0.6 -c 2PING 172.16.0.6 (172.16.0.6) 56(84) bytes of data.64 bytes from 172.16.0.6: icmp_seq=1 ttl=64 time=0.433 ms64 bytes from 172.16.0.6: icmp_seq=2 ttl=64 time=0.040 ms --- 172.16.0.6 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1000msrtt min/avg/max/mdev = 0.040/0.236/0.433/0.197 msroot@6352f9ecd694:~18:58:03 # ping 172.16.0.3 -c 2PING 172.16.0.3 (172.16.0.3) 56(84) bytes of data.64 bytes from 172.16.0.3: icmp_seq=1 ttl=64 time=0.369 ms64 bytes from 172.16.0.3: icmp_seq=2 ttl=64 time=0.045 ms --- 172.16.0.3 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 999msrtt min/avg/max/mdev = 0.045/0.207/0.369/0.162 msroot@6352f9ecd694:~18:58:09 # ping www.baidu.com -c 2PING www.a.shifen.com (180.149.131.205) 56(84) bytes of data.64 bytes from 180.149.131.205: icmp_seq=1 ttl=54 time=1.83 ms64 bytes from 180.149.131.205: icmp_seq=2 ttl=54 time=1.81 ms --- www.a.shifen.com ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1003msrtt min/avg/max/mdev = 1.816/1.827/1.839/0.044 ms下面进行vxlan测试,需要现在另外一个物理宿主机进行上面的脚本安装,然后在进行vxlan配置
脚本内容是

123456789101112131415161718192021222324#!/bin/bash#author: Deng Lei#email: dl528888@gmail.com#删除docker测试机docker rm `docker stop $(docker ps -a -q)`#删除已有的openvswitch交换机ovs-vsctl list-br|xargs -I {} ovs-vsctl del-br {}#创建交换机ovs-vsctl add-br ovs1ovs-vsctl add-br ovs2#把物理网卡加入ovs2ovs-vsctl add-port ovs1 em1ip link set ovs1 upifconfig em1 0ifconfig ovs1 10.10.17.4ip link set ovs2 upip addr add 172.16.0.4/16 dev ovs2 pipework_dir='/tmp/pipework'docker run --restart always --privileged -d  --net="none" --name='test1' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test1 172.16.0.8/16@172.16.0.4 docker run --restart always --privileged -d  --net="none" --name='test2' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test2 172.16.0.9/16@172.16.0.4登陆分别的固定ip试试
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253[iyunv@docker-test4 tmp]# ssh 172.16.0.8The authenticity of host '172.16.0.8 (172.16.0.8)' can't be established.RSA key fingerprint is 39:7c:13:9f:d4:b0:d7:63:fc:ff:ae:e3:46:a4:bf:6b.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '172.16.0.8' (RSA) to the list of known hosts.root@172.16.0.8's password:Last login: Mon Nov 17 14:10:39 2014 from 172.17.42.1root@a10c7b6f1141:~18:45:05 # ifconfigeth1      Link encap:Ethernet  HWaddr CA:46:87:58:6C:BF          inet addr:172.16.0.8  Bcast:0.0.0.0  Mask:255.255.0.0          inet6 addr: fe80::c846:87ff:fe58:6cbf/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:75 errors:0 dropped:2 overruns:0 frame:0          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:10787 (10.5 KiB)  TX bytes:5992 (5.8 KiB) lo        Link encap:Local Loopback          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING  MTU:65536  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) root@a10c7b6f1141:~18:45:06 # ping 172.16.0.9PING 172.16.0.9 (172.16.0.9) 56(84) bytes of data.64 bytes from 172.16.0.9: icmp_seq=1 ttl=64 time=0.615 ms^C--- 172.16.0.9 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 531msrtt min/avg/max/mdev = 0.615/0.615/0.615/0.000 msroot@a10c7b6f1141:~18:45:10 # ping 172.16.0.4PING 172.16.0.4 (172.16.0.4) 56(84) bytes of data.64 bytes from 172.16.0.4: icmp_seq=1 ttl=64 time=0.270 ms^C--- 172.16.0.4 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 581msrtt min/avg/max/mdev = 0.270/0.270/0.270/0.000 msroot@a10c7b6f1141:~18:45:12 # ping www.baidu.com -c 2PING www.a.shifen.com (180.149.131.236) 56(84) bytes of data.64 bytes from 180.149.131.236: icmp_seq=1 ttl=54 time=1.90 ms64 bytes from 180.149.131.236: icmp_seq=2 ttl=54 time=2.00 ms --- www.a.shifen.com ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1003msrtt min/avg/max/mdev = 1.900/1.950/2.000/0.050 msroot@a10c7b6f1141:~然后在试试能否ping通对方的em1网卡与对方ovs2的ip
能ping通自己的em1与10.10.17.4的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通
结果也是一样,能ping通自己的em1与NODEA(10.10.17.3)的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通
在NODEA里运行
12345678910111213141516171819202122ovs-vsctl add-port ovs2 vx1 -- set interface vx1 type=vxlan options:remote_ip=10.10.17.4[iyunv@docker-test3 tmp]# ovs-vsctl showd895d78b-8c89-49bc-b429-da6a4a2dcb3a    Bridge "ovs1"        Port "em1"            Interface "em1"        Port "ovs1"            Interface "ovs1"                type: internal    Bridge "ovs2"        Port "veth1pl15561"            Interface "veth1pl15561"        Port "veth1pl15662"            Interface "veth1pl15662"        Port "vx1"            Interface "vx1"                type: vxlan                options: {remote_ip="10.10.17.4"}        Port "ovs2"            Interface "ovs2"                type: internal    ovs_version: "2.3.1"现在NODEA与NODEB这2台物理机的网络都是互通的,容器的网络也是互通。
可以看到可以在NODEA(10.10.17.3)里ping通NODEB(10.10.17.4)的ovs2 ip与交换机下面的容器ip
在NODEB里测试
12345678910111213141516171819202122232425262728293031[iyunv@docker-test4 tmp]# ssh 172.16.0.8root@172.16.0.8's password:Last login: Tue Feb  3 18:59:35 2015 from 172.16.0.4root@a10c7b6f1141:~19:08:08 # ping 172.16.0.3 -c 2PING 172.16.0.3 (172.16.0.3) 56(84) bytes of data.64 bytes from 172.16.0.3: icmp_seq=1 ttl=64 time=1.48 ms64 bytes from 172.16.0.3: icmp_seq=2 ttl=64 time=0.289 ms --- 172.16.0.3 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1002msrtt min/avg/max/mdev = 0.289/0.889/1.489/0.600 msroot@a10c7b6f1141:~19:08:13 # ping 172.16.0.5 -c 2PING 172.16.0.5 (172.16.0.5) 56(84) bytes of data.64 bytes from 172.16.0.5: icmp_seq=1 ttl=64 time=1.27 ms64 bytes from 172.16.0.5: icmp_seq=2 ttl=64 time=0.289 ms --- 172.16.0.5 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1001msrtt min/avg/max/mdev = 0.289/0.783/1.277/0.494 msroot@a10c7b6f1141:~19:08:16 # ping 172.16.0.6 -c 2PING 172.16.0.6 (172.16.0.6) 56(84) bytes of data.64 bytes from 172.16.0.6: icmp_seq=1 ttl=64 time=1.32 ms64 bytes from 172.16.0.6: icmp_seq=2 ttl=64 time=0.275 ms --- 172.16.0.6 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1001msrtt min/avg/max/mdev = 0.275/0.800/1.326/0.526 msroot@a10c7b6f1141:~目前是2个节点的vxlan,如果是3个节点呢
架构图为
环境为
部署单机环境,脚本内容是
123456789101112131415161718192021222324#!/bin/bash#author: Deng Lei#email: dl528888@gmail.com#删除docker测试机docker rm `docker stop $(docker ps -a -q)`#删除已有的openvswitch交换机ovs-vsctl list-br|xargs -I {} ovs-vsctl del-br {}#创建交换机ovs-vsctl add-br ovs1ovs-vsctl add-br ovs2#把物理网卡加入ovs2ovs-vsctl add-port ovs1 em1ip link set ovs1 upifconfig em1 0ifconfig ovs1 10.10.21.199ip link set ovs2 upip addr add 172.16.0.11/16 dev ovs2 pipework_dir='/tmp/pipework'docker run --restart always --privileged -d  --net="none" --name='test1' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test1 172.16.0.12/16@172.16.0.11 docker run --restart always --privileged -d  --net="none" --name='test2' docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord$pipework_dir/pipework ovs2 test2 172.16.0.13/16@172.16.0.11可以看到可以ping通本地的ovs2 的ip与交换机下面是ip
12345678910111213141516171819202122232425262728293031323334353637root@c014d4721286:~19:17:26 # ping 10.10.17.3 -c 2PING 10.10.17.3 (10.10.17.3) 56(84) bytes of data.64 bytes from 10.10.17.3: icmp_seq=1 ttl=63 time=0.418 ms64 bytes from 10.10.17.3: icmp_seq=2 ttl=63 time=0.213 ms --- 10.10.17.3 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1000msrtt min/avg/max/mdev = 0.213/0.315/0.418/0.104 msroot@c014d4721286:~19:18:05 # ping 10.10.17.4 -c 2PING 10.10.17.4 (10.10.17.4) 56(84) bytes of data.64 bytes from 10.10.17.4: icmp_seq=1 ttl=63 time=0.865 ms64 bytes from 10.10.17.4: icmp_seq=2 ttl=63 time=0.223 ms --- 10.10.17.4 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1000msrtt min/avg/max/mdev = 0.223/0.544/0.865/0.321 msroot@c014d4721286:~19:18:08 # ping 172.16.0.3 -c 2PING 172.16.0.3 (172.16.0.3) 56(84) bytes of data.From 172.16.0.12 icmp_seq=1 Destination Host UnreachableFrom 172.16.0.12 icmp_seq=2 Destination Host Unreachable --- 172.16.0.3 ping statistics ---2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 3006mspipe 2root@c014d4721286:~19:18:19 # ping 172.16.0.4 -c 2PING 172.16.0.4 (172.16.0.4) 56(84) bytes of data.From 172.16.0.12 icmp_seq=1 Destination Host UnreachableFrom 172.16.0.12 icmp_seq=2 Destination Host Unreachable --- 172.16.0.4 ping statistics ---2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 3004mspipe 2root@c014d4721286:~下面是在NODEC(10.10.21.199)里与10.10.17.3做一个vxlan
123456789101112131415161718192021222319:19:22 # ovs-vsctl add-port ovs2 vx1 -- set interface vx1 type=vxlan options:remote_ip=10.10.17.3root@docker-test1:/tmp19:20:01 # ovs-vsctl show96259d0f-b794-49fd-81fb-3251ede9c2a5    Bridge "ovs2"        Port "veth1pl30126"            Interface "veth1pl30126"        Port "vx1"            Interface "vx1"                type: vxlan                options: {remote_ip="10.10.17.3"}        Port "veth1pl30247"            Interface "veth1pl30247"        Port "ovs2"            Interface "ovs2"                type: internal    Bridge "ovs1"        Port "ovs1"            Interface "ovs1"                type: internal        Port "em1"            Interface "em1"    ovs_version: "2.3.1"之前在NODEA(10.10.17.3)里与NODE(10.10.17.4)做的vxlan使用vx1,这里NODEA(10.10.17.3)与NODEC(10.10.21.199)就使用vx2端口
可以看到是通的
也是通的,然后从NODEC(10.10.21.199) ping NODEB(10.10.17.4)的ovs2的ip与其交换机的ip
1234567891011121314151617root@docker-test1:/tmp19:55:05 # ping -c 10 172.16.0.4PING 172.16.0.4 (172.16.0.4) 56(84) bytes of data.64 bytes from 172.16.0.4: icmp_seq=1 ttl=64 time=1.99 ms64 bytes from 172.16.0.4: icmp_seq=2 ttl=64 time=0.486 ms64 bytes from 172.16.0.4: icmp_seq=3 ttl=64 time=0.395 ms64 bytes from 172.16.0.4: icmp_seq=4 ttl=64 time=0.452 ms64 bytes from 172.16.0.4: icmp_seq=5 ttl=64 time=0.457 ms64 bytes from 172.16.0.4: icmp_seq=6 ttl=64 time=0.461 ms64 bytes from 172.16.0.4: icmp_seq=7 ttl=64 time=0.457 ms64 bytes from 172.16.0.4: icmp_seq=8 ttl=64 time=0.428 ms64 bytes from 172.16.0.4: icmp_seq=9 ttl=64 time=0.492 ms64 bytes from 172.16.0.4: icmp_seq=10 ttl=64 time=0.461 ms --- 172.16.0.4 ping statistics ---10 packets transmitted, 10 received, 0% packet loss, time 9000msrtt min/avg/max/mdev = 0.395/0.608/1.995/0.463 ms如果使用gre模式,3个节点就需要3个线了,架构图为
目前使用docker结合openvswitch的vxlan模式就把多台主机的docker连接起来,这样很多测试就方便很多,但还是建议把这样的方式作为测试环境。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126151-1-1.html 上篇帖子: Docker安装及其应用部署 下篇帖子: CentOS7.0部署Docker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表