Openstack理论——Neutron中的插件与代理

前言:在前面介绍了Openstack的核心组件——Neutron的理论知识,这次将讲解Neutron中的插件与几个代理服务

文章目录

  • 一、ML2插件
    • 1.架构图
    • 2.概述
    • 3.举例
  • 二、Linux Bridge代理
    • 1.概述
    • 2.设备
    • 工作原理
  • 三、Open vSwitch代理
    • 1.Open vSwitch的设备类型
    • 2.Open vSwitch数据包流程
    • 3.Open vSwitch网络的逻辑架构
  • 四、DHCP代理
    • 1.DHCP主要组件
    • 2.DHCP代理的主要任务
    • 3.DHCP代理配置文件
    • 4.DHCP代理工作机制
  • 五、L3代理
    • 1. 路由( Routing )
    • 2. 通过网络名称空间支持网络重叠
    • 3. 源地址转换(Source Network Address Translation,SNAT)
    • 4. 目的地址转换( Destination Network Address Translation DNAT)与浮动IP地址
    • 5. 安全组( Security Group)
  • 六、FWaas防火墙
    • 1.概述
    • 2.两个版本:FWaas V1与 FWAaas V2

  • 层次结构图如下:

一、ML2插件

  • 作为一个Core Plugin,ML2能够实现network/subnet/port三种核心资源,同时它也实现了包括Port Binding等在内的部分扩展资源

1.架构图

Openstack理论——Neutron中的插件与代理_第1张图片

2.概述

  • ML2对二层的网络进行抽象,解锁了 Neutron所支持的网络类型(Type)与访问这些网络类型的虚拟网络实现机制( Mechansim),并通过驱动的形式进行扩展,不同的网络类型对应不同的类型的驱动( Type Driver),由类型管理器(Typer Manager)进行管理。不同的网络实现机制对应不同的机制驱动( Mechansiom driver),由机制管理器( Mechansim Manager)进行管理。这种实现框架使得ML2具有弹性,易于扩展,能够能活支持多种网络类型和实现机制

  • 类型驱动( Type Driver)

    • Neutron支持的每一种网络类型都有一个对应的ML2类型驱动,类型驱动负责维护网络类型的状态,执行验证、创建网络等工作

    • 目前 Neutron已经实现的网络类型包括Flat、 Local 、VLAN、 VXLAN、GRE

  • 机制驱动( Mechansiom driver)

    • Neutron支持的每一种网络机制都有一个对应的ML2机制驱动。机制驱动负责获取类型驱动维护的网络状态,并确保在相应的网络设备(物理或虚拟的)上正确实现这些状态

3.举例

  • 类型驱动VLAN,机制驱动为 Linux Bridge,如果创建VLAN10,那么VLAN的类型驱动会确保将VLAN10的信息保存到 Neutron数据库中,包括网络的名称、 VLAN ID等,而 Linux Bridge机制驱动会确保各个节点上的 Linux Bridge代理在物理网卡上创建ID为10的VLAN设备和 Bridge设备,并将二者进行桥接
  • 目前 Neutron已经实现的网络机制有3种类型
    • 基于代理( Agent-based):包括 Linux bridge、 Opens vSwitch
    • 基于控制器( controller-Based):包括 OpenStacDaylight、 VMWavre NSX等
    • 基于物理交换的:包括 Cisco Nexus、 Arista、 Mellanox等
  • 扩展资源
    • ML2作为一个 Core Plugin,在实现网络、子网和端口核心资源的同时,也实现了包括端口绑定( Port Bindings)、安全组( Security Group)等部分扩展资源

二、Linux Bridge代理

