[云计算]OpenStack - Neutron

Neutron在OpenStack中的位置

可以为虚拟机或者 OpenStack 组件提供网络服务,(由 Nova-network 独立出来的)随着需承载业务的能力的增长作为 Nova 子组件无法满足。

过程:neutron-server 接收网络请求,会将其记录到 DB 中,调用不同的Agent,Agent 通过不同的驱动实现网络服务。

Neutron 架构

网络结构 功能
Management Network 提供OpenStack组件间的内部通信,该网络内的IP地址只有数据中心内部可达。
Data Network 提供云内部VM间的数据通信,该网络内的IP地址取决于使用的网络插件程序。
External Network 提供VM与Internet的通信,Internet上的任何人都可以访问该网络内的IP地址。
API Network 为租户提供包括Networking API在内的所有OpenStack API,可被Internet上任何人访问。
与External Network基本一致,甚至可以创建一个external network子网作为该网络。

Neutron 组件

模块 功能 一般部署位置
Neutron-server & plugin 接收REST请求,向keystone鉴权,与数据库交互,提供API功能 控制节点
Neutron database Neutron数据库,管理数据 控制节点
L2 agent(ovs-agent) 连接网络端口,处理数据包 计算节点
Dhcp-agent 提供DHCP服务 网络节点
L3-agent 为客户机访问外部网络提供3层转发服务 网络节点
RPC(Message Queue) 消息队列,用于Plugin与agent之间的通信 所有节点
  • Neutron本身是一套开放的SDN框架和接口,实现允许第三方的SDN接入OpenStack。
  • Neutron同时他有一套默认的SDN实现(ML2等)。

Neutron Server机制

  • Neutron Server包含两个部分:Neutron-commonPlugin
  • API —— Core
    • 插件功能的最小集合,即每个插件都必须有的功能,也就是对网络、子网、端口的CRUD操作。
  • API —— API Extensions
    • 针对具体插件实现,租户可以利用这些插件的独特功能,如ACL、QoS。
  • Plugin
    • 存储当前逻辑网络的配置信息,判断和存储逻辑网络和物理网络的对应关系(比如为一个逻辑网络选择一个vlan),并与一种或多种交换机通信来实现这种对应关系(一般通过宿主机上的插件代理来实现这种操作,或者远程登录到交换机上来配置)。

Neutron Server - ML2/L2

  • ML2插件:通过TypeManager和MechanismManager实现二层的互通
  • ML2:Module Layer 2
  • 好处:
    • 抽象出Plugin中共性代码(例如:DB),减少厂家新增和维护Plugin的工作量,仅需实现driver即可。
    • 解决原结构中只支持一个Plugin的问题,同时支持多个driver。
    • 通过l2 population减少overlay网络广播流量。
    • 实现异构部署:每个hypervisor node可使用不同的driver

Neutron L2 资源对象

网络虚拟化实现原理

  • 在Linux-br上配置iptable规则,实现安全组

  • 在OVS网桥上配置流表规则,为不同端口配置不同的Vlan Tag,实现VLAN隔离

  • 为网卡命名,Neutron将虚拟网络的流量到处网卡。

Neutron服务与管理对象

  • Neutron是一种虚拟网络服务,为OpenStack计算提供网络连通和寻址服务。
  • Neutron管理对网络进行了抽象,有如下管理对象:
    • Network
    • Subnet
    • Port
    • Router
    • Floating IP

Neutron对象 - Network

  • 基本资源对象:

  • Network:

    • 一个隔离的虚拟二层广播域,所有报文从虚拟机发出会被添加一个VLAN Tag,进入虚拟机会剥掉Vlan Tag
    • 可以看作一个Virtual Switch或Logical Switch
  • 重要属性:

    • tenant_id:标识一个租户,不同的租户间网络隔离,不允许相互访问
  • router:external:可以从外部访问该网络

    • provider:physical_network:虚拟网络上的流量将映射到物理网络,名称在安装部署时指定
    • provider:network_type:表示物理网络支持VLAN隔离的
    • provider:segmentation_id:表示VLAN ID

Neutron对象 - Subnet

  • 基本资源对象:
  • Subnet:
    • 包含IP地址段(CIDR)
    • 必须与Network关联
    • VM从CIDR取得IP,也可指定allocation_pool作为IP地址资源池
    • 可选属性:DNS,网关IP,静态路由等

Neutron对象 - Port

  • 基本资源对象:
  • Port:
    • 逻辑网络交换机上的虚拟交换端口
    • VM通过逻辑端口到附着到network上
    • 定义了指派到该网络上虚拟机端口的IP地址和Mac地址等
    • 通过vnic_type区分网卡类型:normal(ovs)、direct(sr-iov)

