OpenStack Neutron架构分析
Neutron的逻辑架构
软件架构
Neutron主要进程为neutron-server。该进程运行于网络控制节点(controller)上,通过restful api的形式访问Neutron-server。接收到http请求后,通过message Queue 与 plugins通信,plugins去通知相应的agent来创建虚拟网元。
neutron server :接收web以restful api式的请求。对应的服务进程是 neutron-server.service,包含了 Web Server、Plugins(Core Plugins、Extension Plugis)、RCP Client/Server、DB ORM 等功能模块。
Core api :Network subnet port (核心资源)
- 作为L2层的抽象Network、Subnet、Port被定义为核心资源。
- 对于核心插件ML2二层网络
extension api: service (扩展资源)
- L3及以上的服务为扩展资源。
- api—>service plugins
核心插件 core plugins : ML2(Type Driver和mechanism Driver)和vendor plugins (厂商插件)。 - Type Driver (segment)
- Local
- flat
- vlan
- vxlan
- gre
- mechanism Driver (如果需要开发新的网络实现机制,只需开发mechanism Driver)
- L2 population
- OVS
- Linux Bridge
- vendor driver
服务插件 Server plugins: L3 agent 、firewall、VPN、LB等。
通信机制:Message Queue
Cli ---> Server--->plugins--->agent。
(具体的虚拟网元构建由agent来执行。)
Neutron架构与通信走向
通过架构图了解整个neutron的逻辑结构。
Neutron架构:
组件通信过程
Neutron上下文:
Neutron的代码结构
想知道一个OpenStack项目有哪些服务组成,入口函数(main函数)在哪里,最直接的方式就是查看项目根目录下的 setup.cfg 文件,其中 console_scripts 就是所有服务组件的入口,它就像一个十字路口导航,告诉你目的地的入口在哪里,哪条路通向哪里。
代码树
├─api-ref
├─devstack
│ └─lib
├─doc
│ └─source
│ ├─admin
│ │ ├─archives
│ │ │ └─figures
│ │ ├─figures
│ │ ├─ovn
│ │ │ ├─figures
│ │ │ └─refarch
│ │ │ └─figures
│ │ └─shared
│ ├─cli
│ ├─configuration
│ │ └─samples
│ ├─contributor
│ │ ├─dashboards
│ │ ├─internals
│ │ │ ├─images
│ │ │ └─ovn
│ │ ├─ovn
│ │ ├─ovn_vagrant
│ │ ├─policies
│ │ ├─stadium
│ │ └─testing
│ │ └─images
│ ├─feature_classification
│ ├─install
│ │ ├─common
│ │ ├─figures
│ │ ├─ovn
│ │ │ └─figures
│ │ └─shared
│ ├─ovn
│ │ └─faq
│ ├─reference
│ └─_static
├─etc
│ ├─neutron
│ │ ├─plugins
│ │ │ └─ml2
│ │ └─rootwrap.d
│ ├─oslo-config-generator
│ └─oslo-policy-generator
├─neutron
│ ├─agent # 代理实现
│ │ ├─common
│ │ ├─dhcp
│ │ ├─l2
│ │ │ └─extensions
│ │ ├─l3
│ │ │ └─extensions
│ │ │ └─qos
│ │ ├─linux
│ │ │ └─openvswitch_firewall
│ │ ├─metadata
│ │ ├─ovn
│ │ │ └─metadata
│ │ ├─ovsdb
│ │ │ └─native
│ │ └─windows
│ ├─api # api实现
│ │ ├─rpc
│ │ │ ├─agentnotifiers
│ │ │ ├─callbacks
│ │ │ │ ├─consumer
│ │ │ │ └─producer
│ │ │ └─handlers
│ │ ├─v2
│ │ └─views
│ ├─cmd
│ │ ├─eventlet
│ │ │ ├─agents
│ │ │ ├─plugins
│ │ │ ├─server
│ │ │ └─services
│ │ ├─ovn
│ │ ├─sanity
│ │ └─upgrade_checks
│ ├─common
│ │ └─ovn
│ ├─conf
│ │ ├─agent
│ │ │ ├─database
│ │ │ ├─l3
│ │ │ ├─metadata
│ │ │ └─ovn
│ │ │ └─metadata
│ │ ├─db
│ │ ├─extensions
│ │ ├─plugins
│ │ │ └─ml2
│ │ │ └─drivers
│ │ │ ├─mech_sriov
│ │ │ ├─openvswitch
│ │ │ └─ovn
│ │ ├─policies
│ │ └─services
│ ├─core_extensions
│ ├─db
│ │ ├─allowed_address_pairs
│ │ ├─availability_zone
│ │ ├─extra_dhcp_opt
│ │ ├─metering
│ │ ├─migration
│ │ │ ├─alembic_migrations
│ │ │ │ └─versions
│ │ │ │ ├─liberty
│ │ │ │ │ ├─contract
│ │ │ │ │ └─expand
│ │ │ │ ├─mitaka
│ │ │ │ │ ├─contract
│ │ │ │ │ └─expand
│ │ │ │ ├─newton
│ │ │ │ │ ├─contract
│ │ │ │ │ └─expand
│ │ │ │ ├─ocata
│ │ │ │ │ └─expand
│ │ │ │ ├─pike
│ │ │ │ │ └─expand
│ │ │ │ ├─queens
│ │ │ │ │ └─expand
│ │ │ │ ├─rocky
│ │ │ │ │ └─expand
│ │ │ │ ├─stein
│ │ │ │ │ └─expand
│ │ │ │ ├─train
│ │ │ │ │ └─expand
│ │ │ │ ├─ussuri
│ │ │ │ │ └─expand
│ │ │ │ └─victoria
│ │ │ │ └─expand
│ │ │ └─models
│ │ ├─models
│ │ │ └─plugins
│ │ │ └─ml2
│ │ ├─network_dhcp_agent_binding
│ │ ├─port_security
│ │ ├─qos
│ │ └─quota
│ ├─debug
│ ├─extensions
│ ├─hacking
│ ├─ipam
│ │ └─drivers
│ │ └─neutrondb_ipam
│ ├─locale
│ │ ├─de
│ │ │ └─LC_MESSAGES
│ │ ├─es
│ │ │ └─LC_MESSAGES
│ │ ├─fr
│ │ │ └─LC_MESSAGES
│ │ ├─it
│ │ │ └─LC_MESSAGES
│ │ ├─ja
│ │ │ └─LC_MESSAGES
│ │ ├─ko_KR
│ │ │ └─LC_MESSAGES
│ │ ├─pt_BR
│ │ │ └─LC_MESSAGES
│ │ ├─ru
│ │ │ └─LC_MESSAGES
│ │ ├─zh_CN
│ │ │ └─LC_MESSAGES
│ │ └─zh_TW
│ │ └─LC_MESSAGES
│ ├─notifiers
│ ├─objects
│ │ ├─db
│ │ ├─extensions
│ │ ├─logapi
│ │ ├─plugins
│ │ │ └─ml2
│ │ ├─port
│ │ │ └─extensions
│ │ └─qos
│ ├─pecan_wsgi
│ │ ├─controllers
│ │ └─hooks
│ ├─plugins
│ │ ├─common
│ │ └─ml2
│ │ ├─common
│ │ ├─drivers
│ │ │ ├─agent
│ │ │ ├─l2pop
│ │ │ │ └─rpc_manager
│ │ │ ├─linuxbridge
│ │ │ │ ├─agent
│ │ │ │ │ ├─common
│ │ │ │ │ └─extension_drivers
│ │ │ │ └─mech_driver
│ │ │ ├─macvtap
│ │ │ │ ├─agent
│ │ │ │ └─mech_driver
│ │ │ ├─mech_sriov
│ │ │ │ ├─agent
│ │ │ │ │ ├─common
│ │ │ │ │ └─extension_drivers
│ │ │ │ └─mech_driver
│ │ │ ├─openvswitch
│ │ │ │ ├─agent
│ │ │ │ │ ├─common
│ │ │ │ │ ├─extension_drivers
│ │ │ │ │ └─openflow
│ │ │ │ │ └─native
│ │ │ │ └─mech_driver
│ │ │ └─ovn
│ │ │ ├─agent
│ │ │ └─mech