前面各个小节我们学习了 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. (爬虫)requests库

    一.requests库简介 urllib库和request库的作用一样,都是服务器发起请求数据,但是requests库比urllib库用起来更方便,它的接口更简单,选用哪种库看自己. 如果没有安装过这 ...

  2. Swift 产生 uuid

    项目中.需要客户端生成一个唯一的识别码 let uuid = UUID().uuidString print(uuid)

  3. js坚持不懈之15:修改html内容和属性的方法

    1. 修改 HTML 内容 <!DOCTYPE html> <html> <body> <p id = "change">原始内容& ...

  4. 免费了 -- EXCEL插件 智表ZCELL 普及版V1.0 发布了!!!

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  5. Docker镜像仓库清理的探索之路

    用友云开发者中心是基于Docker容器进行微服务架构应用的落地与管理.相信各位同学在使用的过程中,会发现随着Docker镜像的增多,占用磁盘空间也约来越多.这时我们需要清理私有镜像仓库中不需要的镜像. ...

  6. CSS 实现自动换行、强制换行、强制不换行的属性

    实现效果 1.自动换行: word-wrap:break-word; word-break:normal; 2.强制换行: word-break:break-all;       按字符截断换行 /* ...

  7. PHP加密解密函数(带有效期,过了有效期也解不了)

    转的,原来应该是discuz中弄的 <?php //加解密函数 //此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原. //这样我们就可以拿此函数来做很多用途了,比如:单点登录的 ...

  8. mysql数据库中插入数据INSERT INTO SET的优势

    往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...

  9. Lazy 延迟加载

    问题:最近遇到一个项目遇到一个问题(很久的项目,现阶段主要维护),程序初始化的时候比较慢,最后查原因的时候发现是因为一个类的构造方法里面有些逻辑, 解决办法:希望在使用的时候再进行加载,最后想到了延迟 ...

  10. tomcat server.xml结构

    所有xml文件使用的文件头 <?xml version='1.0' encoding='utf-8'?> 2 <Server port="8005" shutdo ...