11 Docker Multi-host Network

Docker 多主机网络使用基于VXLAN解决方案在libnetwork和libkv库的基础上,所以这个重叠网络需要一个有效的键-值存储服务在不同docker间交换信息。Docker执行内建的在libnetwork库中基于VXLAN重叠网络驱动来支持不同主机间大范围的虚拟网络。

环境准备
在用Docker重叠网络前,检查docker版本使用docker -v 来确认docker版本不小于1.9。在这里我们准备的环境有两个Linux节点Node1:192.168.56.10
Node2:192.168.56.20,确保它们可以互相访问,修改两个节点的主机名分别为nod1 nod2 。
下载etcd

$ curl -L  https://github.com/coreos/etcd/releases/download/v2.3.6/etcd-v2.3.6-linux-amd64.tar.gz -o etcd-v2.3.6-linux-amd64.tar.gz
$ tar zxvf etcd-v2.3.6-linux-amd64.tar.gz
$ cd etcd-v2.3.6-linux-amd64/

NODE1

./etcd -name node1 -initial-advertise-peer-urls http://192.168.56.10:2380 \-listen-peer-urls http://0.0.0.0:2380 \-listen-client-urls http://0.0.0.0:2379,http://127.0.0.1:4001 \-advertise-client-urls http://0.0.0.0:2379 \-initial-cluster-token etcd-cluster \-initial-cluster node1=http://192.168.56.10:2380,node2=http://192.168.56.20:2380 \-initial-cluster-state new

NODE2

./etcd -name node2 -initial-advertise-peer-urls http://192.168.56.20:2380 \-listen-peer-urls http://0.0.0.0:2380 \-listen-client-urls http://0.0.0.0:2379,http://127.0.0.1:4001 \-advertise-client-urls http://0.0.0.0:2379 \-initial-cluster-token etcd-cluster \-initial-cluster node1=http://192.168.56.10:2380,node2=http://192.168.56.20:2380 \-initial-cluster-state new

带集群参数启动Docker
Docker进程被启动带有集群参数 --cluster-store--cluster-advertise,因此所有运行在不同节点上的Docker能互相通信与合作。这里我们需要设置
--cluster-store带有服务主机和端口,--ccluster-advertise带有IP和本地点Docker进程端口号,停止当前docker进程并带有新的参数启动。
Node1

$ sudo service docker stop
$ sudo /usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.56.10:2379 --cluster-advertise=192.168.56.10:2375

Node2

$ sudo service docker stop
$ sudo /usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.56.20:2379 --cluster-advertise=192.168.56.20:2375

创建重叠网络
在每一个节点上执行 docker network ls 查看Docker的网络配置。

$ docker network  ls
NETWORK ID          NAME                DRIVER
342b9356834a        bridge              bridge
abacbe015164        host                host
286a63691e10        none                null  

接下来我们使用 docker network 命令来创建一个新的重叠网络

$ sudo docker network create -d overlay myapp
等 一分钟 后我们执行docker network ls 命令

 docker network ls
NETWORK ID          NAME                DRIVER
342b9356834a        bridge              bridge
d32569139ea9        docker_gwbridge     bridge
abacbe015164        host                host
7898d5978de9        myapp               overlay
286a63691e10        none                null  

在节点node1和node2上,两个网络 myapp 和 docker_gwbridge 被添加,类型分别是 overlay 和 bridge。因此 myapp 在容器中代表重叠网络关联到eth0,
docker_gwbridge代表桥接网络连接互联网在容器里关联到eth1。

创建带有重叠网络的容器
Node1:

ubuntu@node1:~$ docker run -itd –name=worker1 –net=myapp ubuntu:14.04

Node2:

ubuntu@node2:~$ docker run -itd –name=worker2 –net=myapp ubuntu:14.04

测试两个容器的网络连接
Node1:

ubuntu@node1:~$ docker exec worker1 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:0a:00:00:04  inet addr:10.0.0.4  Bcast:0.0.0.0  Mask:255.255.255.0inet6 addr: fe80::42:aff:fe00:4/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1RX packets:14 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:1116 (1.1 KB)  TX bytes:648 (648.0 B)eth1      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02  inet addr:172.18.0.2  Bcast:0.0.0.0  Mask:255.255.0.0inet6 addr: fe80::42:acff:fe12:2/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:648 (648.0 B)  TX bytes:648 (648.0 B)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

我们可以看到在容器里的两块网卡,IP是10.0.0.4 和 172.18.0.2 。eth0 连接到重叠网络,eth1 连接到 docker_gwbridge。因此在不同主机上的容器可以互相访问 ,在 node2 上运行相同的命令,eth0的ip 是10.0.0.5。
测试在worker1 和 worker2的连接。

ubuntu@node1:~$ docker exec worker1 ping -c4 10.0.0.5
]PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.914 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.895 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=0.835 ms
64 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=0.808 ms--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.808/0.863/0.914/0.043 ms

性能测试
在Node1和Node2上测试本地网络性能

