六 种容器主要接入方式

简介: 【2月更文挑战第28天】

1、和host共享network namespace

在这种接入模式下,不会为容器创建网络协议栈,即容器没有独立于host的network namespace,但是容器的其他namespace(如IPC、PID、Mount等)还是和host的namespace独立的。容器中的进程处于host的网络环境中,与host共用L2~L4网络资源。该方式的优点是,容器能够直接使用host的网络资源与外界进行通信,没有额外的开销(如NAT);缺点是网络的隔离性差,容器和host所使用的端口号经常发生冲突。

2、和host共享物理网卡

这种方式与上一种方式的区别在于,容器和host共享物理网卡,但容器拥有独立于host的network namespace,容器有自己的MAC地址、IP地址、端口号。这种接入方式主要使用了SR-IOV技术,每个容器分配一个VF,直接通过硬件网卡与外界通信,优点是旁路了内核不占任何计算资源,而且IO速度较快,缺点是VF数量有限且对迁移的支持不足。

3、和另外一个容器共享network namespace

在这种方式中,容器没有独立的network namespace,但是以该方式新创建的容器将与一个已经存在的容器共享其network namespace(包括MAC、IP以及端口号等)。从网络角度上两者将作为一个整体对外提供服务,不过两个容器的其他namespace(如IPC、PID、Mount等)是彼此独立的。这种方式的优点是,network namespace相关的容器间的通信高效便利,缺点是由于其他的namespace仍然是彼此独立的,因此容器间无法形成一个业务逻辑上的整体。

4、通过vSwitch/vRouter接入

在这种方式中,容器拥有独立的network namespace,通过veth-pair连接到vSwitch/vRouter上。这种方式对于网络来说是最为直接的,在vSwitch/vRouter看来,通过这种方式连接的容器与虚拟机并没有任何区别。vSwitch的实现有很多,如Linux Bridge, Open vSwitch等,可用于容器间二层流量的互通,能够对VLAN、Tunnel、SDN Controller等高级功能进行支持。vRouter可用于容器间三层流量的路由,能够对BGP、Tunnel、SDN Controller等提供高级功能的支持。

5、Macvlan/IPvlan

通过vSwitch或者vRouter来接入容器,虽然可以实现丰富的功能,但是却引入了相当的复杂性。Macvlan/IPvlan是由Linux原生提供的网络虚拟化方案,由于二者在部署和使用上的简单性,因此在容器网络中得到了广泛的使用。


Macvlan将一个物理网卡虚拟出多个虚拟网卡,并提供多个虚拟的MAC地址,使用macvlan接入的容器即会获得虚拟的MAC地址。物理网卡在收到流量后,在发送到协议栈前,会在RX函数中判断目的MAC地址,如果为本地容器的虚拟MAC则直接发给相应的namespace。容器的虚拟网卡在发出流量时,会在TX函数中判断目的MAC地址,如果为本地容器的虚拟MAC则直接发给相应的namespace,否则交给物理网卡来处理。Macvlan提供了Bridge、VEPA、Private、Pass Through等多种工作模式。IPvlan在一个物理网卡上虚拟出多个IP地址,使用IPvlan接入的容器会复用物理网卡的MAC地址,并获得虚拟的IP地址。物理网卡在收到流量后,在发送到协议栈前,会在RX函数中判断目的IP地址,如果为容器的IP则直接发给相应的namespace。容器的虚拟网卡在发出流量时,会在TX函数中判断目的IP地址,如果为本地容器的虚拟IP则直接发给相应的namespace,否则交给宿主机的协议栈进行处理。IPvlan提供了L2和L3两种工作模式,其中L3模式可以实现不同网段间的路由。

6、嵌套部署在VM中

