三种容器网络方案

本文讲的是三种容器网络方案【编者的话】本文是TheNewStack容器电子书的一部分,着重介绍了容器的网络互联方案。有兴趣的同学可以关注下电子书。

任何云端部署容器的关键之一是管理容器间的网络。在研究编写我们最新的电子书《Networking, Security & Storage with Docker & Containers》期间,我们总结了三种通过插件集成容器网络的方式。前一篇文章中,我们介绍了容器网络模型(CNM)和容器网络接口(CNI),这篇文章中我们会介绍它们的起源和另一个领域:Apache Mesos生态。

CNM与Libnetwork

Docker的可扩展性设计模型使得我们可以通过向daemon代码添加扩展库的方式来扩展系统的功能,这涉及一个代码库,类似于Docker运行时,但库仅用作补充。这个库是libnetwork,最初由SocketPlane团队开发作为Docker第三方项目发布,SocketPlane公司在2015年3月份被Docker收购。

本质上讲,libnetwork提供了一种支架,开发人员可以基于它编写网络驱动。libnetwork的约束规则称为容器网络模型(CNM),CNM被认为是容器的一个权利法案。权利之一是平等地访问网络中所有其它容器;分割,隔离和流量分配是通过划分网络地址来实现的。服务发现模型为容器提供了一个互相通信的方法。

libnetwork目的是实现和使用任何类型的网络技术来连接、发现容器。对任何网络覆盖方案,它没有指定一个首选方案。Calico就是一个独立、开源、供应商中立的Layer 3网络覆盖方案。开发人员最近将Calico的calicoctl库修改为可寻址,可以作为Docker的一个插件。

ClusterHQ是第一批为数据库实现持久性容器系统的公司之一,产品名为Flocker。Flocker使用libnetwork库和Weaveworks的Weave Net网络覆盖方案。ClusterHQ产品副总裁Mohit Bhatnagar告诉我们:“我认为我们正处于一个临界点,最初那些用容器部署无状态服务的客户出现了部署有状态服务的潜在需求。而有状态服务需求的客户数量,令非常惊喜。”

Docker方案的关键架构区别在于正在扩展的部分。在Docker架构中,Docker Engine的守护程序运行在要暂存应用程序的主机服务器上,Docker Swarm重新配置了Docker Engine的网络视图,将其替换为集群中运行的服务器的混合网络视图。Swarm实际上是编排器,但插件可以在较低层扩展Docker Engine。

容器网络接口

Kubernetes项目发布了实现网络可扩展性的指南。(指南认为)网络扩展应该不借助网络地址转换(NAT)就能寻址到容器的IP,并且允许以相同的方式解决自己的寻址问题。基本上,只要组件是IP可寻址的,组建就可以很好地运行在Kubernetes上。在这种背景下,理论上任何你想实现的功能不需要必须绑定到Kubernetes上,把它作为Kubernetes的扩展组件就可以了。

Google技术经理Tim Hockin解释到:“我们一直关注我们在Kubernetes网络上所做的,显然,核心系统没有办法处理每一个网络用例。世界上的每个网络都像雪花一样独一无二,我们没有办法全部实现到我们的系统中。我们必须把它外部化,插件化是我们的方式。”

CoreOS后来发布了自家的容器网络接口(CNI),它比CNM更基础,因为它只有两个命令:创建容器、删除容器。配置文件放在JSON中,通过json文件实例化容器内容和分配IP地址。因为这遵循Kubernetes的网络指南,Google发布的指南对CNI友好。因此,Flannel和Weave Net已经使用CNI实现各自的Kubernetes插件。

Hockin承认这些扩展把灵活新颖的网络连接带到Kubernetes环境中,但是它们也带来了损耗。“一般Kubernetes对overlay网络的观点是,如果你真的必须使用overlay,那就使用它们吧。这会给他们带来更多的复杂性、管理和沟通成本。我们发现越来越多的Kubernetes用户直接使用Layer 3路由,相比overlay方案,Layer3减少了他们的时间成本。”

