前面各个小节我们学习了 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 csrf token添加

    #views.py from django.shortcuts import render_to_response, RequestContext from django.views.decorato ...

  2. 『cURL』curl: (6) Could not resolve host无法解析主机地址

    最近在学数据挖掘时,获取数据有两种途径: 开放数据,可以直接使用和存储的数据: 网络数据,通过爬虫或云市场api(付费或免费)获取数据 我通过教程,在阿里云购买一个天气数据api,尝试使用cURL获取 ...

  3. Neo4j之坑

    10个月前,我开始用neo4j做cmdb. 初体验下去neo4j很美好. 但是一年中发现一些问题, 仅仅是个人的体验.经供参考 查询语言 如果接触过Neo4j,都会为Cypher的简单和易用感觉到惊叹 ...

  4. SQL高级查询基础

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  5. Windows上安装MySQL的完整教程

    1.     首先去官方网站下载压缩文件:https://dev.mysql.com/downloads/mysql/ 2.     解压下载的文件. 3.     将解压的所有文件放在一个文件夹里( ...

  6. Jsp的基本知识

    jsp页面的基本组成部分:指令,表达式,小脚本,声明,注释,静态内容. 指令元素有三种: 1.page:eg <%@ page 属性名="属性值" 属性名="属性值 ...

  7. Web前端教程2-CSS教程

    目录 1. CSS基本语法 1.1. CSS基本定义 1.2. CSS布局属性 1.3. CSS文本常用属性 2.CSS选择器 2.1. 标签选择器 2.2. id选择器 2.3. 类选择器 2.4. ...

  8. pyhton从开始到光棍的day11

    纪念我这个开始学python的光棍天,光棍天依旧是函数,这次的函数有个小高级,比昨天的low函数稍微高级点,就是在使用函数中是可以赋值的,比如索引一个值什么的.函数还可以当做参数进行传递,把这个函数名 ...

  9. [十二省联考2019]D2T2春节十二响

    嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了, ...

  10. 04 前端篇(JQuery)

    jquery: http://www.cnblogs.com/yuanchenqi/articles/5663118.html 优点:简洁.兼容 jquery 对象:   jQuery 或  $ 基本 ...