- Neutron provides network abstraction and connectivity as a service for OpenStack. It uses a pluggable architecture with separate components for networking services like L2, L3, VPN, firewall, and load balancing.
- The Neutron server exposes a REST API and uses plugins to interface with networking devices and agents. L2 agents connect virtual ports and isolate tenant traffic. L3 agents route between networks using Linux network namespaces.
- When a VM boots, Neutron creates a port, notifies the DHCP agent, wires the port, and boots the instance while isolating network resources for each tenant. Additional services like load balancing are implemented through plugins and dedicated agents.
10. neutron-server
REST API
SERVICE
RPC SERVICE
PLUGIN
REST API
SERVICE
? REST API
? HTTP(S) Python WSGI Application
? Customary TCP port is 9696
? Exposes logical resources
? networks, subnets, ports, etc
? Request/Response Serialization
15. Plugin Extensions
? Add logical resources to the REST API
? Discovered by server at startup
? REST: /v2.0/extensions
? Common Extensions
? Binding, DHCP, L3, Provider, Quota, Security Group
? Other Extensions
? Allowed Addresses, Extra Routes, Metering
16. Monolithic Plugin
? Full implementation of core resources
? Two types:
? Proxy
? Direct control PLUGIN
17. ML2: Modular Layer 2 Plugin
? Full V2 Plugin Implementation
? Delegates calls to proper L2 drivers
? Two kinds of drivers
? Type Driver
? Mechanism Driver Mech Mgr
PLUGIN
Type Mgr
19. L2 Agent
? Runs on hypervisor
? Communicates with server via RPC
? Watch and notify when devices added/removed
? Wires new devices
? Proper network segment
? Security Group Rules
20. Dive Into the OVS Agent
? OVS
? What does it actually do?
? How do we get isolation?
? VLAN, Overlays: GRE, VXLAN
? Processing loop
21. Linux Network Namespace
? Isolated copy of network stack
? private loopback
? scope limited to namespace
? can reuse addresses
? Explicit con?guration needed to connect
? Processes can spawn within namespace
lo
eth1
eth0
lo
eth1
eth0
lo
eth1
eth0
Host A B
br-int
24. L3 Agent How its implemented
? Manages Collection of Network Namespaces
? Isolated IP Stacks
? Forwarding Enabled
? net.ipv4.ip_forward=1
? Static Routing
? Metadata Proxy
lo
eth1
eth0
lo
qg-2
qr-1
lo
qg-b
qr-e
Host A B
br-ex
30. Booting a VM
? nova boot
? create port
? notify DHCP of new port
31. Booting a VM
? nova boot
? create port
? notify DHCP of new port
? create device
? new in Icehouse wait
32. Booting a VM
? nova boot
? create port
? notify DHCP of new port
? libvirt create device
? new in Icehouse wait
? wire port
33. Booting a VM
? nova boot
? create port
? notify DHCP of new port
? libvirt create device
? new in Icehouse wait
? wire port
? boot
34. Load Balancer as a Service
? Service Plugin
? Driver based
? Agent w/Driver
? Agent communicates over RPC
? Open Source requires namespaces
? Others interact with other systems
LB Agent
HAProxy
35. VPN as a Service
? Service Plugin
? Driver based
? Agent w/Driver
? Communicates over RPC
? Openswan
L3 Agent
Router
Metadata Proxy
VPN Driver
36. Firewall as a Service
? Edgewall
? Service Plugin
? Driver based
? Agent w/Driver
? Communicates over RPC
? Experimental
L3 Agent
Router
Metadata Proxy
Firewall Driver
37. Differences
? Different Design Decisions
? Sync with backend system
? L2 Agent Optional
? Not all implement same extensions
38. Summary
Open vSwitch / Linux Bridge
Ryu OpenFlow
Controller
? Uni?ed API
? Small Core
? Pluggable Open Architecture
? Multiple Vendor Support
? Extensible
39. More Information
? Cloud Administrator Guide
? http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html
? Network v2.0 API
? http://developer.openstack.org/api-ref-networking-v2.html