摘要

在大型的公司中都是采用的是虚拟机计算机进行服务的部署,特别是最近的docker与k8s中的虚拟化网络的也是越来越重要了。对于在工作中,我们接触到虚拟网络模型有:host模型,bridge模型,NAT模型,以及overlay network模型。本博文主要对以上虚拟网络模型进行介绍,帮助大家更好的理解虚拟网络模型的原理,学会在具体的场景下使用不同的网络模型来完成项目。

一、Host-only 网络模式

虚拟机的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。这种模式下,所有局域网内所有虚拟机互通,但虚拟机无法访问外网,与外网完全隔离。此种模式同样可以配置集群,但是集群无法访问外网,比较适合公司内网。

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_虚拟网络

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_虚拟网络_02

1.1 Host-only Adapter(主机模式)

虚拟机与主机的关系

默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。

虚拟机与网络主机的关系

默认不能相互访问,原因同上,通过设置,可以实现相互访问。

虚拟机与虚拟机的关系

默认可以相互访问,都是同处于一个网段。

1.2 设置仅host模式

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_计算机网络_03

二、Bridge网络模型

基于以上的拓扑测试,桥接方式虚拟出来的系统就像是在局域网中单独存在的独立“物理机”一样,它可以访问同一局域网内任何一台机器,也可以单独通过局域网网关或者路由访问外网。不过需要在每台机器上都要去单独配置IP,网关、网段、DNS等。由于这个虚拟系统是局域网中的一个独立的主机系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。利用相同的网关网段配置,Bridged可用来配置集群。将网络设置为桥接模式的时候:此时宿主机的物理网卡成为交换机。内核模拟出一个虚拟网卡给宿主机用

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_04

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_05

2.1 Bridged Adapter(网桥模式)

虚拟机与主机的关系

可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于网络中其他主机的关系

可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机与虚拟机的关系

可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。

在使用桥接模式的时候有问题:应为在一个局域网中如果主机特别多时候会出现网络风暴,出现网络阻塞的情况。这样不利用虚拟机进行网络通信。

2.2 设置桥接模式

首先,安装完系统之后,在开启系统之前,点击“编辑虚拟机设置”来设置网卡模式。

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_06

在进入系统之前,我们先确认一下主机的ip地址、网关、DNS等信息。window键+r 进入DOS命令窗口,输入:cmd     在输入:ipconfig

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_07

然后,进入系统编辑网卡配置文件,命令为vi /etc/sysconfig/network-scripts/ifcfg-eth0。编辑完成,保存退出,然后重启虚拟机网卡,使用ping命令ping外网ip,测试能否联网。 能ping通外网ip,证明桥接模式设置成功。

三、NAT网络模型

  • 使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。
  • NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的。
  • 虚拟系统也就无法和本局域网中的其他真实主机进行通讯
  • Guest访问网络的所有数据都是由主机提供的,Guest并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Guest的存在。
  • Guest可以访问主机能访问到的所有网络,但是对于主机以及主机网络上的其他机器,Guest又是不可见的,甚至主机也访问不到Guest

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_08

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_虚拟网络_09

3.1 虚拟机与主机的关系

依靠物理主机的VMnet8网卡上网。虚拟机可以互Ping通,前提是物理主机的VMnet8网卡的网关要与虚拟机一样!如果不在同一个网关,会出现虚拟机能Ping通物理主机,但物理主机无法Ping通虚拟机的情况。注意此种情况也是实际应用场景之一。下面模拟场景:

物理主机(WINDOWS)IP信息:

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_10

虚拟机(Linux) IP信息 :

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_11

测试结果:物理主机 Ping 虚拟机

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_计算机网络_12

 虚拟机1Ping物理主机

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_计算机网络_13

 虚拟机1Ping外网

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_计算机网络_14

虚拟机1Ping虚拟机2

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_15

现修改物理主机网段为10,使其与虚拟机不同。

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_NAT_16

物理主机Ping虚拟机1

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_虚拟网络_17

虚拟机1Ping物理主机

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_虚拟网络_18

  1. NAT方式使虚拟机接入外网方便,不需要进行其他配置,只需要物理主机可以上网即可
  2. 如果想安装个虚拟机,又不想配置网络,就推荐用NAT方式上网
  3. NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。(不能用NAT配置集群的原因)

3.2 设置NAT模式

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_19

Internal(内网模式):内网模式,顾名思义就是内部网络模式:虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。虚拟机与主机的关系 不能相互访问,彼此不属于同一个网络,无法相互访问。 虚拟机与网络中其他主机的关系 不能相互访问,理由同上。 虚拟机与虚拟机的关系 可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。

四、overlay network模型