Neutron对象 - Security Group

  • 扩展资源对象:
  • Security Group:
    • 关联到Port对象
    • 将多个虚拟机端口组成一个集合,流量符合自定义规则的允许通过
  • Security group 安全组
    • Security Group主要是通过Iptables实现,能够对进出的流量按照协议、端口进行限制,能防止不知名协议,端口流量的攻击;
    • 安全组由L2 agent实现,如neutron-openvswitch-agent会将安全组规则转换成IPTables规则,一般发生在计算节点;
    • 在Compute节点上引入了qbr*这样的Linux传统bridge(iptables规则目前无法加载到直接挂在到ovs的tap设备上)

Neutron模块 - 安全组

Neutron模块 - OVS-agent

  • Neutron-openvswitch-agent
    • 网桥管理:br-int、brcps、br-tun等
    • 端口管理:监控网桥上端口,为端口打tag,下发流表等
    • 刷新安全组
    • QoS设置
  • 主线程,主要处理rpc_loop(1个);处理打tag,加流表等ovs-agent主要操作
    • 上报心跳线程(1个)
    • rpc消息处理线程(多个):主要处理fdb消息
    • 监听子进程输出线程(2个):判断是否有新增或删除端口

Neutron模块 - DHCP-agent

  • 每一个Network对象对应一个DHCP服务(即一个命名空间)
  • Neutron在Network上创建DHCP端口
  • 在命名空间内,使用Dnsmasq监听DHCP端口
  • Neutron配置Dnsmasq配置文件,将mac、IP、路由、网关等信息保存

  • Neutron-dhcp-agent

    • 用于创建和管理虚拟DHCP Server,每个虚拟网络都会有一个DHCP Server,这个DHCP Server为这个虚拟网络里面的虚拟机提供IP。

    • 现在FS版本分集中式DHCP和分布式DHCP两种。

  • Neutron-server负责处理外部的REST API请求,将数据刷新到DB中。

  • 当操作network、subnet、port等对象时,neutron-server会发生rpc消息给dhcp-agent,通知其做进一步处理。

  • dhcp-agent接收到rpc消息后,调用driver进行实施,包括创建dhcp port、命名空间、tap设备、路由信息,并启动dnsmasq进程提供ip地址分配服务。

分布式DHCP实现背景:

  • 级联层与被级联层的逻辑与物理分离。
  • 网络节点命名空间过多(性能问题)

集中式DHCP与分布式DHCP比较:

  • 集中式DHCP中network下的mac,ip信息在几个集中式的dhcp-agent下全量存有;
    分布式条件下dhcp-agent仅存有network下在当前host的mac,ip对应关系。
  • 集中式DHCP的neutron port与tap口一一对应;
    分布式条件下则为一对多。

Neutron模块 - Metadata

  • Metadata:用于获取客户自己定义、我们又无法直接传送给虚拟机的数据,目前定义在DHCP上,每个网络有一个metadata,数据只走二层,一个网络有一个metadata_proxy,一个主机有一个metadata_agent,meta_proxy由dhcp_agent拉起

  • 为租户虚拟机获取自己定义数据提供网络通道。
  • 提供两种方式:DHCP和Router。

Neutron L2 组网及二层特性

Neutron 二层组网

Neutron模块 - EVS

  • 用户态EVS
  • NFV场景下的高速虚拟软交换
  • 借助DPDK高速数据通道技术
  • 使用多线程转发、vhost-user和大页技术,通过减少内核切换和报文拷贝,提高软件交换能力

Neutron VLAN网络隔离

  • 物理网络使用Vlan隔离
  • Neutron通过配置vSwitch,将一个虚拟网络映射到一个Vlan网络
  • 虚拟机的报文,经过vSwitch,添加上Vlan Tag,发送到物理网络或vSwitch内部交换,到达虚拟网络隔离的效果

端口QoS

  • 网络QoS特性提供虚拟网卡和系统接口的流量整形和带宽优先级控制
  • 保证网络平面和用户的虚拟机网络通信质量的场景

Neutron模块 - ServiceChain

  • 当网络流量按照业务逻辑所要求的既定的顺序,经过既定的业务点,这就是服务链(Service Chain)。ServiceChain技术是一种引导网络流量次序通过多个业务处理节点的转发技术。
  • evs-agent的处理逻辑:
    • 读取配置文件获取本接口上的ebr-int网桥,监控并判断add delete update的端口,并对add delete update的端口进行处理
  • sc-agent的处理逻辑:
    • 接收portflow信息,根据portflow中的端口信息判断出该端口在哪个evs类型的网桥上,并对网桥进行监控,如果端口存在则对其下发流表,并将下发的结果rpc通知给server

