前面各个小节我们学习了 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. 【SpringBoot笔记】SpringBoot如何正确关闭应用

    关闭Spring Boot应用程序,我们可以通过OS命令kill -9 进程ID 实现将进程杀死.但是,有没有一种更好的方式,比如通过REST请求实现?Spring Boot Actoator提供了实 ...

  2. win10 桌面设置为远程桌面

    查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...

  3. emacs单词首字母,单词,区域大小写转换

    从光标开始,处理单词后半部分: 快捷键 说明 M-c (capitalize-word) 首字母改为大写 M-u (upcase-word) 全部改为大写 M-l (downcase-word) 全部 ...

  4. 运行SSIS包的六种方式

    注意: 1~5都需要SSIS安装在对应的机器上. 一.直接在Data Tool里运行 右键选择要运行的包,然后直接选择运行包 二.使用SQL Server的Job作业 可以选择:a. File Sys ...

  5. ASP.NET基础知识汇总之WebConfig自定义节点详细介绍

    之前介绍过Webconfig的具体知识ASP.NET基础知识汇总之WebConfig各节点介绍.今天准备封装一个ConfigHelper类,涉及到了自定义节点的东东,平时虽然一直用,但也没有系统的总结 ...

  6. SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍

    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍 本篇博文将介绍几种如何处理url中的参数的注解@PathVaribale/@Requ ...

  7. JProfiler的详细使用介绍

    转:https://blog.csdn.net/huangjin0507/article/details/52452946 下载软件 官网地址:http://www.ej-technologies.c ...

  8. FineUIMvc的分部视图连接器 --VS-- FineUIPro的用户控件连接器

    [FineUIPro]用户控件 在FineUIPro中,我们可以将公用的部分定义为一个用户控件,然后添加到页面中. 一个简单的示例:http://pro.fineui.com/#/usercontro ...

  9. 第二部分之Redis服务器(第十四章)

    Redis服务器复制和多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据. 一,命令请求的执行过程 客户端向服务器发送命令请求 set key value 服务 ...

  10. PHP开发高可用高安全App后端

    基于thinkphp5开发的APP,涵盖阿里大于,七牛云图片上传,RestfulApi,短信验证, 需要联系我:QQ:1844912514