对 Kubernetes 网络模式稍有了解的朋友都应该听说过 Overylay网络,Overlay 网络其实并不是一门新技术,Overlay 网络其实是将已有的物理网络(Underlay网络)作为基础,在其上建立叠加的虚拟网络,实现网络资源的虚拟化。近年来云计算,虚拟化,容器化技术的演进促进了网络虚拟化技术的应用。由于Overlay网络是建立在已有物理网络上的虚拟网络,具有独立的控制和转发平面,所以我们介绍 Overlay 网络的同时也一并说一哈 Underlay 网络。Underlay 网络是专门用来承载用户 IP 流量的基础架构层,它与 Overlay 网络之间的关系有点类似物理机和虚拟机。Underlay 网络和物理机都是真正存在的实体,它们分别对应着真实存在的网络设备和计算设备,而 Overlay 网络和虚拟机都是依托在下层实体使用软件虚拟出来的层级。如下图:

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_20

4.1 overlay network 常见应用场景

虽然 Kubernetes 目前已经是容器编排领域的事实标准了,但是依然有很多传统行业仍然在使用物理机,虚拟机部署服务。而日常的更新维护中,集群中的大规模虚拟机迁移是比较常见的事情。当虚拟机所在的宿主机因为维护或者其他原因宕机时,当前实例就需要迁移到其他的宿主机上,为了保证业务不中断,我们需要保证迁移过程中的 IP 地址不变,因为 Overlay 是在网络层实现二层网络,所以多个物理机之间只要网络层可达就能组建虚拟的局域网,同样的通过迁移虚拟机来提高容错性。因此 Overlay 网络为虚拟机的迁移提供了非常好的基础。

而 Overylay 在 Kubernetes 中容器跨主机网络通信中一样扮演者很重要的作用,其中比较主流的方案是基于 Flannel 的 VXLAN 后端实现,而 VXLAN 是 Overylay 网络的一种技术实现

4.2 Kubernetes中的Overlay实现

首先我们来简单了解一下 VXLAN(Virtual eXtensible LAN)技术的原理,由于VXLAN 可以完全在内核态实现封装和解封装数据包的工作,他是在现有的三层网络之上,覆盖一层虚拟的、由内核 VXLAN 模块负责维护的二层网络,使得连接在这个 VXLAN 二层网络上的虚拟机或者容器都可以像在同一个局域网(LAN)里那样自由通信。当然现实情况是,可能虚拟机或者容器可能分布在不同机器上,或者不同区域的物理机房里。而为了打通两边的二层网络, VXLAN 会在宿主机上设置一个特殊的网络设备作为「隧道」的两端。这个设备就叫做 VTEP。而 VTEP 设备的作用就是进行封装和解封装二层数据帧(Ethernet frame);而且这个工作的执行流程,全部是在内核里完成的(因为 VXLAN 本身就是 Linux 内核中的一个模块)。我们来看一下这幅图,它可以清晰表达出在 Kubernetes 中基于 Flannel 的 VXLAN 网络跨主机容器通信的过程:

计算机网络——虚拟网路模型原理HTTPS协议原理DNS协议(域名解析)原理_IP_21

上图中,Node1 的容器 1 访问 Node2 的容器 2 整个过程可以简单描述为以下几个步骤:

  • Node1 上的容器 1 从其 eth0 网卡将 IP 数据包通过 cni0,被路由到 flannel0。(其实就是 VETP )
  • 而 flannel0 从收到的数据包中获取目的 MAC 地址;
  • 然后在本地的转发表中查找该 MAC 地址所在服务器的 IP 地址;
  • 然后将虚拟网络标识符(VxLAN Network Identifier 即 VNI)以及原始的 IP 数据包作为 Payload ,构建新的 UDP 数据包;
  • 将新的 UDP 数据包通过 Node1 的 eth0 网卡发送到 Node2;
  • Node2 的 eth0 网卡将数据包发送给 Node2 的 flannel0;
  • flannel0 收到数据包后,去掉 UDP 数据包中的协议头;
  • 查看数据包中 VNI;
  • 将 IP 数据包转发给 Node2 上的容器2;

五、虚拟网络模型总结

VMware中NAT模式与桥接模式的区别

  1. NAT模式:使用Vmnet8网卡,宿主机和虚拟机可以互相通信,但局域网环境中其他主机/终端设备不能访问虚拟机,因为IP不在同一个网段。需要注意的是在该模式下虚拟机的子网掩码、网关、DNS要与网卡保持一致。适用场景:IP地址紧张的情况以及用来学习研究使用
  2. 桥接模式(bridged):该模式使用Vmnet0网卡,虚拟机和宿主机在同一网段,局域网中所有设备皆可以通信,可以看做是一台独立的主机。主要宿主机联网,那么虚拟机也会联网。但是静态IP地址容易导致端口冲突。要注意的是虚拟机配置的子网掩码、网关和DNS需要与主机网卡一致。使用场景:虚拟主机作为开发环境或者测试环境,需要被局域网中电脑访问。

参考博文

云原生时代 Overlay 网络的应用 - 知乎

虚拟机的几种网络连接方式_从菜鸟到菜菜鸟