1.概述

  • Linux Bridge是成熟可靠的 Neutron二层网络虚拟化技术,支持 Local、Flat、VLAN、VXLAN这四种网络类型,目前不支持GRE
  • Linux Bridge可以将一台主机上的多个网卡桥接起来,充当一台交换机,它可以桥接物理网卡,又可以是虚拟网卡,用于桥接虚拟机网卡(虚拟机网卡)的是Tap接口,这是一个虚拟机出来的网络设备,称为Tap设备,作为网桥的一个端口,Tap接口在逻辑上与物理接口具有相同的功能,可以接收和发送数据包

2.设备

  • 如果选择 Linux Bridge代理,在计算机节点上数据包从虚拟机发送到物理网卡需要经过以下设备:
    • 如果选择 Linux Bridge代理,在计算机节点上数据包从虚拟机发送到物理网卡需要绎过下设备
    • Tap接口( Tap interface):用于网桥虚拟机的网卡,命令为 tapXXX
    • Linux网桥( Linux Bridge):作为二层交换机,命令为 brqxxxx
    • VLAN接口( VLAN Interface):在VLAN网络中用于连接网桥,命名为 ethx.y(ethx为物理网卡名称,y为VLAN ID)
    • VXLAN接口( VXLAN Interface):在VXLAN网络中用于连接网桥,命名为 vxlan-z(z是VNID)
    • 物理网络接口:用于连接到物理网络

工作原理

  • 计算节点上的 Linux Bridge环境下的Flat网络和VLAN网络,下面个2个图其中网桥是核心。VLAN网络有2个VLAN有自己的网桥,实现了基于VLAN的隔离,如果改用VXLAN,其中的VLAN接口换成VXLAN接口,可以命令为vxlan101和vxlan-102
    Openstack理论——Neutron中的插件与代理_第2张图片
    Openstack理论——Neutron中的插件与代理_第3张图片
  • vlan网络缺点:支持用户少,安全性不好

三、Open vSwitch代理

  • 与 linux Bridge相比, Open vSwitch(可简称OVS)具有几种管控功能,而且性能更加优化支持更多的功能,目前在 OpenStack领域称为主流。它支持 Local、Flat、VLAN、VXLAN、GRE和 GENEVE等所有网络类型

1.Open vSwitch的设备类型

  • Tap设备:用于网桥连接虚拟机网卡
  • Linux网桥:桥接网卡接口(包括虚拟接口)
  • VETH对( VETH Pair):直接相连的一对虚拟机网络接口,发送VETH对一段的数据包由另一端接收。在 Open Stack中,它用来连接两个虚拟网桥
  • OVS网桥:Open VSwitch的核心设备,包括一个OVS集成网桥( Integration Bridge)和一个OVS物理连接网桥。所有在计算节点上运行的虚拟机连接到集成网桥, Neutron通过配置集成网桥上的端口来实现虚拟机网络隔离。物理连接网桥直接连接到物理网卡。这两个OVS网络通过一个VETH对连接, Open VSwitch的每个网桥都可以看做是一个真正的交换机,可以支持VLAN

2.Open vSwitch数据包流程

  • 如果选择 Open VSwitch代理,在计算节点上的数据包从虚拟机发送到物理网卡需要依次经过一下设备
    • Tap接口( Tap interface):用于网桥虚拟机的网卡,命令为 tapXXX
    • Linux网桥( Linux Bridge):与 Linux Bridge不同,命名为qbrxxx(其中编号xx与 tapxxx中的x相同)
    • VETH对:两端分别命名为qbbxx和 qvoxxx(其中编号xx与 tapxxx中的xx保持一致)
    • OVS集成网桥:命名为 br-int
    • OVS PATCH端口:两端分别命名为 int-br-ethx和 phy-br-ethx(x为物理网卡名称的编号)
    • OVS物理连接网桥:分为两种类型,在Flat和VLAN网络中使用OVS提供者网桥( Provider Bridge),命名为 Br-ethx(x为物理网卡名称的编号);在 VXLAN、GRE和 GENEVE叠加网络中使用ovs隧道网桥( Tunnel Bridge),命名为 Br-tun.另外在Local网络中不需要任何OVS物理连接网桥
    • 物理网络接口:用于连接到物理网络,命名为ethx(x为物理网卡的名称中的编号)

