六 种容器主要接入方式

简介: 【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。

相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
3056 4
|
监控 Unix Windows
Zabbix【部署 04】 Windows系统安装配置agent及agent2
Zabbix【部署 04】 Windows系统安装配置agent及agent2
1997 0
|
12月前
|
人工智能 资源调度 API
AnythingLLM:34K Star!一键上传文件轻松打造个人知识库,构建只属于你的AI助手,附详细部署教程
AnythingLLM 是一个全栈应用程序,能够将文档、资源转换为上下文,支持多种大语言模型和向量数据库,提供智能聊天功能。
8056 76
|
Kubernetes API 调度
在K8S中,说⼀下Pod状态有哪些?
在K8S中,说⼀下Pod状态有哪些?
|
IDE API 开发工具
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
|
API
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)
1343 0
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)
|
运维 Ubuntu 网络协议
Ubuntu系统下修改网卡IP地址
【7月更文挑战第3天】Ubuntu系统下修改网卡IP地址
2722 1
|
缓存 监控 前端开发
前端性能监控:从Lighthouse到Real User Monitoring
**前端性能监控关乎用户体验。Lighthouse是自动化审计工具,评估网页性能、最佳实践、可访问性等,通过CLI或Chrome DevTools使用。RUM则实时监控用户与网站互动,收集性能数据。两者结合,从开发到生产环境,全面优化前端性能,包括资源加载、代码优化、网络性能和用户体验。使用Lighthouse和RUM数据,结合CI/CD,持续改进并设定性能预算,采用SSR、Service Worker、Code Splitting等高级策略,确保高性能和用户满意度。**
464 2
|
存储 缓存 算法
交换机转发机制:存储转发与直通转发
交换机转发机制:存储转发与直通转发
2764 1

热门文章

最新文章