在重新评估了可扩展框架当前状态后,ClusterHQ得出结论:模型的选择将取决于,或许完全取决于集成到容器的工作量。ClusterHQ工程和运营高级副总裁Sandeepan Banerjee解释到:“如果你的作业以前运行在VM上,VM有IP地址并且可以与项目中的其他VM通信,CNI模型和Kubernetes以及Weave是你的最佳选择。”Banerjee然后引用Kubernetes的no-NAT约定作为关键理由。他又继续讲到“如果你之前不了解这些,但是你想充分尝试Docker,包括Docker的网络库、编排框架Swarm等,你可能会发现Docker提供的解决方案很强大,它有很多优势、对overlay网络也很灵活。”

Mesosphere和它的插件

Mesosphere已经发布了或许是最复杂的Mesos商业实现DC/OS,并且发布了编排系统Marathon与Kubernetes直接竞争。

作为一个调度平台,扩展Mesos功能的工作早就开始了。实现了Hadoop大数据任务调度、Jenkins的任务管理和Docker容器部署等,这些功能已经在各自的平台内实现。但在2016年夏天,Mesosphere开始有了不同的观点,开始准备利用CNI扩展容器连接的新方案。在撰写本文时,Mesosphere已经发布了一份文件,在DC/OS路线图实施阐明其支持SNI的意图。

Mesosphere创始人兼首席架构师Ben Hindman讲到:“我们现在的世界中有足够多的供应商、接口和网络存储的实现方案。我认为插件的实现方式非常重要。现在尚不明确是否由Docker定义的插件将成为通用插件。我认为你今天在行业中所看到的,并不一定是未来的样子。”

目前DC/OS使用开源的负载均衡服务发现系统Minuteman实现容器互连。它截取两台主机上容器的网络包,然后重写包,添加目的地的IP地址。这种跨云网络通信的实现方式将DC/OS与其它实现方式区别开来。同样,DC/OS提供了设置虚拟可扩展局域网(VXLAN)的功能,建立的VXLAN中的路由规则。Mesosphere并没有重新发明轮子,实际上,它让用户基于性能或其它因素自己选择overlay方案。

Hindman告诉我们,他认为Flannel,Weave和其它overlay网络系统在解决容器网络问题上,比VXLAN方案更有价值。事实上,这种替代方案将出现,他说到,“作为一个行业(容器网络解决方案),我们发现一个事实:我们正在尝试不同的解决方案来实现我们的想法。我认为我们可能会解决一些问题,overlay方案也会继续存在。但是我相信还会有其它方案,没有使用现存的SDN技术,就可以连接容器。”

Integration Towards the Future

今天,在IT和数据中心预算中,容器化通常不是一个单独的订单项。当签署支票的人不明白他们的钱的花在什么地方时,就需要详细的解释来让他们弄明白这些概念。有些人可能过多的解释淡化了容器集成的主题。事实上,集成的方案把一些基本的思想提升到共同讨论的层面。大家都理解到基本需求是让新旧系统共存,让它们通过接口通信。尽管这些方法在几年内可能看起来很复杂或不切实际,但为了达到一个良好的解决方案而迸发出来的灵感将使这一切都值得追求。

原文连接:THREE APPROACHES TO CONTAINER NETWORKING(翻译:adolphlwq)

=========================================
译者介绍

adolphlwq,博客地址:QuanTalk

原文发布时间为:2016-10-14

本文作者:adolphlwq

原文标题:三种容器网络方案

时间: 2017-10-12

三种容器网络方案的相关文章

浅谈三种企业网络营销方法的成本分析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 企业网络营销的主要目的就是对企业的产品或者服务进行宣传,让用户能够看到,然后不断的尝试使用,慢慢的形成良好的口碑等等,最后就能够转化为销售,成为利润的来源.所以企业网络营销是否成功的关键之处就是是否用户是否转化为足够的销量,是否网络营销投入的成本获得了更为丰富的产出!当然降低网络营销的成本也是很多企业需要做的,毕竟相同的网络营销效果成本越低,

Spring三种bean装配方案