这种方式在生产环境也比较常见,由于一台host中往往部署着多方的容器,所示存在安全隐患,因此许多用户会选择先启动自己的虚拟机,然后在自己的虚拟机上运行容器。这种方式其实是一种嵌套虚拟化。从本质上来说,在这种方式下容器的接入对于host可以是完全透明的,容器在虚拟机内部的接入可以采用上述其他方法。不过这对于云平台来说,这就意味着失去了对容器接入的管理能力,为了保留这一能力,往往需要在虚拟机内部和host中分别部署vswitch并实现级联,由虚拟机内部的vswitch来接入容器并对其进行特定的标记(云平台分配),以便host中的vswitch对其进行识别。一种常见的方式是使用Open vSwitch对容器标记VLAN ID。

相关文章
|
安全 测试技术 网络安全
NSX分布式防火墙是如何工作的?
今天我们来聊一聊VMware NSX的分布式防火墙DFW,本文提及的NSX,均指NSX for vSphere,即NSX-V,有关NSX-T的讨论,将在后续推出。
NSX分布式防火墙是如何工作的?
|
12月前
|
存储 弹性计算 固态存储
阿里云服务器收费标准租用价格及价格计算器使用参考
阿里云服务器租用价格参考,不同时期阿里云服务器的租用价格不同,2024年阿里云多款云服务器的收费标准都做了降价调整,最高降幅达93%,同时,阿里云还推出了多款价格比较实惠的云服务器,现在购买阿里云轻量应用服务器2核2G3M带宽82元1年,经济型e实例ECS云服务器2核2G3M带宽新购和续费优惠价99元1年,通用算力型u1实例2核4G5M带宽新购和续费优惠价199元1年,4核8G云服务器955元1年,本文为大家介绍一下阿里云服务器的最新收费标准租用价格以及使用价格计算器查询云服务器价格的方法。
|
Kubernetes API 调度
在K8S中,说⼀下Pod状态有哪些?
在K8S中,说⼀下Pod状态有哪些?
|
弹性计算 固态存储 大数据
云服务器价格多少钱一年?2024年阿里云服务器报价清单曝光!
企业或个人采购云服务器可以选择阿里云,作为国内第一云,阿里云服务器性能和稳定性都有保障,只是在大家都眼里都认为阿里云服务器价格可能会比较贵,事实上普惠上云,阿里云服务器价格其实很优惠,尤其是2024年开始,阿里云服务器又降价,大家可以看下2024年阿里云服务器最新优惠价格,上云就上阿里云!
1303 0
|
运维 Linux 数据处理
探索Linux命令lsinitrd:深入了解与实用指南
`lsinitrd`命令在Linux中用于查看initrd文件内容,它是系统引导时加载驱动和模块的关键组件。此命令无需挂载,支持gzip和cpio格式,提供详细输出,包括文件属性。使用`-a`, `-l`, `-R`参数可调整显示方式。例如,`lsinitrd -l initrd.img-版本号`列出详细信息。注意权限,确保正确路径,操作前备份数据,并可与其他命令结合使用。
|
安全 C++
C++一分钟之-控制流:if语句与条件判断
【6月更文挑战第18天】在C++中,`if`语句是控制流的核心,用于条件判断和决策。简单`if`检查条件是否为真,执行相应代码;`if-else`添加了否定分支;而`if-else if-else`链处理多个条件。常见问题包括真假值混淆(非零为真)、逻辑运算符误用、缺少可读性以及边界条件忽视。通过明确比较、理解逻辑运算符和强化边界检查,可以提高代码质量。示例展示了根据成绩输出不同反馈,强调了逻辑的清晰性和可维护性。掌握`if`语句是编写有效逻辑的关键。
211 13
|
Prometheus 监控 Cloud Native
性能监控之 Golang 应用接入 Prometheus 监控
【8月更文挑战第4天】性能监控之 Golang 应用接入 Prometheus 监控
587 0
性能监控之 Golang 应用接入 Prometheus 监控
|
C++ 容器
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
【C++STL基础入门】list交换、翻转,排序、合并和拼接操作
1136 0
|
编解码 边缘计算 算法
一文详述流媒体传输网络MediaUni
LiveVideoStackCon2023上海站,阿里云视频云专场系列演讲-1
1119 0