前面各个小节我们学习了 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. centos7后台服务部署jar包

    centos7 服务部署jar包 centos7 服务介绍 CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分, 每一个 ...

  2. c# 多线程 --Mutex(互斥锁) 【转】

    互斥锁(Mutex) 互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它. 互斥锁可适用于一个共享资源每次只能被一个线程访问的情况 函数: //创建一个处于未获取状态的互斥锁 Pub ...

  3. Python encode和decode

    今天在写一个StringIO.write(int)示例时思维那么一发散就拐到了字符集的问题上,顺手搜索一发,除了极少数以外,绝大多数中文博客都解释的惨不忍睹,再鉴于被此问题在oracle的字符集体系中 ...

  4. LeetCode算法题-Min Cost Climbing Stairs(Java实现)

    这是悦乐书的第307次更新,第327篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第176题(顺位题号是746).在楼梯上,第i步有一些非负成本成本[i]分配(0索引). ...

  5. 从零开始制作 Hexo 主题

    原文地址:从零开始制作 Hexo 主题 · Ahonn 写在前面 本文将会从零开始开发一个简单的博客主题.样式主要参考 Hexo theme 中的 Noise 主题. 开始之前你需要了解: 模板引擎  ...

  6. python学习——读取染色体长度(四:获取最长染色体的编号)

    # 读取fasta # 解析每条序列的长度 chr_len = {'chr1':10,'chr2':20,'chr3':30,'chr4':40,'chr5':15} # 求和 total_len = ...

  7. CentOS7.x安装kickstart

    kickstart简介 kickstartkickstart是RedHat公司开源的软件,所以对CentOS兼容性最好,是一种无人值守的安装方式就是将手动安装配置的步骤,记录到文件中,然后通过kick ...

  8. Cookies, Claims and Authentication in ASP.NET Core(转载)

    Most of the literature concerning the theme of authentication in ASP.NET Core focuses on the use of ...

  9. 19 款仿 Bootstrap 后台管理主题免费下载

    声明: 1. 本篇文章提到的仿 Bootstrap 风格的主题,是基于 jQuery 的 ASP.NET MVC 控件库的主题. 2. FineUIMvc(基础版)完全免费,可以用于商业项目. 目录 ...

  10. selenium跳过webdriver检测并爬取淘宝我已购买的宝贝数据

    简介 上一个博文已经讲述了如何使用selenium跳过webdriver检测并爬取天猫商品数据,所以在此不再详细讲,有需要思路的可以查看另外一篇博文. 源代码 # -*- coding: utf-8 ...