前面各个小节我们学习了 Docker Overlay 、Macvlan 、Flannel、Weave 、Calico几种跨主机网络方案。目前这个领域是百家争鸣,而且还有新的方案不断涌现。
 
本节将从不同维度比较各种网络方案,大家在选择的时候可以参考。其实没有最好的选择,只有最合适的选择,先明确自己的需求。
 
Docker 起初只提供了简单的single-host网络,显然这不利于Docker构建容器集群并通过scale-out方式横向扩展到多个主机上。
 
在市场需求的推动下,跨主机容器网络技术开始发展。这是一个非常活跃的技术领域,在不长的时间里已经涌现了很多优秀的方案。
 
本章我们详细的学习了几种主流的方案 Docker Overlay 、Macvlan 、Flannel、Weave 、Calico ,下面将从几个方面比较各种方案的特点、优势,选择出最适合我们的方案。
 
网络模型
 
    采用何种网络模型支持 multi-host 网络?
 
    跨主机网络意味着将不同主机上的容器用同一个虚拟网络连接起来。这个虚拟网络的拓扑结构和实现技术就是网络模型。
 
    Docker overlay 如名称所示,是overlay网络,建立主机间vxlan隧道,原始数据包在发送端被封装成vxlan数据包,到达目的后在接收端解包。
 
    Macvlan 网络在二层上通过vlan连接容器,在三层上依赖外部网关连接不同的macvlan。数据包直接发送,不需要封装,属于 underlay网络。
 
    Flannel 我们讨论了两种backend:vxlan和host-gw 。vxlan 与 Docker overlay类似,属于overlay网络。
 
    Weave 是vxlan实现,属于overlay网络
 
    各种方案的网络模型描述如下:
 
 
 
Distributed Store
 
    是否需要etcd 或者 consul 这类分布式 key-value 型数据库存储网络信息?
 
    Docker Overlay、Flannel 和 Calico 都需要etcd或者consul。Macvlan是简单的local网络,不需要保存和共享网络信息。Weave自己负责在主机间交换网络配置信息,也不需要Distributed Store 。
 
 
 
IPMA
 
    如何管理容器网络的IP?
 
    Docker Overlay 网络中所有主机共享同一个subnet,容器启动时会顺序分配IP,可以通过 --subnet 定制此IP池。
 
    Macvlan 需要用户自己管理subnet,为容器分配IP,不同subnet通信依赖外部网关
 
    Flannel 为每个主机自动分配独立的subnet,用户只需要指定一个大的IP池,不同subnet之间的路由信息也有Flannel自动生成和配置
 
    Weave 的默认配置下所有容器 10.32.0.0/12 subnet,如果此地址空间与现有IP冲突,可以通过 --ipalloc-range 分配特定的subnet
 
    Calico 从IP Pool(可定制)中为每个主机分配自己的subnet。
 
 
 
连通与隔离
 
    提供怎样的网络连通性?支持容器间哪个级别和哪个类型的隔离?
 
    同一 Docker Overlay 网络中的容器可以通信,但不同网络之间无法通信,要实现跨网络访问,只有奖容器加入多个网络。与外网通信可通过 docker_gwbridge网络。
 
    Macvlan 网络的连通性或隔离完全取决于二层vlan和三层路由
 
    不同Flannel网络中的容器可以直接通信,没有提供隔离。与外网通信可以通过bridge网络。
 
    Weave网络默认配置下所有容器在一个大的subnet中,可以自由通信,如果需要实现隔离,需要为容器指定不同的subnet或者ip。与外网通信的方式是将主机加入到Weave网络,把主机当做网关。
 
    Calico默认配置下只允许位于同一网络中的容器之间通信,但通过其强大的policy能够实现几乎任意场景的访问控制。
 
 
性能
 
    性能比较
 
    性能测试是一个非常严谨和复杂的工程,这里我们只尝试从技术方案的原理上比较各种方案的性能。
 
    最朴素的判断是:Underlay 网络性能优于 Overlay 网络
 
    Overlay 网络利用隧道技术,将数据包封装到UDP中进行传输,因为涉及数据包的封装和解封,存在额外的CPU和网络开销。
 
    虽然几乎所有Overlay网络方案底层都采用linux kernel 的vxlan模块,这样可以尽量减少开销,但这个开销与Underlay网络相比还是存在的。
 
    所以Macvlan、Flannel host-gw、Calico的性能会由于Docker Overlay、Flannel vxlan 和 Weave
 
    Overlay 较 Underlay 可以支持更多的二层网段,能更好的利用已有网络,以及避免物理交换机MAC表耗尽等优势,所有在方案选型的时候要综合考虑。
 
 

072、一文搞懂各种Docker网络 (2019-04-17 周三)的更多相关文章

  1. 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络

    Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ...

  2. 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)

    前面各小节我们先后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案.目前这个领域是百家争鸣,而且还有新的方案不断涌现. 本节将从不同维 ...

  3. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

  4. 三文搞懂学会Docker容器技术(下)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...

  5. 三文搞懂学会Docker容器技术(上)

    1,Docker简介 1.1 Docker是什么? Docker官网: https://www.docker.com/ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2. ...

  6. 基础篇|一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  7. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  8. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  9. 一文搞懂 Prometheus 的直方图

    原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...

随机推荐

  1. django 时区和系统(ubuntu)时区修改

    django时区默认使用UTC,中国人使用CST东八区. settings.py改为上海时区 #settings.py TIME_ZONE = 'Asia/Shanghai' # True:使用UTC ...

  2. SQL ----post漏洞测试注入

    使用工具sqlmap 输入账号密码进行bp截断,获取文本保存在sqlmap下面2.txt 爆数据库 爆表爆表 爆数据 最后把数据密码md5解析

  3. Jquery消息提示插件toastr使用详解

    toastr是一个基于jQuery简单.漂亮的消息提示插件,使用简单.方便,可以根据设置的超时时间自动消失. 1.使用很简单,首选引入toastr的js.css文件 html <script s ...

  4. Java基础系列--02_运算符和程序的语句

    运算符: (1)算术运算符: +,-,*,/,%,++,--(加.减.乘.除.取余.自增,自减) ++和--的注意事项: a:他们的作用是自增或者自减 b:使用 1.单独使用 放在操作数据的前面和后面 ...

  5. python selenium while 循环

    while True: try: loadmore = browser.find_element_by_xpath('//div[@class="right"]/div[@clas ...

  6. jQuery的siblings方法

    在使用siblings方法的时候,发现p标签,选中是没有效果的 解决:在w3c中测试也发现是没有效果的,也没有其他的特殊说明,于是度娘之后发现: siblings()获取的是当前标签元素的所有同辈的标 ...

  7. Django-CRM项目学习(八)-客户关系系统整体实现(待完成!)

    注意点:利用stark组件与rbac组件实现客户关系系统 1.需求整理与确认 1.1 客户关系系统整体需求 a

  8. properJavaRDP 跑通本地远程桌面

    参考:https://www.cnblogs.com/jfqiu/p/3192364.html 包下载:https://mega.nz/#!HnIX0ajA!lcovIdmYWWJJVRngMsQFK ...

  9. EntityFramework Core是否可以映射私有属性呢?了解一下。

    前言 最近几天身体有点抱恙,说话都需要勇气,痛哭.今天简短的写一点探索性的内容,仅供了解,感谢您的阅读. EF Core映射私有属性 在EF 6.x系列中写过一篇文章可以映射私有属性,说明EF的灵活性 ...

  10. JS 设计模式八 -- 发布订阅者模式

    概念 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多(一个发布,多个观察)的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 优点 1 ...