专栏首页灯塔大数据容器网络介绍分析

容器网络介绍分析

本文部分内容译自《An Analysis and Empirical Study of Container Networks》

01

引言

随着云计算技术发展,容器(Container)作为一种轻量级的虚拟化形式,已逐步成为云上应用交付的标准。当企业建设容器云平台时,会碰到一系列挑战,根据CNCF的调查报告指出,容器的网络和安全实现成为容器云平台建设最主要的挑战,当企业开始将重要的企业核心应用迁移至容器平台,缺乏足够的网络和安全管控将会给业务上线带来潜在的巨大威胁。

一般而言,容器网络可归为两大类:单主机网络(Single-Host)和多主机网络(Multi-Host)。单主机和多主机场景下都有多种网络模式,本篇将先对单主机容器网络模式进行介绍,之后对多主机容器网络模式进行介绍,最后进行总结。

02

单主机容器网络

None Mode

这个模式下的容器只有一个loopback接口,不能连接到本机或其他网络上的容器;但它具有良好的隔离性和安全性,适合不需要网络连接的服务,如:离线数据计算、批处理、备份任务等。

Bridge Mode

桥接模式是Docker容器在单机情况下的默认模式。桥接模式会给每个新创建的容器分配独立的命名空间(Namespace)、IP地址,同时文件系统、进程等也是隔离的,另外会将对应的容器的网络接到某个指定的虚拟网桥上(如:启动Docker服务时默认创建的docker0上)。单独的桥接模式不能把容器连接到外部网络,必须依赖其他网络服务,如NAT、Overlay等。

Container Mode

容器模式涉及多个容器,它们共享同一个网络命名空间。在一组容器中,一个容器被指定为代理、并配置为桥接模式,其他组内的容器通过代理的以太(veth)接口连接到外网。即所有组内的容器共享同一个网络,整个组只指定一个IP地址,组内的单个容器通过组IP加端口号来辨认。

容器模式被许多容器管理框架采用,例如:Kubernetes中的一个Pod包含一组容器,同一Pod里的容器共享相同的网络空间及IP地址,相互之间通过组IP加端口号来进行访问。

Host Mode

Host模式网络允许同一主机上的所有容器共享主机操作系统(OS)的Namespace,即该模式下同一主机上的所有容器彼此可见且容器间通过进程通信,正因如此,Host模式的安全级别在四种模式中最低。

图1: 单主机四种容器网络模式总结

图1对单主机上四种容器网络模式的特点进行总结,从上至下,网络逐渐变得高效,但安全隔离级别逐渐降低。

03

多主机容器网络

Host Mode

正如单主机模式下Host模式,多主机Host模式下的容器也共享主机的网络栈和Namespace。因此,不同主机上的两个Host模式的容器可以很容易的进行通信,就像两个主机上使用IP进行通信的两个进程一样。尽管Host模式的网络配置较为简单,但只有两个Host模式的容器能够相互通信,如:一个桥接模式的容器可以使用目的主机IP发包给另一个不同主机上的Host模式的容器,但反之不行,且Host模式对同个主机上的容器不进行安全隔离。

Network Address Translation

(NAT)

NAT模式是Docker 1.9之前最常用的多主机容器网络技术。NAT技术将容器的的私有IP地址到它的端口号之间的关系映射到NAT表中,通信时必须使用主机的公有IP地址加端口号来确定一个特定容器。

NAT不需要复杂的配置和第三方软件支持,它是一个实现不同主机上容器连通性的简单方法。此外,由于NAT允许容器使用期宿主机的IP地址,所以在大规模容器部署时不需要大量的公有IP地址。在使用NAT模式时,需要对每个发送和接收的包进行地址转换,因此会有些开销和性能下降;另外,容器的公有IP地址和他们的宿主机IP绑定,导致很难实现动态网络。

Overlay Network

Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上形成新的数据格式,以此建立节点之间定制化的连接。

比起NAT,Overlay网络提供了隔离的地址空间,并允许容器使用私有的地址进行通信。但Overlay网络也有如下两个缺点:1、封包和解包较为耗时,且延长了网络栈;2、封包时改变了原始包的大小,当底层网络限制了最大传输单元(Maximum transmission unit,MTU)时,封包时的空间开销可能会导致要发送的包的数量增加。

在Docker提供Overlay原生支持前有很多第三方解决方案被提出来,如Weave、Flannel、Calico(IPIP)等;Docker在1.9版本之后提供原生Overlay网络,且是多主机网络的默认方案;

Routing

以支持边界路由协议(Border Gateway Protocol,BGP)的Calico为例,它在主机的内核中实现了一个虚拟路由器,使用BGP来进行包的路由。作为网络层的解决方案,Calico相比起NAT和Overlay开销并不大,但也有一些限制,如:Calico只支持部分网络协议,如TCP、UDP、ICMP,适用性有限;其次,在短生命周期的容器组成的动态网络中,更新BGP中的路由信息也是开销很大的。

