Lesson 7 · OpenStack Production Engineer
Neutron Architecture — Ports, Agents, and the Path to the Instance
How Neutron models networks as ports and bindings, what each agent does, and why a port stuck in DOWN is the most informative failure in OpenStack.
Objectives
- Explain the port as Neutron's central object and what binding means
- Name the agents and state which part of the path each one builds
- Read a port's binding fields and determine which stage failed
- Predict what breaks when a specific agent stops
The port is the object that matters
Networks and subnets are configuration. The port is the thing that exists per instance, has a lifecycle, and fails.
A port is a virtual network interface with an address, a security group, and — critically — a binding: a record of which host it is on and which mechanism driver is responsible for wiring it up. Most Neutron troubleshooting is reading a port’s binding fields and working out which stage did not complete.
Two of those fields carry almost all the diagnostic weight:
binding_vif_type— how the port is meant to be attached.ovsor similar means a mechanism driver accepted it.binding_failedmeans none did, and the instance will never get a network.status—ACTIVEmeans an agent has reported that it actually wired the port up.DOWNmeans it has not.
The agents, and what each one builds
neutron-server API, database, and the decision about which
│ mechanism driver owns a port
│ message bus
├──────────────► L2 agent (per compute host)
│ builds the local switching: bridges, flows, VLAN tags
│
├──────────────► DHCP agent
│ serves addresses to instances on the network
│
├──────────────► L3 agent
│ routers, floating IPs, and the path outward
│
└──────────────► metadata agent
serves 169.254.169.254 so cloud-init can configure
The division is worth memorising because each agent’s failure has a distinct signature:
| Agent stops | Existing instances | New instances |
|---|---|---|
| L2 agent on a host | Keep working — flows are already in place | Get a port that never goes ACTIVE |
| DHCP agent | Keep their leases until renewal | Boot with no address |
| L3 agent | Lose external connectivity and floating IPs | Same |
| Metadata agent | Unaffected | Boot, but cloud-init gets no data: no SSH keys, no hostname |
Binding is a negotiation, and it can fail
When Nova needs a port on a host, neutron-server asks each configured mechanism driver in turn
whether it can bind this port on this host with this vnic type. The first that accepts wins.
If none accepts, the port gets binding_vif_type: binding_failed, and this is a permanent state
for that port — nothing retries it. The instance will sit in networking and then fail.
The causes are all configuration mismatches rather than transient faults:
- The L2 agent on that host is down, so the driver that would have accepted cannot confirm the host is manageable.
- The physical network name in the segment does not exist in that host’s bridge mappings. The
network says
physnet2, the host only mapsphysnet1. - The vnic type is unsupported — a direct or macvtap port on a host without the hardware or driver for it.
That mismatch produces binding_failed every time, on that host only, for that network only —
which is why it so often presents as “instances work except on the new hosts”.
Port DOWN with a successful binding is a different problem
A port that bound successfully but stays DOWN means neutron-server decided who should wire it
and that agent never confirmed doing so.
That narrows the problem to exactly one place: the L2 agent on the binding host. Either it is not running, or it is running and not processing, or it cannot report back over the message bus.
openstack network agent list --host compute-03
What the metadata path actually costs when it breaks
The metadata service is the least understood component and produces the most misleading symptom. An instance with a working network, a correct address, and no metadata boots normally and is unreachable — because cloud-init never received the SSH key.
The symptom is “the instance has no network”. The reality is that the network is fine and one specific address on it is not answering. The distinguishing check is whether the instance got an address at all: DHCP working and metadata failing is the signature.
The diagnostic path for an instance with no network
- Does the port exist and what is its status?
openstack port list --device-id <instance-uuid> - Is
binding_vif_typebinding_failed? If so, it is configuration — check bridge mappings against the network’s physical network, and check the vnic type. - Is
statusDOWN with a successful binding? The L2 agent onbinding_host_idis the whole problem. - Is the agent alive?
openstack network agent list --host <host>. Dead agent with a live process means the message bus. - Did the instance get an address? No address is DHCP. Address but no cloud-init data is metadata.
- Address but no external connectivity? L3 agent and floating IP, which is a different path entirely.
Steps 1 to 3 resolve the majority, and all three are answered by a single openstack port show.
Exercise
Create a port explicitly with openstack port create, and inspect its binding fields before it is
attached to anything. Note that binding_host_id is empty and status is DOWN — an unattached port
is not a broken port.
Boot an instance with that port and inspect it again. Record which fields changed and in what order.
Then stop the L2 agent on a compute host and boot an instance there. Observe how far the port gets,
which field reveals the problem, and how long the instance spends in networking before Nova gives
up. Compare that failure against an instance on a host with a deliberately wrong bridge mapping —
the two look identical from the instance and are distinguished only by the port.
Verification status
This resource has not been executed end to end in a lab environment. Commands and configuration are reviewed by an engineer, but treat them as reference rather than as a tested procedure.
Author
James Joyner
Builds and operates the infrastructure layers underneath production AI systems.
James founded Inside The AI Stack to publish the kind of infrastructure and operations material he wanted while running production systems: specific, tested where it claims to be tested, and written by someone who has had to fix the thing at 3am. He works across AI infrastructure, private cloud, and platform engineering, and reviews every technical resource published here before it is marked as verified.
- AI infrastructure
- OpenStack operations
- Kubernetes
- Terraform
- Linux systems engineering
- Observability
Primary sources
- Neutron architecture — OpenStack Foundation
- Neutron port binding — OpenStack Foundation
Continue from here
Related resources chosen because they are the next thing you would actually need — not because they share a keyword.
OpenStack Production Operations
Operating OpenStack in production: service state versus status, the message bus, placement disagreements, and the quiet failures that keep dashboards green.
Nova Architecture
The Nova services, what each one owns, and how to tell from a stuck instance which component to investigate first.
OpenStack Production Engineer
A sequenced learning path for engineers who operate OpenStack in production — architecture, service-by-service depth, deployment, and troubleshooting under pressure.
Newsletter
Inside The AI Stack Brief
A practical weekly briefing on AI engineering, infrastructure, production operations, and the technologies powering the AI stack.
One email a week. We send a confirmation link first and never mail an address that has not confirmed. No sponsorship placements inside the technical sections, and an unsubscribe link in every issue.
