1、Linux网络虚拟化基础
Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟网卡(vNIC)和虚拟交换机提供,各个NIC连接在vSwitch的端口上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络
网卡虚拟化:TAP、TUN、VETH
交换机虚拟化:Linux Bridge、Open vSwitch
网络隔离:Network、Namespace
Linux 内核通过 TAP 和 TUN 设备向绑定该设备的用户空间程序发送数据。
Linux Bridge结构如上图所示,Bridge设备br0绑定了实际设备eth0与虚拟设备tapo和tap1,但是对于Hypervisor的网络协议栈上层来说,只能看到br0,并不会关心桥接的细节。
当这些设备接收到数据包时,会将其提交给br0决定数据包的去向,br0会根据MAC地址与端口的映射关系进行转发。
因为Bridge工作在二层(相当于二层交换机功能),所以绑定在br0上的从设备eth0、tapo与tap1均不需要再设置IP地址,对于上层路由器来说,它们都位于同一子网,因此只需为br0设置IP地址。因为br0具有自己的IP地址,bro可以被加入路由表,并利用它来发送数据,但是最终实际的发送过程则是由某个从设备来完成。
即使eth0原本具有自己的IP地址,但是在被绑定到br0上后,它的IP地址会失效,用户程序不能接收到这个IP地址的数据。只有目的地址为bro的IP地址的数据包才会被接收
Open vSwitch负责连接VNIC与物理网卡,同时桥接同一物理Server内的各个vNIC。其实Linux Bridge已经能够很好地充当这样的角色,为什么我们还需要Open vSwitch?
Linux Bridge用于同网段VM,Open vSwitch跨网段
因为Open vSwitch的引入使得云环境中对虚拟网络的管理及对网络状态和流量的监控变得更容易。
我们可以像配置物理交换机一样,将接入Open vSwitch的各个VM分配到不同的VLAN中以实现网络的隔离。我们也可以在Open vSwitch端口上为VM配置Qos,同时Open vSwitch也支持包括NetFlow、sFlow等很多标准的管理接口和协议,我们可以通过这些接口完成流量监控等工作。
Open vSwitch在云环境中的各种虚拟化平台(如Xen与KVM)上实现了分布式的虚拟交换机( Distributed Virtual Switch ),一个物理Server上的vSwitch可以透明地与另一个物理Server上的vSwitch连接在一起。
因为VRF中的路由是相互隔离的,VRF可以共享同一物理网络,但它们通具有相同的IP地址或网段。
2、Neutron简介
定位:Neutron基于软件定义网络的思想,实现了网络虚拟化下的资源管理。实现上充分利用了Linux系统上的各种网络相关的技术。
灵活性:可以实施插件以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。
实际上,Neutron仅仅是一个管理系统/控制系统,它本身并不能实现任何网络功能它仅仅是为Linux相关功能做一个配置或者驱动而已。本质Neutron是借助Linux来实现网络功能的。
OpenStack所在的整个物理网络在Neutron中被泛化为网络资源池,通过对物理网络资源进行灵活的划分与管理,Neutron能够为同一物理网络上的每个租户提供独立的虚拟网络环境。
如上图所示,在Neutron网络结构中,首先应该至少有一个由管理员所创建的外部网络对象,用来负责OpenStack环境与Internet的连接,然后租户可以创建自己的私有的内部网络并在其中创建虚拟机。为了使内部网络中的虚拟机能够访问互联网,必须创建一个路由器将内部网络连接到外部网络。
Network、Subnet、Router下面会详细讲解
3、Neutron概念
Local: 与其他网络和节点隔离。Local网络中的虚拟机只能与位于同一节点上同一网络的虚拟机通信,Local网络主要用于单机测试。
Flat: 无VLAN tagging的网络。Flat网络中虚拟机能与位于同一网络的虚拟机通信并可以跨多个节点。
VLAN: 802.1g tagging网络。VLAN是一个二层的广播域,同一VLAN中的虚拟机可以通信,不同VLAN只能通过Router通信。VLAN网络可跨节点,是应用最广泛的网络类型。
VXLAN: 基于隧道技术的overlay网络(覆盖网络(Overlay Network)是在网络之上创建的一种虚拟网络)。VXLAN网络通过唯一的segmentation ID (也叫 VNI)与其他VXLAN网络区分。VXLAN中数据包会通过VNI封装成UDP包进行传输。因为二层的包通过封装在三层传输,能够克服VLAN和物理网络基础设施的限制。
GRE: 与VXLAN类似的一种overlay网络,主要区别在于使用IP包而非UDP进行封装。生产环境中,一般使用的是VLAN、VXLAN或GRE网络
Neutron概念-Subnet子网
一个IPv4或者IPv6地址段。虚拟机的IP从Subnet中分配。每个subnet需要定义IP地址的范围和掩码
Subnet必须与Network关联
Subnet可选属性: DNS,网关IP,静态路由
Neutron概念-Port 端口
逻辑网络交换机上的虚拟交换端口
虚拟机通过Port附着到Network上
Port可以分配IP地址和Mac地址
Neutron概念-Fixed IP固定IP
分配到每个端口上的IP,类似于物理环境中配置到网卡上的IP
Provider Network,由OpenStack管理员创建的,直接对应于数据中心现有物理网络的一个网段。Provider Network通常使用VLAN或者Flat模式,可以在多个租户之间共享。Provider Network 是基于物理网络创建的。
Provider Network,由OpenStack管理员通过Neutron创建并用来映射一个外部网络外部网络并不在Neutron的管理范围内,因此Provider Network的作用就是将Neutron内部的虚拟机或网络通过实现的映射与外部网络联通。
不同Self-service Network中的网段可以相同,类似于物理环境中不同公司的内部网络。Self-service Network如果需要和外部物理网络通信,需要通过Router,类似于物理环境中公司上网需要通过路由器或防火墙。所以这里的Self-service Network类似于我们在真实网络中常常说的私网。
External Network类似于物理环境中直接使用公网IP网段,不同的是,OpenStack中External Network对应的物理网络不一定能直连Internet,有可能只是数据中心的一个内部私有网络,实现虚拟机和外部网络通信
在安全组中可以基于不同的协议,不同的端口号,不同的目的和源地址进行策略配置
4、Neutron架构
Neutron 架构原则
统一API
核心部分最小化
可插入式的开放架构
可扩展
Message Queue
Neutron-server使用Message Queue与其他Neutron agents进行交换消息,但0是这个Message Queue不会用于Neutron-server与其他OpenStack组件(如nova ) 进行交换消息。
L2 Agent
负责连接端口( ports )和设备,使他们处于共享的广播域( broadcastdomain)。通常运行在Hypervisor上
L3 Agent
负责连接tenant网络到数据中心,或连接到Internet。在真实的部署环境中,0般都需要多个L3 Agent同时运行
ML2= Modular Layer 2。
Core plugin 提供基础的网络功能,使用不同的drivers调用不同的底层网络实现技术ML2 Plugin的Drivers主要分为以下两种:
Type Driver: 定义了网络类型,每种网络类型对应一个Type Driver;Mechanism Driver: 对接各种二层网络技术和物理交换设备,如OVS,LinuxBridge等。Mechanism Driver从Type Driver获取相关的底层网络信息,确保对应的底层技术能够根据这些信息正确配置二层网络。
L3 Service Plugin主要提供路由,浮动IP服务等
5、典型操作机流程
Neutron操作-常用命令
neutron net-create 创建网络
neutron net-list 查看网络列表信息
neutron subnet-list 查看子网列表信息
neutron port-create 创建端口
neutron router-interface-add添加路由器接口
neutron agent-list 查看代理列表信息
可以先使用help命令,查看Neutron命令的具体使用方法,主要包括如何管理网络、子网、端口、路由器、浮动IP、安全组及规则、以及虚拟机实例访问测试等
6、网络流量分析
Neutron网络典型场景介绍
。Neutron支持多种多样的网络技术和类型,可以自由组合各种网络模型如下两种网络模型是OpenStack生产环境中常用的:
Linux Bridge + Flat/VLAN网络
。仅提供简单的网络互通,虚拟网络、路由、负载均衡等由物理设备提供。网络简单、高效,适合中小企业私有云网络场景 Open vSwitch + VXLAN网络
。提供多租户、大规模网络隔离能力,适合大规模私有云和公有云网络场景
Linux Bridge + VLAN场景说明
使用Linux Bridge + VLAN实现Provider Network,网络流量可以分为如下几种:
南北向流量: 虚拟机和外部网络( 例如Internet) 通信的流量
东西向流量: 虚拟机之间的流量
Provider Network和外部网络之间的流量: 由物理网络设备负责交换和路由
后续的网络流量分析基于如下示例:
Provider network 1 ( VLAN )
VLAN 101 ( tagged ),IP 地址段203.0.113.0/24,网关203.0.113.1 ( 物理网络设备上)
Provider network 2 ( VLAN )
VLAN 102 ( tagged ),IP地址段192.0.2.0/24,网关192.0.2.1 ( vRouter端口上)
以下步骤涉及计算节点1:
虚拟机数据包由虚拟网卡(1)通过veth pair转发到Provider Bridge上的端口( 2)
Provider Bridge上的安全组规则(3)检查防火墙和记录连接跟踪
provider Bridge上的VLAN子接口 ( 4)将数据包转发到物理网卡(5)
物理网卡(5)将数据包打上VLAN tag 101,并将其转发到物理交换机端口(6)
以下步骤涉及物理网络设备:
交换机从数据包中删除VLAN tag 101,并将其转发到路由器 (7)
路由器将数据包从Provider Network 1网关(8)路由到External网络网关(9)并将数据包转发到External网络的交换机端口(10)
交换机将数据包转发到外部网络( 11)
外部网络( 12)接收数据包
以下步骤涉及计算节点1:
虚拟机1数据包由虚拟网卡(1)通过veth pair转发到Provider Bridge上的端口( 2)
Provider Bridge上的安全组规则(3)检查防火墙和记录连接跟踪
Provider Bridge上的VLAN子接口(4)将数据包转发到物理网卡(5)
物理网卡( 5)将数据包打上VLAN tag 101,并将其转发到物理交换机端口 ( 6 )
以下步骤涉及物理网络设备:
交换机将数据包转发给计算节点2所连接的交换机端口(7)
以下步骤涉及计算节点2:
计算节点2的物理网卡(8)从数据包中删除VLAN tag 101,然后转发给0Provider Bridge的VLAN子接口(9)
Provider Bridge上的安全组规则(10)检查防墙和记录连接跟踪
Provider Bridge上的虚拟网卡(11)通过veth pair将数据包转发给虚拟机2的网卡(12)
以步骤涉及计算节点
虚拟机1数据包由虚拟网卡(1)通过veth pair转发到Provider Bridge上的端口( 2)
Provider Bridge上的安全组规则(3)检查防火墙和记录连接跟踪
Provider Bridge上的VLAN子接口 (4)将数据包转发到物理网卡(5)
物理网卡(5)将数据包打上VLAN tag 101,并将其转发到物理交换机端口(6)
以下步骤涉及物理网络设备:
交换机从数据包中删除VLAN tag 101,并将其转发到路由器 (7)
路由器将数据包从Provider Network 1网关(8)转发到Provider Network 2网关(9)
路由器将数据包发送到交换机端口( 10 )0
交换机将数据包打上VLAN tag 102,然后转发给计算节点1连接的端口(11)
以下步骤涉及计算节点1:
计算节点1的物理网卡(12 ) 从数据包中删除VLAN tag 102,然后转发给Provider Bridge的VLAN子接口(13)
Provider Bridge上的安全组规则( 14)检查防墙和记录连接跟踪0
Provider Bridge上的虚拟网卡(15)通过veth pair将数据包转发给虚拟机2的网卡(16)
场景说明
虚拟机运行在计算节点1上,使用Self-service network 1。0虚拟机将数据包发送到Internet上的主机。以下步骤涉及计算节点1:
实例接口(1)通过veth对将数据包转发到安全组网桥实例端口(2)D安全组网桥上的安全组规则(3)处理数据包的防火墙和连接跟踪安全组网桥OVS端口(4)通过veth对将数据包转发到OVS集成网桥安全组端口( 5)
OVS集成网桥为数据包添加内部VLAN标记。0
OVS集成桥为内部隧道ID交换内部VLAN标记。0
OVS集成桥接补丁端口(6)将数据包转发到OVS隧道桥接补丁端口(7)。oOVS隧道桥(8) 使用VNI 101包裹分组。
用于覆盖网络的底层物理接口(9)经由覆盖网络(10)将分组转发到网络节点0
以下步骤涉取奔差耙匙濒挛段蹦摆安抑网络节点:
覆盖网络的底层物理接口(11)将分组转发到OVS隧道桥( 12)。OVS隧道网桥解包并为其添加内部隧道ID。o
OVS隧道网桥为内部VLAN标记交换内部隧道ID。0
OVS隧道桥接补丁端口(13 )将分组转发到OVS集成桥接补丁端口(14)用于自助服务网络(15)的OVS集成桥接端口移除内部VLAN标记并将分组转发到路由器命名空间中的自助服务网络接口(16)
路由器将数据包转发到提供商网络的OVS集成桥接端口(18)。0
OVS集成网桥将内部VLAN标记添加到数据包。0
OVS集成桥接int-br-provider补丁端口(19 )将数据包转发到OVS提供程序桥接phy-br-provider补丁端口(20)。
OVS提供程序桥将内部VLAN标记与实际VLAN标记101交换0
OVS提供商桥接提供商网络端口 ( 21)将分组转发到物理网络接口(220物理网络接口通过物理网络基础设施将数据包转发到Internet ( 23)。0
场景说明:
虚拟机运行在计算节点1上,使用Self-service network 1。
Internet上的主机将数据包发送到虚拟机。以下步骤涉及网络节点:
物理网络基础设施(1) 将分组转发到提供者物理网络接口(2)提供商物理网络接口将数据包转发到OVS提供商网桥提供商网络端口(3)。
OVS提供程序桥将实际VLAN标记101与内部VLAN标记交换。0
OVS提供者桥接phy-br-provider端口(4)将数据包转发到OVS集成桥接int-br-provider端口(5)。
0
提供商网络(6)的OVS集成桥接端口删除内部VLAN标记,并将数据包转发到0路由器命名空间中的提供商网络接口(6)。
路由器将数据包转发到自助服务网络的OVS集成网桥端口(9)。0
OVS集成网桥为数据包添加内部VLAN标记0
OVS集成桥为内部隧道ID交换内部VLAN标记口
OVS集成桥接patch-tun补丁端口 ( 10)将数据包转发到OVS隧道桥接patch-int0补丁端口(11)。
OVS隧道桥(12) 使用VNI 101包裹分组。
用于覆盖网络底层物理接口(13) 经覆盖网络(14 )将分组转发到网络节点
以下步骤涉及计算节点:
覆盖网络的底层物理接口(15) 将分组转发到OVS隧道桥(16)。0OVS隧道网桥解包并为其添加内部隧道ID。0
OVS隧道网桥为内部VLAN标记交换内部隧道ID。0
0
OVS隧道桥接patch-int补丁端口(17)将数据包转发到OVS集成桥接patch-tun补丁端口(18 )。
OVS集成桥从数据包中删除内部VLAN标记
0
OVS集成桥安全组端口(19)通过veth对将数据包转发到安全组桥OVS端口( 20 )。
安全组网桥上的安全组规则(21)处理数据包的防火墙和连接跟踪安全组桥接实例端口(22)经由veth对将分组转发到实例接口(23 )