图2对可用的多主机容器网络进行总结,包括各方式支持的协议、是否有KV(Key Value)存储、安全性等。

图2:多主机容器网络总结

04

总结

为容器化应用选择合适的网络是一件很有挑战的事情,需要考虑到很多因素。如果用户在单机上运行容器,需要在性能、安全、隔离之间进行权衡,若安全和隔离是最重要的,桥接模式就是最好的选择;如果容器需要频繁和其他容器相互通信,且一些容器需要访问其他容器的命名空间来监控管理,容器模式是最好的选择。如果用户在多主机上构建容器网络,从性能的角度考虑,Calico(BGP)是最好的选择。

此外,还有很多因素影响网络性能,如:网络启动时间、CPU开销、网络包的大小等,用户在选择网络模式时应综合这些因素进行选择。

文章作者 | 中国电信股份有限公司研究院 任宏丹

本文分享自微信公众号 - 融智未来(DTbigdata),作者:任宏丹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 容器网络简介

    在容器内,可以看见的“网络栈”其实就是隔离在该容器内 Network Namespace 当中的,其中就包括了网卡(Network Interface)、回环设...

    周萝卜
  • 容器DNS介绍

    DNS服务是域名系统的缩写, 英文全称:Domain Name System,将域名和IP地址相互映射。在容器环境中,DNS至关重要,例如在Kubernetes...

    Se7en258
  • docker 网络介绍

    容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。

    dogfei
  • OpenShift 网络分析-(容器网络选型和方案建议)

    魏新宇
  • Spring 源码分析(一)之 Spring IOC 容器基础介绍

    是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种...

    zoro
  • TKE 容器外网访问能力介绍

    当前的实现是让容器访问外网的数据包 SNAT 为节点 IP 出去,所以容器具备外网访问能力依赖于节点具备外网访问能力。

    zhaoqiyuan
  • 双流网络介绍

    双流CNN通过效仿人体视觉过程,对视频信息理解,在处理视频图像中的环境空间信息的基础上,对视频帧序列中的时序信息进行理解,为了更好地对这些信息进行理解,双流卷积...

    狼啸风云
  • 网络基础介绍

    TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又...

    程序员小饭
  • 容器网络的访问控制机制分析

    随着容器技术成熟和敏捷开发的推广,微服务技术在业界越来越得到普遍的应用,但业务微服务化后又引入了一些新的安全挑战,特别是在访问控制层面。例如:

    绿盟科技研究通讯
  • 容器云——Docker容器技术基础介绍

    Docker是一个用于开发、打包、运行应用的开放平台。Docker使得我们能够将我们的应用从基础设施中分离出来。基础设施就是指的服务器等基础硬件设施,怎么理解分...

    小诸葛
  • 使用 ebpf 深入分析容器网络 dup 包问题

    大家好,我是杨玉玺,2011年至今一直从事底层网络研发,先后就职于阿里云、金山云从事 VPC 虚拟化网络研发,对高性能网络优化,复杂网络问题排查有非常丰富的经验...

    灵雀云
  • 使用 ebpf 深入分析容器网络 dup 包问题

    本文主要讲述了借助 ebpf 工具 skbtracer 分析了容器网桥模式下出现 dup 包问题的根本原因, skbtracer 工具的使用使得原本比较复杂的分...

    腾讯云原生
  • 使用 ebpf 深入分析容器网络 dup 包问题

    大家好,我是杨玉玺,2011年至今一直从事底层网络研发,先后就职于阿里云、金山云从事 VPC 虚拟化网络研发,对高性能网络优化,复杂网络问题排查有非常丰富的经验...

    米开朗基杨
  • RxSwift介绍(六)——网络请求

    在 swift 环境下开发,网络请求框架最知名就是 Alamofire ,AFN网络请求框架 swift 版本。其强大的功能和多种自定义网络请求,方便性不言而喻...

    我只不过是出来写写代码
  • 图神经网络1-介绍

    图神经网络中的图是指数据结构中的图的样子,图由顶点(Vertex)和边(Edge)构成G=(V,E),顶点连接的边的数量叫做顶点的度(Degree)。

    孔西皮
  • 网络表示学习介绍

    网络数据可以自然表达物体与物体之间的联系,生活中充满了网络数据,例如社交网络、计算机网络、物流网络、学术网络等等。在有关网络的研究中,如何表示网络信息是一个重要...

    马上科普尚尚
  • 计算机网络HTTP介绍

    HTTP即为超文本传输协议(HyperText Transfer Protocol)。

    越陌度阡
  • 内容分发网络-腾讯云内容分发网络

    内容分发 网络即腾讯云CD N加速。腾讯云 CDN 在全国各省份部署了 1100+ 加速节点,涵盖了移动、联通、电信等主流运营商,以及铁通、长宽等多家中小型运营...

    用户1361591
  • kubernetes 容器编排系统介绍

    Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的经...

    小时光

扫码关注云+社区

领取腾讯云代金券