3.Open vSwitch网络的逻辑架构

  • 与 Linux Bridge代理不同, Open vSwitch代理不通过Eth1.101、Eth1.102等VLAN接口隔离不同的VLAN。所有的虚拟机都连接到同一个网桥 br-int, Open vSwitch通过配置 br-int和br-ethx上的流规则( Flow rule)来进行VLAN转换,进而实现VLAN之间的隔离,例如内部标签分别为1和2,而物理网络的VLAN标签是101和102,当 br-eth1网桥上的 phy-br-eth1端口收到一个VLAN1标记的数据包时,会将其中的VLAN1转让为VLAN101,;当 br-init网桥上的 init-br-eth1端口收到一个VLAN101标记的数据包时。会将其中的VLAN101转让为VLAN1
  • 例如:以VLAN网络为例的Open vSwitch网络的逻辑结构
    Openstack理论——Neutron中的插件与代理_第4张图片

四、DHCP代理

  • OpenStack的实例在启动过程中能够从 Neutron提供的DHCP服务自动获取IP地址

1.DHCP主要组件

  • OpenStack的实例在启动过程中能够从 Neutron提供的DHCP服务自动获取IP地址
  • DHCP代理( neutron-dhcp- agent):为项目网络提供DHCP功能,提供元数据请求( Metadata request)服务
  • DHCP驱动:用于管理DHCP服务器,默认为 DNSmasq,这是有1个提供DHCP和DNS服务的开源软件,提供DNS缓存和DHCP服务功能
  • DHCP代理调度器( Agent Scheduler):负责DHCP代理与网络( Network)的调度

2.DHCP代理的主要任务

  • Neutron DHCP提供两类 REST API接口:Agent Managerment Extension API和Aent Scheduler extension apl这两类API都是 extension APl, dhcp代理是核心组件,完成以下任务
    • 定期报告DHCP代理的网络状态,通过RPC报告给 Neutron-server,然后通过 Core Plugin报告给数据库并进行更新网络状态
    • 启动 dnsmasq进程,检测 qdhcp-xxx名称( Namespace)中的ns-xxx端口接收到DHCP DISCOVER请求,在启动 dnsmasq进程的过程中,决定是否需要创建名称空间中的ns-xxx端口,是否需要配置名称空间中的 iptables,是否需要刷新 dnsmasq进程所需的配置文件。名称空间下的知识点介绍
  • 创建网络( Network)并在子网( subnet)上启用DHCP时,网络节点上的DHCP代理会启动一个 dnsmasq进程为网络提供DHCP服务。 dnsmasq与网络( network)是一一对应关系,一个 dnsmasq进程可为同一网络中所有启动DHCP的子网( Subnet)提供服务

3.DHCP代理配置文件

  • DHCP代理配置文件是/etc/ neutron/ dhcp_agent. ini其中有重要的配置选项有二个
[root@ct ~(keystone admin)]# grep -vE '^#|^$' /etc/neutron/dhcp agent.ini
[DEFAULT]
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver 
resync_interval=30
enable_isolated_metadata=False 
enable_metadata_network=False 
debug=False 
state_path=/var/lib/neutron 
root_helper=sudo neutron-rootwrap /etc/neutron/rootwrap.conf
[agent]
[ovs]
  • interface_driver:用来创建TAP设备的接口驱动,如果使用 Linux bridge连接,该值设为 neutron.agent. linux.interface. BridgeInterfaceDriver;如果选择 Open VSwitch,该值为neutron.agent.linux interface. OVSInterface Driver

  • dhcp_driver:指定DHCP启动,默认值为 neutron.agent.linux.dhcp.Dnsmasq表示dnsmasq进程来实现DHCP服务

resync_ interval=30