首先来个简单且古老的Java类吧 public class SpringBean { public void say(){ System.out.println("这是一个SpringBean"); } } 1.当然了,第一种必须是我们最智能话的装配方案,自动装配了. 在自动装配的时候,需要保证对类进行注解操作. @Component//一种通用的组件描述 @Controller//通常用于web中的控制器组件上 @Service//通常用于service服务组件上 @Reposito

有关puppet agent端三种备份恢复方案探讨研究

备份方案一.通过自定义facter结合元素backup进行备份恢复 一.facter部署 1.创建目录结构 [root@puppetserver modules]# mkdirpublic/{modules,manifests,files,lib/facter} -p 2.打开模块中的插件功能 [root@puppetserver public]# vim/etc/puppet/puppet.conf [main] pluginsync = true 3.编写自定义fact [root@pupp

同程容器云平台网络方案演进

本文讲的是同程容器云平台网络方案演进[编者的话]同程旅游PaaS平台是从2014年开始搭建的,到现在已经持续发展了三个年头.规模从原来的几百个容器到现在上万个容器.在容器调度上从原来的手动操作到现在的自动伸缩与扩容,在宿主机部署密度上从原来的十几个容器到现在上百个容器--我们的PaaS云平台在三年间进行了3次大版本的迭代.本文主要介绍同程旅游PaaS云平台在持续集成和持续部署方面,基于Docker对网络方案的选型及应用,以及随着业务需求的增加而经历的网络方案变更过程. [3 天烧脑式基于Dock

打开win7网络连接的三种方法

  使用电脑上网,免不了常常发生电脑连不上网络的故障.出现这种情况,就需要到电脑的"网络连接"查看网络的参数状况.那打开操作系统的"网络连接"有哪些方法?下面就以Win 7操作系统为例介绍三种打开"网络连接"的方法: 工具/原料 Win 7操作系统 CMD命令行 方法一:使用"ncpa.cpl"命令打开网络连接 1使用Win 7的"运行"对话框直接打开. 2在Win 7"开始"->

win7系统下打开网络连接三种方法

  那打开操作系统的"网络连接"有哪些方法? 下面就以Win 7操作系统为例介绍三种打开"网络连接"的方法: 方法一:使用"ncpa.cpl"命令打开网络连接使用Win 7的"运行"对话框直接打开. 在Win 7"开始"->"运行"对话框输入"ncpa.cpl",如下图红框所示,再点击"确定"按钮. 执行完上面的操作后就能进入到Win 7的&

有容云:容器网络那些事儿

本文讲的是有容云:容器网络那些事儿[编者注]本文根据7月31日有容云<Docker Live时代线下沙龙-北京站>嘉宾分享内容整理而成,分享嘉宾杜东明,有容云高级技术顾问,十年IT经验,IT行业的全栈工程师.涉足领域包括存储.网络.备份/容灾.服务器/终端虚拟化.Docker等.拥有丰富的一线客户经验,曾帮助工行.建行.光大.国寿.泰康等诸多金融客户设计其虚拟化基础架. 我相信,真正拿容器工作或者是去运维一个容器环境,真正在容器上面做生产的时候大家都会遇到的一个话题就是容器网络,所以我今天给大

容器网络Calico进阶实践 | 褚向阳

各位晚上好,我是数人云的褚向阳,接下来要跟大家分享的主题是<容器网络Calico进阶实践>. 距离上次聊 Calico 已经过去快半年的时间了,数人云也一直在努力将容器网络方案应用到企业客户的环境中,Calico v2.0 也马上就要发布了,这次跟大家一起感受下新版. 需要说明下,本人跟 Calico 没有任何直接关系,也只是个"吃瓜群众",做为使用者,想跟大家聊聊心得而已. 这次分享的内容主要包括: 简单总结下作为使用者我看到的 Calico 的变化,包括组件,文档和 c

DockOne微信分享(六十六): Docker网络方案初探

本文讲的是DockOne微信分享(六十六): Docker网络方案初探[编者的话]这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点讲解Calico的特性及技术点,作为引申和对比再介绍下Contiv的特性,最后给出对比测试结果. 随着容器的火热发展,数人云越来越多的客户对容器网络特性要求也开始越来越高,比如: 一容器一IP: 多主机容器互联: 网络隔离: ACL: 对接SDN等等. 这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点