4.容器虚拟化网络概述

    技术2025-10-23  7

    ​  本文章,主要描述容器可以通过那些方式来实现对其他容器或主机之间的访问,其中容器可能位于同一物理主机,也可能位于不同物理主机

    ​  另外,通过对比,进而引申出哪种网络形式更为合理,为下一步介绍docker网络做铺垫

    1.容器/名称空间直接通过物理网卡连接网络

    即每个网卡对应一个名称空间/容器,这样可以保证每一个名称空间可以和外部通过对应的网卡进行通信

    如果名称空间的数量超出网卡数量怎么办?

    2.采用虚拟网卡方式进行通信

    ​  如上所属,若采取容器与物理网卡一对一的方式进行网络连接通信,那么当容器数量超出网卡数量时该怎么办?此处引入虚拟网卡

    关于Linux内核实现虚拟网卡介绍

    linux内核支持两种级别设备的模拟:二层设备&三层设备

    二层设备:工作在链路层,能封装物理报文,实现在各网络设备之间进行报文转发功能的组件(物理网卡本身也属于二层)

    ​  二层设备的功能,完全可以在linux之上利用内核当中对二层虚拟设备的支持创建虚拟网卡接口来实现,每一个虚拟网卡接口是成对出现的,可以模拟/理解为一根网线的两头(一头模拟连接主机,一头模拟连接交换机;即一个网卡连接主机,一个网卡连接交换机);

    linux内核原生支持二层虚拟网桥设备,即用软件来构建一个交换机(brctl工具实现);

    容器实现虚拟网卡

    ​  由软件实现的虚拟机(如docker容器),自己创建一个网卡有两头,一头分配给名称空间,一头分配给交换机,就相当于模拟了一个主机连接到了交换机(如linux内核构建的网桥),这样多个虚拟机/名称空间都可以这样进行连接交换机(若两个名称空间的网段相同,双方还能进行通信)

    补充知识:当前复杂的生产环境,往往网络不仅是工作在物理层面上,在应用层面上也会进行划分/规划

    OVS:OpenVSwitch/开源的虚拟交换机:可软件虚拟二层三层的复杂网络环境SDN:Software Driving Network:软件驱动的网络

    3.一台物理机上的多个容器之间的通信

    同一台主机上的虚拟交换机,可以通过虚拟的路由器实现

    ​  linux内核自己就可以做路由器使用,通过iptables即可实现;linux可以单独再做一个容器,这个容器仅运行一个linux的内核,仅做报文转发功能,也就是仅用作一个路由器使用

    4.不同物理机上的容器之间的通信

    不同主机上的容器/虚拟机之间如何通信?

    物理桥接技术

    物理桥桥接:把物理网卡当交换机来用,把所有的报文先发到物理网卡,物理网卡通过目标mac来判定时转发给哪个容器/虚拟机,或者转发给哪个物理网卡/物理机

    物理网卡当交换机来用,能接收不是自己mac的报文;

    而转发给内部的虚拟机/容器,真正到达本机的报文,可以通过再做一个虚拟网卡/软网卡,专门为物理机转发报文

    此时就没有了上述描述的虚拟交换机的概念了

    注:如果大规模容器/虚拟机采用桥接的方式,就很容易产生风暴

    NAT技术

    鉴于桥接带来的风暴风险,即不交接又可以与外部通信的方式-NAT技术

    通过NAT技术通信,过于复杂,不同主机之间容器通信会经过两层NAT(SNAT+DNAT),效率很低

    4.Overlay Network 叠加网络

    ​  鉴于上述中,利用物理桥接技术容易产生风暴,而NAT技术又会导致效率低下;因此,我们引入了叠加网络(Overlay Network)的概念,而叠加网络是基于隧道实现的一种网络途径

    基础网络描述

    ​  多台物理机,物理机物理网卡,虚拟出一个桥,各容器/虚拟机连接到虚拟桥上,通信时借助物理网络来完成报文的隧道转发,从而可以实现不同主机上的容器互相可通信

    ​  物理主机之间通过物理网络连接在一起,不同主机上的两台容器C1(192.168.1.3)和C2(192.168.1.5),同网段,但是他们和物理网络不同段;当C1发报文给C2时,虚拟桥发现C2不在本物理机上,于是报文会通过物理网卡发出(通过隧道转发)

    隧道转发

    在转发前,会对原报文进行再次的封装(三层的封装),如下

    ​  即,原报文中,Sip=C1_ip,Dip=C2_ip 即源目的容器的ip,再在原报文的基础上增加一个报文头,头部信息中Sip=H1_ip,Dip=H2_ip即源目的物理主机的ip

    ​  在转发时,就会先将报文根据头部的物理主机IP转发到对应的物理主机,然后再根据原始报文的目的容器IP转发给具体的容器,这样就实现了隧道转发

    ​  上述,在封装二层报文之前,又再原三层报文的基础上封装一次三层,也就是实现了一个两级三层封装,从而实现了报文转发。这种用一个ip去承载另一个ip,称之为隧道

    叠加网络

    以上这种网络,即为叠加网络/Overlay Network,基于隧道叠加实现的另外一层网络途径

    Processed: 0.010, SQL: 9