写点什么

6 种容器接入方式

作者:阿泽🧸
  • 2022-10-31
    北京
  • 本文字数:1622 字

    阅读完需:约 5 分钟

6种容器接入方式
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。

发布于: 刚刚阅读数: 4
用户头像

阿泽🧸

关注

还未添加个人签名 2020-11-12 加入

还未添加个人简介

评论

发布
暂无评论
6种容器接入方式_10月月更_阿泽🧸_InfoQ写作社区