# The driver used to manage the DHCP server. (string value)
#dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

4.DHCP代理工作机制

  • DHCP代理运行在网络节点上,DHCP为项目网络提供DHCP服务IP地址动态分配,另外还会提供源数据请求服务。工作机制如下:
    Openstack理论——Neutron中的插件与代理_第5张图片
  • 通过DHCP获取|P地址过程如下
    • 1)创建实例时, Neutron随机生成MAC并从配置数据中分配一个固定的IP地址,一起保存到 dnsmasq的 hosts文件中,让 dnsmasq进程做好准备
    • 2)与此同时, Nova-compute会设置Mac地址
    • 3)实例启动,发出 DHCP DISCOVER广播,该广播消息在整个网络中都可以被收到
    • 4)广播消息到达 dnsmasq监听Tap接口。 dnsmasq收到后检查 hosts文件,发现有对应项,它以 DHCP OFFER消息将IP和网关IP发回到虚拟机实例
    • 5)虚拟机实例发回 DHCP REQUEST消息确认接收 DHCP OFFER
    • 6)dnsmasq发回确认消息 DHCP ACK,整个过程结束

五、L3代理

  • 在Neutron中L3代理( neutron-l3-agent)具有相当重要的地位。他不仅提供虚拟机路由器,而且通过iptables提供地址转换(SNAT、DNAT)、浮动地址( Floating IP)和安全组( security group)功能,L3代理利用 Linux IP栈、路由和iptables来实现内部网络中不同网络的虚拟机实例之间的通信,以及虚拟机实例和外部网络之间的网络流量路由和转发,L3代理可以部署在控制节点或者网络节点上

1. 路由( Routing )

  • L3代理提供的虚拟机路由器通过虚拟接口连接到子网,一个子网一个接口,该接口的地址是该子网的网关地址,虚拟机的IP地址栈如果发现数据包的目的IP地址不在本网段,则会将其发到路由器上对应其子网的虚拟机接口,然后,虚拟机路由器根据配置的路由规则和目的IP地址将包转发到日的端口发出
  • L3代理会将每个路由器创建一个网络名称空间,通过VETH对于TAP相连,然后将网关IP配置在位于名称空间上的VETH接口上,这样就能够提供路由,网络节点如果不支持linux名称空间,则只能运行一·个虚拟路由器

2. 通过网络名称空间支持网络重叠

  • 在云环境下用户可以按照白己的规划创建网络,不同的项目(租户)的网络IP地址可能会重叠,为实现此功能,L3代理使用linux网络名称空间来提供隔离的转发上下文,隔离不同的项目(租户)的网络,每个L3代理运行在一个名称空间中
  • 每个名称空间由:grouter-< router-UUID>命名

3. 源地址转换(Source Network Address Translation,SNAT)

  • L3代理通过iptables表中增加POSTROUTING链来实现源地址转换,既内网计算机访问外网时,发起访问的内网IP地址(源IP地址)转换为外网网关的IP地址。这种功能让虚拟机实例能够直接访问外网。不过外网计算机还不能直接访问虚拟机实例,因为实例没有外网P地址,而目的地址转化就能解决这一问题
  • 项目(租户)网络连接到 Neutron路由器,通常将路由器作为默认的网关,当路由器收到实例的数据包并将其转发到外网时。路由器会将数据包的源地址修改成自己的外网地址,确保数据包转发到外网,并能够从外网返回,路由器修改返回的数据包,并转发之间发起访问的实例

