一、概念
1.1 PNF
物理网络功能 (PNF
) 是支持网络功能的物理设备。PNF
通常由网络设备厂商(Cisco
、华为等)通过专用硬件实体提供软件功能。部署在网络中的PNF
可能包括 CPE
路由器、VPN
网关和防火墙设备,物理网络功能 (PNF
)直接在物理服务器上运行应用程序,这是最传统的运行应用程序方式
1.2 VNF
虚拟网络功能 (VNF
) 是在虚拟环境中运行的网络功能,包括VNF
和EMS
,VNF
网络功能,EMS
为单元管理系统,对VNF
的功能进行配置和管理。可以理解为VNF
是NFV
架构中的虚拟网络功能单元。可以理解为对网络中现有物理网元进行功能虚拟化的过程,将以软件模块形式部署在NFVI
提供的虚拟资源上,从而实现网络功能的虚拟化
1.3 虚实互联
NFV
的具体场景中往往包括了PNF-PNF
、VNF-PNF
以及PNF-PNF
三种连接方式
-
VNF-VNF
连接由虚拟组件实现,链路性能取决于虚拟组件的报文转发实现 -
PNF-PNF
则是依赖物理介质,完全由物理介质的网络性能决定的。 -
PNF-VNF
连接,也被称作为虚实互联,VNF
是以VM
或者容器的形式运行在宿主机上,因此在同一台宿主机上可能会有多个VNF-PNF
连接需要设置,而宿主机一般而言也具备了多个可用的物理接口
二、在单个物理接口上实现任意个虚实互联接口
最简单的一种情况,在物理服务器上拥有足够的网络接口用于虚实互联功能,在这种情景下,可以直接把物理接口以直通方式连接到容器或者VM
上。在LXD
中这种接口称为physical
类型,连接后对应的物理接口从宿主机上删除,容器中出现该物理接口。因此,该接口的IP地址、MAC地址、MTU、VLAN
设置等均由容器管理,该接口的属性也和在宿主机上运行完全一致。
但是,物理接口的数量在NFV
环境中往往是不够的,尤其是在宿主机上运行了相当多的VNF
时这种情况更加常见。在这种情况下,需要使用一些策略,较为常见的方式是使用bridge
的模式。将物理接口连接到网桥上,并为所有需要连接的容器分配veth
类型的接口对,从而将这些容器也连接到网桥上。数据包在途径网桥时将根据MAC
地址进行转发。
三、物理端口聚合
针对网络端口的带宽需求不能满足VNF-PNF
连接的情况,需要首先使用链路聚合技术将多个物理端口聚合。链路聚合将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定网络封包从哪个成员端口发送到对端的交换机。当交换机检测到其中一个成员端口的链路发生故障时,就停止在此端口上发送封包,并根据负荷分担策略在剩下的链路中重新计算报文的发送端口,故障端口恢复后再次担任收发端口。链路聚合在增加链路带宽、实现链路传输弹性和工程冗余等方面是一项很重要的技术。
Linux
内核提供了两种类型的链路聚合模块,分别是bonding
和teaming
,其中应用的较多的是bond
。bond
模块提供了绑定/集成多个网卡作为一个虚拟逻辑网口的功能。bond
提供了7种模式供用户选择,可以提供负载均衡、主-备份、平衡轮转等多种功能。
四、实验
对于已经生成的网络拓扑,期待使用网桥桥接的方式来实现虚实互联
4.1 起始想法
通过网桥将容器和虚拟主机:容器连接虚拟主机,相对困难,碰到的问题是,网桥两端,一边是容器,一边是虚拟主机,无法通过相同的命令连接
4.2 最终想法
网络设备,也称为网络接口控制器或NIC,提供与网络的连接。但是physical
目标设备将从主机中消失并出现在实例中(这意味着每个目标设备只能有一个NIC
)
nictype
可以使用或选项添加以下 NIC network
:
bridged
:使用主机上的现有网桥并创建虚拟设备对以将主机网桥连接到实例。macvlan
:在现有网络设备的基础上设置新的网络设备,但使用不同的 MAC 地址。sriov
:将启用SR-IOV
的物理网络设备的虚拟功能传递到实例中。physical
:将物理设备从主机传递到实例。目标设备将从主机中消失并出现在实例中。
Lxc
封装了方法,即将物理设备从主机传递到实例
lxc config device add <instance_name> <device_name> nic nictype=<nic_type> ...
所以我期待的步骤是:
- 按照规则,添加的网卡会在主机中消失,假如我们绑定了原先唯一存在的网卡
ens33
,那么之后它便会消失,为了保证ubuntu
虚拟主机有网,那么为虚拟主机创建一个新的网卡接口ens37
- 给
LxcH2
创建一个网卡接口eth1
,用来和虚拟主机连接 - 利用网络控制
physical
类型接口,将ens37
和eth1
连接起来 - 保证可以利用
ubuntu
虚拟主机可以访问网络拓扑中的任意路由设备,我们测试访问LxcH1
,即192.0.1.1
(网络拓扑是提前配置完毕,拓扑中路由器可连通)
则具体步骤如下:
为
ubuntu
分配地址和网卡
在虚拟机下创建一个新的网卡,名字为ens37
将
Ubuntu
设置为静态ip
同时设置网关
这里必须要设置为静态ip
,同时设置网关,不然数据流量会走默认的网关出去,原先因为这个错误,耽误了好长时间,其中这里的网关地址[192.168.31.80
]为LxcH2
创建网卡地址
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: false
addresses: [192.168.31.21/24]
gateway4: 192.168.31.80
为
LxcH2
分配地址和网卡
给LxcH2
创建一个网卡,用来和物理主机连接
vi /etc/netplan/10-lxc.yaml
添加如下内容
network:
version: 2
ethernets:
eth1:
dhcp4: false
addresses: [192.168.31.80/24]
将网络重启
netplan apply
将
LxcH2
连接到虚拟主机的物理网卡(重要)
# 将容器LxcH2的eth1接口设置为物理连接,同时设置父接口为ens37
lxc config device add LxcH2 eth1 nic nictype=physical parent=ens37
# 移除语句如下
lxc config device remove LxcH2 eth1
可以通过如下语句查看网卡是否被添加
lxc config device show LxcH2
测试连接
traceroute 192.0.1.1
证明确实走了中间的网络拓扑,虚拟机可以连通SR
网络拓扑云