Neutron模块 - SRIOV

  • SR-IOV直通网络是和OVS网络独立的通信模型,借助直通网卡虚拟出的PCI设备直接挂载到虚拟机,虚拟机利用这种通信方式可以达到硬件网卡的性能,所以叫硬直通,相对应的也有软直通技术,如netmap。

Neutron部署模型

  • Neutron部署模型

    • Controller
      • neutron-server
    • DHCP
      • neutron-dhcp-agent
      • neutron-metadata-agent
    • Compute
      • neutron-openvswitch-agent
      • neutron-servicechain-agent
      • neutron-evs-agent
      • neutron-sriov-nic-agent
      • neutron-netmap-nic-agent
    • Router
      • neutron-l3-agent
      • neutron-metering-agent
  • CPS在FS版本中承担服务安装部署的任务。

Neutron L2 典型操作

1. 创建网络

租户创建一个network

neutron  net-create <net-name> --provider:network_type=vlan --provider:physical_network=physnet1 

2. 创建子网

租户通过指定网络关联一个子网,可以关联多个子网

neutron subnet-create < net-name > 100.100.100.0/24(CIDR)

3. 创建虚拟机并附着网络

租户启动虚拟机并且指定一个vNIC连接到网络。该步骤有两种方式
(1)租户创建port,租户在创建虚拟机时指定network和port

nova boot --image <image_id> --flavor 1 --nic net-id=<net_id> <VM_name>

(2)租户在创建虚拟机是仅指定network, Nova动态创建port

nova boot --image <image_id> --flavor 1 --nic port-id=<port_id> <VM_name>

4. 删除虚拟机

租户删除虚拟机,Nova连接到Neutron并删除端口,被分配的IP地址回收到有效IP地址池。

nova delete <vm-id>

5. 删除端口

如果是租户创建了port,则需要删除该网络上的所有端口。虚拟机删除后,对应的端口也已经删除。

neutron port-delete <port_id>

6. 删除网络

租户删除网络,Neutron同时会自动删除关联在该网络上的子网。

neutron net-delete <net_id>

Neutron L3 基础概念

  • Neutron L3 作用:

    • L3即vRouter
    • DC内部VM通信:东西向流量,连接租户同一network或不同network之间的子网。
    • VM与外部通信:南北向流量,连接内外网(Float IP/SNAT)。
  • vRouter分为两种模式:集中式、分布式

    • 集中式:指的是vRouter实例化在network节点,compute节点不实例化vRouter,当两个不同子网的VM通信的时候,流量需要在network节点上的vRouter做一次三层转发。
    • 分布式:指的是vRouter实例化在所有compute节点,三层转发的功能在本节点的vRouter实例中完成,从而只需要走一次隧道。

Neutron L3 - 集中式路由

集中式路由——概念

  • 集中式路由只和网络节点有关系,Router所在节点即为网络节点,只有网络节点上部署L3-agent,实现3层通信的功能。
  • 所有3层流量必须经过网络节点。

集中式路由——流量走向(东西向)

集中式路由——流量走向(南北向)

Neutron L3 - 分布式路由

分布式路由——概念

  • 出现背景
    • 网络节点的可靠性,一旦网络节点挂了,那么三层功能就无法使用了。
    • 网络节点的性能瓶颈,所有的三层流量都经过网络节点,性能问题。
  • 设计模型
    • vRouter和计算节点(L3-agent)有绑定关系,一旦vRouter下有虚拟机创建在计算节点,则添加vRouter和该计算节点的绑定关系,使该虚拟机能够进行三层通信。

分布式路由——流量走向(同节点东西向)

分布式路由——流量走向(跨节点东西向)

分布式路由——流量走向(南北向)

Neutron L3 - 浮动IP

浮动IP——概念

  • NAT原理(SNAT/DNAT)
    • 将私有地址和公网地址进行一个转换,可以解决IP地址不足的问题,还能避免来自外网的攻击,隐藏和保护内部的虚拟机。
  • 浮动IP原理
    • 利用NAT原理给虚拟机配置一个外网IP,虚拟机访问外网时将源地址转换成该外网IP,外网访问该外网IP时转换成虚拟机IP,实现通信。

访问外网:
1.绑定弹性IP
2.启动SNAT,路由器开启SNAT

浮动IP——公有云场景

为何公有云使用NGFW完成Float IP特性(两次NAT)?:

  1. 需要借用专业防火墙设备提升Float IP通信的性能和转换能力。
  2. 在使用Float IP的同时,可以使用NGFW的防火墙特性。
posted @ 2021-04-29 18:38  SkyBiuBiu  阅读(1020)  评论(0编辑  收藏  举报