[云计算]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-common、Plugin。
- 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
- Controller
-
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)?:
- 需要借用专业防火墙设备提升Float IP通信的性能和转换能力。
- 在使用Float IP的同时,可以使用NGFW的防火墙特性。
本文作者:SkyBiuBiu
本文链接:https://www.cnblogs.com/Skybiubiu/p/14719271.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步