云计算相关技术简介(五)-Neutron组件相关技术概念简介

Neutron组件模块是openstack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。本篇文章将简要介绍neturon网络组件的相关的技术的简要介绍,具体的相关技术的详细介绍后面会在实践环节安排专门的篇幅进行阐述。

一般的,OpenStack中网络实现包括vlan、gre、vxlan等模式,在OpenStack中,所有网络有关的逻辑管理均在Network节点中实现,例如DNS、DHCP以及路由等。Compute节点上只需要对所部署的虚拟机提供基本的网络功能支持,包括隔离不同租户的虚拟机和进行一些基本的安全策略管理(即security group)。安全组的对象是虚拟网卡,由L2 Agent来实现,比如neutron_openvswitch_agent 和 neutron_linuxbridge_agent,会在计算节点上通过配置 iptables 规则来限制虚拟网卡的进出访问。计算节点上运行着虚拟机。如果不启用 DVR 特性,则所有的网络相关的服务,都在网络节点上进行。即计算节点上的网络只需要实现二层转发即可。

GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的GRE,即original pkt/GRE/IP/Ethernet(从左到右layer依次降低)。隧道协议将这些其他协议的数据包重新封装在新的包头中发送。被封装的数据包在隧道的两个端点之间通过网络进行路由,被封装数据包在网络上传递时所经历的逻辑路径称为隧道。简单来说,隧道技术是一类网络协议,是将一个数据包封装在另一个数据包中进行传输的技术;使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。通过网络隧道技术,可以使隧道两端的网络组成一个更大的内部网络。

DVR(Distributed Virtual Router,DVR),按照 Neutron 原先的设计,所有网络服务都在网络节点上进行,这意味着大量的流量和处理,给网络节点带来了很大的压力。这些处理的核心是路由器服务。任何需要跨子网的访问都需要路由器进行路由。为了降低网络节点的负载,同时提高可扩展性,OpenStack 自 Juno 版本开始正式引入了分布式路由DVR特性(用户可以选择使用与否),来让计算节点自己来处理原先的大量东西向流量和非 SNAT 南北流量(有 floating IP 的 vm 跟外面的通信)。这样网络节点只需要处理占到一部分的 SNAT (无 floating IP 的 vm 跟外面的通信)流量,大大降低了负载和整个系统对网络节点的依赖。很自然的,FWaaS 也可以跟着放到计算节点上。DHCP 服务、VPN 服务目前仍然需要集中在网络节点上进行。

VXLAN,VXLAN(Virtual Extensible LAN)是一种用于解决数据中心内部网络限制和提高网络的灵活性与可扩展性的网络虚拟化技术。它于2011年被提出,旨在扩展和改进传统的虚拟局域网(VLAN)功能。VXLAN技术通过封装原始以太网帧(包含MAC地址、VLAN标签等)到UDP报文中来工作。这种封装允许VXLAN跨越不同的网络段和IP子网(将原始以太网帧作为应用数据用UDP协议进行封装),从而实现网络虚拟化功能。具体的关于VXLAN的详细介绍请参考引文。

VXLAN结构图

VXLAN现在是比较常用的SDN的虚拟网络的实现。这里将详细介绍一下相关的实现原理细节。上面就是VXLAN系统的网络结构图,对相关组成部分做一些介绍,如TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。VETH:虚拟ethernet接口(virtual eth),通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。在上图中的qbr-xxx/qbr-yyy一般简称为qbr。qbr是Quantum Bridge的缩写,而OpenStack网络组件的前一个名称就是Quantum,qbr就是虚拟网桥,用来做安全组控制的。qvb:neutron veth, Linux Bridge-side。qvo:neutron veth, OVS-side。br-int是集成的网桥,实现将数据包转化为VLAN包作用;br-tun是将VLAN进一步封装成VXLAN隧道技术,而且上图左边部分的这些虚拟实现都是在计算节点内部实现的相关的网络虚拟化功能。其中下面以出报文和入报文的过程示例进行一个简要的说明。

其中上图中的计算节点和网络节点通过物理交换机相连,把vxlan的包封装成IP包进行传输。

出报文的转换过程 虚拟机(VM)发出Untag报文 经过qbr-xxx后,依然是Untag报文 进入br-int时,打上VLANID=50的标签 离开br-int时,VLANID=50 进入br-tun,VLANID=50 离开时,VLAN封装为VXLAN,且VNI=100 注:出br-tun时,VLAN变为VXLAN,并转为VNI=100。

入报文的转换过程 报文从host到br-tun之前,是VXLAN报文,VNI=100; 进入到br-tun时,被转换为VLAN报文,VID=50; 从br-tun离开到进入br-int后,都是tag报文,VID=50; 出br-int时,变为Untag; 通过qbr-xxx进入到虚拟机(VM) 网络节点担负着进行网络服务的任务,包括DHCP、路由和高级网络服务等。一般包括三个网桥:br-tun、br-int 和 br-ex。一个是挂载的物理接口上,如 eth0,网包将从这个接口发送到外部网络上。另外一个是 qg-xxx 这样的接口,是连接到 router 服务的网络名字空间中,里面绑定一个路由器的外部 IP,作为 nAT 时候的地址,另外,网络中的 floating IP 也放在这个网络名字空间中。

虚拟网络数据报文的流转过程 虚拟机发出虚拟数据帧

源虚拟机(VM)的应用程序生成用户数据报文,这个报文包含: 源 IP 和 MAC(虚拟机的 IP 和 MAC 地址)。 目标 IP 和 MAC(目标虚拟机的 IP 和 MAC 地址)。 这些信息构成一个标准的二层以太网帧。 虚拟交换机处理数据帧

数据帧到达虚拟交换机(vSwitch): 虚拟交换机根据目标 MAC 地址查找转发表(Forwarding Table)。 目标 MAC 地址会映射到目标虚拟机所在的物理服务器的 IP 地址(即 VXLAN 隧道的终端点,TEP 地址)。 数据帧封装

虚拟交换机将原始虚拟二层数据帧封装为一个 VXLAN 数据包:

外部 UDP 包头:包含源物理服务器 IP 和目标物理服务器 IP(TEP 地址)。 VXLAN 包头:包含 VNI(Virtual Network Identifier),用于标识虚拟网络。 原始二层数据帧:保持完整,作为 UDP 数据包的负载。 封装后的报文结构如下:

diff Copy code +-------------------------+ | 外部 IP 包头 | (源物理 IP,目标物理 IP) +-------------------------+ | UDP 包头 | (源端口,目标端口) +-------------------------+ | VXLAN 包头 | (包含 VNI) +-------------------------+ | 原始以太网帧(用户数据)| (源 MAC,目标 MAC,源 IP,目标 IP) +-------------------------+