e-works数字化企业网  »  文章频道  »  基础信息化  »  云计算和虚拟化

如何解决容器网络性能及复杂网络部署问题?

2017/4/16    来源:极客头条    作者:陈海泉      
关键字:容器网络  云计算  
近两年,容器已经随着 Docker 技术的传播火遍全球,现在已经有越来越多的企业用户在开发、测试甚至生产环境中开始采用 Docker 等容器技术。
    近两年,容器已经随着 Docker 技术的传播火遍全球,现在已经有越来越多的企业用户在开发、测试甚至生产环境中开始采用 Docker 等容器技术。
  
    然而,目前主流的 Docker 管理平台,比如 K8S,当企业想构建一套网络方案,需要精通 Linux 提供的各种高级网络功能,这个技术门槛太高了。特别是对专注于业务开发的 Docker 用户而言,这类操作往往显得过于复杂。
  
    而且,由于在虚机中部署容器,云平台和 Docker 平台都有自己的虚拟化网络实现方案,二者功能重叠,使用时会相互嵌套,导致的其网络性能损耗非常严重,甚至达到 80%。
  
    所以,虽然容器技术正在逐步被大家认可与应用,但其网络性能以及配置的复杂程度一直都在被大家所诟病。今天的内容,将会给大家介绍一种容器部署方案,帮助大家解决网络这个难题。
  
    Docker的网络模型架构
  
    首先,我们先看看 Docker 提供了哪些网络功能,Docker 的网络模型是这样的:
  
如何解决容器网络性能及复杂网络部署问题?
 
    Docker 的网络结构分为 3 个层次:Network、Endpoint 和 Container。对比到物理设备可以这么理解:Network 是交换机,Endpoint 是网卡,Container 就是服务器
  
    决定 Network 这个交换机的工作方式的组件,就是 Network Driver。常用的 Driver 有两个:
 
  • Bridge

  • Overlay
  
    Bridge Driver
  
    Bridge Driver 是种比较直接的方式:Bridge 指的是 Linux Kernel 实现的虚机交换机。每个网络在宿主机上有一个 Bridge 实例,默认是 Docker0,有对应的 IP 地址和网段,每个 Docker 实例从网段里面分配一个地址。结构如下:
 
如何解决容器网络性能及复杂网络部署问题?
  
    在同一个 Bridge 下的 Endpoint 是一个二层网络,要实现跨宿主机的 Endpoint 之间通信,只能走三层网络,也就是通过路由转发过去。要对外提供服务,还需要对宿主机的 IP 端口做转换(Nat)。这种情况下主要网络性能损失发生在端口转换(Nat)和路由上面。
  
    同时这也和青云 SDN 1.0 里面的基础网络实现方式是完全一样,优点是结构简单可靠,缺点也很明显: 不能把多个宿主机连成一个二层网络。这个问题会导致 Docker 实例的 IP 地址,必须跟当前宿主机定义的网段一致。如果启动到别的宿主机上,IP 就需要更换。
  
    Overlay Driver
  
    Overlay Driver 的作用是把位于多个宿主机的 Docker 实例连接在一个虚拟的二层网络里面。相比 Bridge,在功能上有一定进步,本质上是一个分布式的虚拟交换机。
  
    举个送快递的例子,方便大家理解:有的公司对员工提供内部邮件的服务,位于不同写字楼的员工可以用工位号互发邮件。公司的收发室拿到邮件后,会重新再打个包,上面写着双方写字楼的地址,交给真正的快递公司去投递。收件方的收发室会拿到邮件后,会拆掉外面的信封,把里面的邮件按工位号送给收件的员工。
  
    这例子里面,工位号就是 Underlay 的地址, 写字楼的地址是 Overlay 的地址。Docker 的这个虚拟二层网络,就是企业内部邮件,但是真正派件的还是快递公司。跟普通快递相比,多了个环节:收发室对邮件重新包装,不仅打包费时间,多的包装也占了重量,也就带来了额外的性能损失。
  
    目前,Overlay 模式的虚拟网络应用已经很普遍,青云给用户提供的虚拟二层网络也是相同的工作原理。
  
    容器的部署方式
  
    Docker 目前有两种方式部署:
  • 私有环境物理机部署

  • 公有云虚拟机部署
  
    今天和大家分享的就是为什么要在云平台上部署 Docker。
  
    虽然看起来在公有云的虚拟机部署 Docker 的做法比较奇葩,目前也没有公有云能让用户直接部署 Docker 在物理机上,当然,Softlayer 这种物理机托管的云除外。
  
    因为 Docker 本身的安全性还不够让人放心。虽然 Docker 已经有各种安全保护,包括 Namespace 提供的隔离机制、Selinux、Apparmor 等安全机制,以及最近才有的Unprivileged Container 功能来控制 Docker 实例在宿主机上的用户权限,但是由于容器的本质是跟宿主机共用同一个 Linux Kernel,一旦 Kernel 本身有安全漏洞,就有可能被 Docker 用户利用,侵入到云平台的物理机。
  
    比如几个月前发现的 COW 漏洞,就有可能让 Docker 实例获得物理机的 Root 权限,实现容器的“越狱”。这个漏洞存在了十几年才被人发现,完全有可能还有很多类似漏洞存在,只是没有被公开而已。
  
    所以,公有云直接让用户在多租户的物理机上运行 Docker,是极不安全的做法。
  
    因此,要在公有云使用 Docker,就只有在虚拟机里面运行 Docker 这一个选择。那么在公有云上部署 Docker 业务,存在哪些问题呢?其实,主要还是性能和功能两方面。
  

责任编辑:李欢
本文来源于互联网,e-works本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并以尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