4. 目的地址转换( Destination Network Address Translation DNAT)与浮动IP地址

  • Neutron需要设冒浮动IP地址支持从外网访问项目(租户)网络中的实例。每个浮动IP唯一对应一个路由器;浮动IP到关联的端口,在到所在的子网,最后到包含改子网及外部子网路由器。创建浮动IP时。在Neutron分配IP地址后,通过RPC通知该浮动IP地址对应的路由器去设置该浮动IP对应的iptables规则,从外网访问拟机实例时,目的IP地址为实例的浮动IP地址,因此必须由iptables将其转化成固定的IP地址,然后在将其路由到实例。L3代理通过在iptables表中增加POSTROUTING链来实现地址转换
  • 浮动IP地址是提供静态NAT功能,建立外网IP地址与实例所在的项目(租户网络)IP地址的一对一映射,浮动IP地址配置在路由器提供网关的外网接口上,而不是在实例中,路由器会根据通信的方向修改数据包的源或者是目的地址,这是通过在路由器上应用iptables的NAT规则实现的
  • 一旦设置浮动IP地址后,源地址转换就不在使用外网关的IP地址了,而是直接使用对应的浮动IP地址,虽然相关的NAT规则依然存在,但是 neutron-l3-agent-float-snat比neutron-l3-agent-snat更早执行
[root@ct(keystone_ admin)] # ip nets list
qrouter-f94e71b2-17b0-4d71-baeb-664491b9b2d4(id:3)
grouter-a9541705-e5ea-4844-a57d-5c8dce1031c4(id: 4)
dhcp-43119c92-f8cd-45438673-8d05a44329ee(id:2)
dhcp-758b3316-c420-4ae0-8269-ca82030f8f4(id: 0)
dhcp-21bf1ce-19d5-44a9-b412-2e57e9051e3b(id:1)

5. 安全组( Security Group)

  • 安全组定义了那些进入的网络流量能被转发给虚拟机实例。安全组包含一些防火墙策略,称为安全组规则( Security Group rule),可以定义若干个安全组。每个安全组可以有若千条规则。可以给每个实例绑定若干个安全组
  • 安全组的原理是通过iptables对实例所在的计算机节点的网络流量进行过滤。安全组规则作用在实例的端口上,具体是在连接实例的计算节点上的linux网桥上实施

六、FWaas防火墙

1.概述

  • FWaas( Firewall-as-a-Service)是一种基于Neutron L3 Agent的虚拟防火墙,是 Neutron的个高级服务。通过他,OpenStack可以将防火墙应用到项目(租户)、路由器、路由器端口和虚拟机端口、在子网边界上对三层和四层的流量进行过滤
  • 传统的网络中的防火墙一般在网关上,用来控制子网之间的访问。FWas的原理也是一样,在Neutron路由上应用防火墙规则,控制进出项目(租户)网络的数据。防火墙必须关联某个策略(policy)。策略是规则(rule)的集合,防火墙会按顺序因公策略中的每一条规则。规则是访问控制的规则,由源于目的子网IP、源目的端口、协议、允许(Allow)和拒绝(Deny)动作组成
  • 安全组是最早的网络安全模块,其应用对象是虚拟网卡,在计算机节点上通过iptables规则控制进出实例虚拟网卡的流量。FWaaS的应用对象是虚拟路由器,可以在安全组之前控制从外部传入的流量,但是对于同一个子网内的流量不做限制。安全组保护的是实例,而FWaas保护的是子网,两者互为补充,通常部署FWaas和安全组来实现双重防护

2.两个版本:FWaas V1与 FWAaas V2

  • FWaas V1是传统方后墙方案,对路由器提供保护,将防火墙应用到路由器时,改路由器的所有内部端口受到保护,其中虚拟机2进出的数据流都会得到防火墙保护
  • 新的版本的FWaas v2提供了更具细粒度的安全服务,防火墙的概念防火墙组( firewall groυp)代替,一个防火墙包括两项策略:入口策略( ingress policy)和出口( egress policy)。防火墙组不在用于路由器级(路由器全部端口)而是路由器端口,注意,FWaas V2的配置仅提供命令行工具,不支持 dashboard图形页面
    Openstack理论——Neutron中的插件与代理_第6张图片

你可能感兴趣的:(Openstack)