Use Neutron instead of nova-network
●
neutron_url = http://neutron:9696
●
neutron_auth_strategy = keystone
●
neutron_admin_auth_url = http://keystone:35357/v2.0
●
neutron_admin_username = neutron
●
neutron_admin_tenant_name = service
●
neutron_admin_password = password
Nova interaction with Neutron
1. Create network, subnet, router etc via Neutron API
2. Boot VM, pass network info to Neutron
3. Attach ports, floating IP via Neutron
4. On delete,
3. Coming sessions about Neutron
●
Load balancing in neutron
Thursday November 7, 2013 4:30pm - 5:10pm, SkyCity Grand Ballroom C (SkyCity Marriott Hotel)
●
How to Write a Neutron Plugin, If You Really Need to
Thursday November 7, 2013 5:20pm - 6:00pm ,SkyCity Grand Ballroom C (SkyCity Marriott Hotel)
●
OpenStack Neutron Modular Layer 2 Plugin Deep Dive
Friday November 8, 2013 11:00am - 11:40am, Expo Breakout Room 2 (AsiaWorld-Expo)
●
Neutron Hybrid Deployment and Performance Analysis
Friday November 8, 2013 1:30pm - 2:10pm, Expo Breakout Room 2 (AsiaWorld-Expo)
●
Neutron Network Namespaces and IPtables: Technical Deep Dive
Friday November 8, 2013 4:10pm - 4:50pm, Expo Breakout Room 2 (AsiaWorld-Expo)
4. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
5. related skills
●
WSGI
WSGI is the Web Server Gateway Interface. It is a specification for web servers and
application servers to communicate with web applications.
●
paste deploy
Paste Deployment is a system for finding and configuring WSGI applications and servers. The primary
interaction with Paste Deploy is through its configuration files.
●
Python Routes
Routes is a Python re-implementation of the Rails routes system for mapping URLs to
application actions, and conversely to generate URLs. Routes makes it easy to create pretty
and concise URLs that are RESTful with little effort.
●
peCan
Will we change to pecan? see design summit session Neutron API Framework Replacement
6. Layer diagram of Neutron server
Core REST API
Extension A REST
API
Extension … REST
API
AuthN/AuthZ/Input Validation/Output view
Core Plugin Interface
Core Plugin
(Vendor
specific)
Service A Plugin
Interface
Service A Plugin
Service … Plugin
Interface
Service … Plugin
agents
9. filters and application pipeline
extensions
URL is
declared here?
URL
request
Process
authtoken
No
neutronapiapp_v2_0
keystonecontext
No, return
HTTPNotFound
URL is
declared here?
Response
Process
11. what are plugins and extensions
●
extensions are about resources and the actions
on them
@classmethod
def get_resources(cls):
for resource_name in ['router', 'floatingip']:
...
controller = base.create_resource(
collection_name, resource_name, plugin...)
ex = ResourceExtension(collection_name, controller,
member_actions...)
●
plugins are used to support the resources
supported_extension_aliases = ["router", "ext-gw-mode",
"extraroute",
"l3_agent_scheduler"]
def update_router(self, context, id, router):
def get_router(self, context, id, fields=None):
12. neutronapiapp_v2_0: load extensions
neutron/api/v2/router.py:APIRouter.factory()
1. __init__()
1.1 plugin = manager.NeutronManager.get_plugin()
1.2 extensions.PluginAwareExtensionManager.get_instance()
1.2.1 extensions.py:get_extensions_path()
1.2.2 PluginAwareExtensionManager.__init__(paths, plugins)
1.2.2.1 _load_all_extensions()
for each path in paths
_load_all_extensions_from_path(path A
)
add_extension(ext)
neutron standard
extension plus ones
specified by
api_extensions_path= in
neutron.conf
_check_extension(ext)
B
check each python module name
under the path, and capitalize the
first letter of the module name to
find the class in it, excluding the
1. check if the potential extension has implemented the
modules starting with "_".
needed functions
2. check if one of plugins supports it. plugin's
supported_extension_aliases attribute defines what
extensions it supports.
13. neutronapiapp_v2_0: install core resources
neutron/api/v2/router.py:APIRouter.factory()
1. __init__()
1.1 plugin = manager.NeutronManager.get_plugin()
1.2 PluginAwareExtensionManager.get_instance()
1.3 install core resources
neutron/api/v2/router.py:
RESOURCES = {'network': 'networks',
'subnet': 'subnets',
'port': 'ports'}
After it, core resources URLs, i.e. Core
Resource API, are installed and exposed.
14. extension filter: assemble extensions
2.1.2 neutron/api/extensions.py:plugin_aware_extension_middleware_factory()
ext_mgr = PluginAwareExtensionManager.get_instance()
return ExtensionMiddleware(app, ext_mgr=ext_mgr)
After it, all extension URLs, or
extensions on core resources are
installed and exposed
15. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
16. Layer diagram
Core REST API
Extension A REST
API
Extension … REST
API
AuthN/AuthZ/Input Validation/Output view
Core Plugin Interface
Core Plugin
(Vendor
specific)
Service A Plugin
Interface
Service A Plugin
Service … Plugin
Interface
Service … Plugin
agents
18. URL processing continued
notification to ceilometer
also happens here
action is link create,
update, show, index or delete
handler_fun is like create_net,
list_nets function of plugins
19. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
20. ML2 Plugin
●
●
●
●
simultaneously utilize the variety of layer 2
networking technologies found in complex real-world
data centers
It currently works with the existing openvswitch,
linuxbridge, and hyperv L2 agents
The ml2 framework is also intended to greatly
simplify adding support for new L2 networking
technologies
consists of network types and mechanisms
https://wiki.openstack.org/wiki/Neutron/ML2#ML2_Drivers
21. Type and mechanism drivers in setup.cfg
neutron.ml2.type_drivers =
flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver
local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver
neutron.ml2.mechanism_drivers =
linuxbridge = neutron.plugins.ml2.drivers.mech_linuxbridge:LinuxbridgeMechanismDriver
openvswitch = neutron.plugins.ml2.drivers.mech_openvswitch:OpenvswitchMechanismDriver
hyperv = neutron.plugins.ml2.drivers.mech_hyperv:HypervMechanismDriver
ncs = neutron.plugins.ml2.drivers.mechanism_ncs:NCSMechanismDriver
arista = neutron.plugins.ml2.drivers.mech_arista.mechanism_arista:AristaDriver
cisco_nexus = neutron.plugins.ml2.drivers.cisco.mech_cisco_nexus:CiscoNexusMechanismDriver
l2population = neutron.plugins.ml2.drivers.l2pop.mech_driver:L2populationMechanismDriver
24. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
25. RPC structure of ML2
deal with RPC
from agents,
include DHCP agent
notify the L2 agents
32. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
35. Contents
●
the process of neutron start
●
the normal steps to process a request
●
Start ML2 plugin
●
message queues in Neutron
●
interaction with nova compute
●
To debug the Neutron
36. debug Neutron
https://wiki.openstack.org/wiki/NeutronDevelopment
● Eclipse pydev to debug neutron server
●
neutron/server/__init__.py:
●
change eventlet.monkey_patch() To:
eventlet.monkey_patch(os=False, thread=False)
– and then create a python run/debug configuration with the
correct parameter such as "--config-file
/etc/neutron/neutron.conf --config-file
/etc/neutron/plugins/ml2/ml2_conf.ini"
–
38. ipdb
●
add the following line to the
neutron/server/__init__.py:
import ipdb; ipdb.set_trace()
●
start the neutron server