容器(docker)与容器的网络类型

容器的起源

在过去没有虚拟化的时候,我们想要当一个服务器,我们需要做哪些事情呢?

(1)先需要硬件的支持,比如主机;

(2)配置操作系统并且购买一个服务器

(3)安装操作系统

(4)部署我们需要的环境

(5)部署我们需要的应用

但是这时候需要将我们的应用迁移或者部署到其他地方,那么我们有需要进行相同的一系列操作,从而会导致我们的部署过程很缓慢,花费的时间成本和金钱成本会很高,并且容易造成很多资源的浪费,部署以及迁移复杂并困难。这个时候虚拟化技术出现了。

虚拟化技术,其实就是在本机操作系统的基础上,增加一个Hypervisor层,Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可以对我们的硬件资源,比如CPU、内存、硬盘等进行虚拟化,然后再进行操作系统的安装,也就成了我们的虚拟机了。通过这种方式我们就可以创建不同的虚拟机来使用我们的虚拟化资源,并且互不干扰,从而让我们的物理资源利用率得到远远提高,但是这种技术存在的缺点是:每创建一个虚拟机,我们都需要创建一个操作系统,就会让资源产生浪费。

基于这个原因,我们的容器技术应运而生,但是它主要并不是为了解决资源浪费的问题,而是为了解决开发和运维时候环境可能不一致导致的开发效率低下的问题,容器让我们可以直接将开发好的环境和应用像压缩一样打包,打包好之后就可以在任何环境下进行使用了,从而远远的提高了开发效率。

容器的发展

最近几年,云计算和分布式计算等成为了备受欢迎的技术之一,使用范围以及人员越来越多,而容器化技术则是相应领域中最流行的技术之一,容器化技术早在1979年就已经出现,它允许将进程和子进程与操作系统的其余部分分隔开来,但是从未考虑过实现安全机制;而FreeBSD在2000年中为Chroot文件隔离带来了更多的安全性,还实现了将进程及其活动隔离到文件系统的特定视图中;在2001年Linux VServer使用了类似于chroot的机制与安全上下文,以及操作系统虚拟化相结合来提供虚拟化解决方案,从而允许在单个VPS上运行多个Linux发行版;2004年Oracle发布了一个用于X86和SPARC处理器的版本;2007年谷歌发布了CGroups,这是一种能限制和隔离一系列进程的资源使用的机制,并集成进了Linux内核;在之后还有2008年的LXC和2013年的Docker等等。

容器,通俗来说其实就是一种沙盒技术,类似于一个个盒子一样,把你的应用“装”起来,这样不同应用之间,就会像盒子一样,盒子内部的应用不会存在相互干扰,并且还能很方便的被搬来搬去,而容器技术的核心功能,就是通过约束和修改进程的动态表现,从而创造出一个“边界”。从而让容器里面的程序被宿主机屏蔽,与宿主机上其他的程序分开,让容器内的程序有一种工作在独立系统上的假象。

容器网络的发展

容器的网络在发展过程中主要有三种方式,第一种是端口映射的方式,第二种是容器网络接口(CNI),第三种是服务网格+CNI,具体如下图所示:

       

其中,端口映射的方式,需要去全局管理容器端口,映射时候复杂度就会很高,因此很少被使用,而容器网络接口方式,每个容器都具有唯一的IP地址,最后的服务网格+CNI的方式则是每个POD部署边车代理,比如Enovoy提供7层流量管理和安全使用场景。

容器的三种不同的网络方式

(1)Bridge模式

Bridge模式,其实就是常用的Linux网桥模式,容器在安装完成后,会在系统上默认创建一个Linux网桥,并为它分配一个子网,比如Docker,针对每一个容器,均为其创建一个虚拟的以太网设备,其中一端会关联到网桥上,另一端则会通过映射,映射到容器内部的网络空间中,然后将该虚拟网段中的一个IP地址分配给改接口,网络模型如下所示:

                                    

一个桥接网络适用于在单主机的相对较小网络环境中使用,但是却不适合于需要庞大网络环境的情况。

(2)Host模式

Host模式,顾名思义,就是和主机共用相同的网络,它的网络命名空间和主机是同一个,容器和宿主机使用同一个Namespace、端口和IP等资源,容器不会虚拟出自己的网卡,但是在文件系统、进程列表等还是和Host隔离开的,不需要进行NAT,最大的优势就是网络性能比较好,但是Host上使用的端口不能再次使用,所以隔离性不够好,Host模式如下图所示:

                                            

在Host模式下,只能工作在Linux环境中,但是在一个端口上只能使用一个容器,如果没有监听任何端口,则容器不能正常工作,但是在性能方面却能的到很好的提升,因为容器通过主机的端口就能访问我们的公网网络,但是这样却造成了隔离性的破坏,安全性会大大的降低。

(3)容器覆盖网络

Overlay Network(覆盖网络)模式,最早是因为P2P受到的关注,在此之前,还有类似隧道、VPN的技术已经具备了Overlay的特征,但是知道P2P兴起,Overlay网络才开始真正被重视。覆盖网络是要比基础网络简单的,在复杂性上也不能和互联网相比,因为基础网络是面向大多数应用的,提供普遍服务,而覆盖网络是针对于特定的业务的,因为现在很多的业务不再需要与IP层的地址结构和路由结构绑定,而覆盖网络能将很多东西简化,让网络变得简单,将特定问题从很多的互联网目标优化问题中剥离出来,映射到一个独立的空间进行处理。而其他的问题则可以简单处理即好,主要是通过软件构建一个覆盖Host网络之上的并且可以把所有容器连同在一起的虚拟网络,它的模式如下图所示:

                              

在覆盖网络模式下,原生就支持一个多主机网络,可以通过构建一个在宿主机网络上的虚拟网络,将所有容器连在一起,但是对基础网络不会有大规模的修改,从而实现应用在网络上的承载,与其他的网络业务分离,上层的应用只与虚拟网络有关系。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值