$ sudo iperf  -c 192.168.56.10
------------------------------------------------------------
Client connecting to 192.168.56.10, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 192.168.56.10 port 45209 connected with 192.168.56.10 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  18.7 GBytes  16.1 Gbits/sec

在容器work1 和work2上测试

root@f8689ceade86:/# iperf -c 10.0.0.5
------------------------------------------------------------
Client connecting to 10.0.0.5, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  4] local 10.0.0.5 port 5001 connected with 10.0.0.5 port 55698
[  3] local 10.0.0.5 port 55698 connected with 10.0.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  18.3 GBytes  15.7 Gbits/sec
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  18.3 GBytes  15.7 Gbits/sec

重叠网络性能比本地网络差一些,比Calico也差一些,Calico跟本地网络性能几乎一样,因为Calico使用一个纯3层协议,Docker多主机重叠网络使用VXLAN解决方案(MAC on UDP),Calico能获得比较好的性能也是有道理的。

VXLAN技术
Virtual Extensible LAN(VXLAN)是一种网络虚拟机技术,试图改进在大的云计算部署中关于可扩展性的问题。它使用类似VLAN的封装技术,封装
基于MAC的OSI二层以太网帧到四层的UDP包中。Open vSwitch实现了VXLAN,Docker是在libnetwork中完成内置的VXLAN驱动。

Docker 网络(十一)——Docker Multi-host Network相关推荐

  1. Docker 学习笔记 - 进阶四 Docker网络和 Docker compose

    Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...

  2. docker网络连接——docker network connect命令

    博客作为学习笔记记录,若有理解或表述错误,欢迎指出 docker network connect 命令是用于将docker容器连接到某个网络中,或者与其他容器建联,容器可以使用容器名或者容器ID. 用 ...

  3. Docker(二十一)--Docker k8s--Kubernetes存储--Volumes配置管理--持久卷--动态静态分配

    目录 1. 简介 2. NFS PV示例(静态分配) 2.1.保证环境的干净 2.2 创建所需资源 2.3 书写pv,pvc,pod文件并进行测试 2.3.1 创建pv 2.3.2 创建pvc和pod ...

  4. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  5. Docker 网络之进阶篇

    笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...

  6. docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置

    本文是<Docker必知必会系列>第四篇,原文发布于个人博客:悟尘纪. 上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库 Docke ...

  7. Docker学习四:Docker 网络

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  8. Docker系列文-----Docker的网络类型(4)

    Docker系列文-----Docker的网络类型(4) Docker里的常见文件及作用 Docker 内部的网络类型 1.桥接模式(默认): 2.host模式: 3.container模式 4.no ...

  9. Docker复习07——Docker 网络

    文章目录 Docker 网络 常用命令 bridge host none container 自定义网络 Docker 网络 为了通信 为了容器互联 启动docker 查看网络 发现多出来一个dock ...

  10. Docker学习(五):Docker网络

    Docker网络 1. docker network命令 #查看docker网络 docker network ls #帮助命令 docker network --help #创建网络 docker ...

最新文章

  1. 数学建模——TOPSIS综合评价模型Python代码
  2. 【SSM】基于注解@Controller的控制器
  3. UML学习——类图(三)
  4. Quasar和Akka –比较
  5. python 打造一个sql注入脚本 (一)
  6. android cmake 打印_Android使用CMAKE编译libjpeg
  7. linux添加nginx,linux下安装Nginx1.16.0的教程详解
  8. 开源GIS(三)——openlayers地图基本框架与天地图加载
  9. BAT脚本每隔30秒创建一个512兆文件(测试磁盘监控用)
  10. 【Tableau Desktop 企业日常技巧12】Tableau CA或者CDA 考试真题(附带国外面试题目)
  11. SRCNN:基于深度学习的超分辨率开山之作回顾
  12. pageoffice
  13. ubuntu开机桌面不显示
  14. 安焦删除贴 牛人纷纷出现(2)
  15. 2017NHOI小甲 第五题 折纸
  16. 树莓派Remote GPIO启用方法
  17. 通过电阻色环识别(固定)电阻阻值的方法
  18. Fumark支持SLI双卡测试设置
  19. js复制图片文字图文分享到微信/QQ,插件clipboard.js的应用案例
  20. ⑰霍兰德EI*如何选选专业?高考志愿填报选专业

热门文章

  1. 韩国商业网站界面设计分析------推荐2005-5-24 出处:vipcn.com
  2. 快应用开发中常见的几个版本号~~
  3. 超级微商系统开发,社交电商3.0时代的概念
  4. 建立枚举类型Weekday,假设今日为星期二,计算10天后为星期几。
  5. 共享企业文化造就企业明天
  6. 解决dell 15R 双显卡笔记本桌面右键点击反应慢的问题
  7. 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
  8. 2022最新微信小程序常见面试题总结
  9. 微信支付-当前页面的URL未注册
  10. .net 本地文件管理 代码_如何在百万行代码中发现隐藏的后门