BitByteIntegration Cloud-Native Networking Architecture Series Part 4 of 6 — Beyond the Default Network: UDN & CUDN
Home / Learning / Networking / UDN & CUDN
📘 Cloud-Native Networking Architecture Series · Part 4 of 6

Beyond the Default Network: Understanding UDN & CUDN in OVN-Kubernetes

⏱ 20 min read 🏗 Architecture Deep Dive 📊 Intermediate → Advanced

Building multiple software-defined networks inside one cluster. This article doesn't follow a packet — it follows a network, from the moment an architect decides one topology isn't enough.

Reading Time20 min
Architecture LevelIntermediate–Advanced
AuthorKashif Ali
UpdatedJuly 2026
OpenShiftOVN-KubernetesUDNCUDNOpen vSwitch
Prerequisites
Read: Part 2 — OVN-Kubernetes Read: Part 3 — Localnet Basic NetworkPolicy concepts
Cloud-Native Networking Series
Part 1 — Linux Bridge
Part 2 — OVN-Kubernetes
Part 3 — Localnet
Part 4 — UDN & CUDN
Part 5 — SR-IOV
Part 6 — macvlan & IPVLAN
⚡ Quick Facts
Network TypeUDN / CUDN
ScopeNamespace / Cluster
Isolation ModelTopology — not policy
EncapsulationGeneve
Live MigrationSupported
Typical UseMulti-tenant enterprise segmentation
The Series So Far
PartNetwork TypePacket Leaves Node As
Part 1Linux BridgeNative Ethernet
Part 2OVN-KubernetesGeneve Encapsulated
Part 3LocalnetNative Ethernet via br-ex
Part 4UDN / CUDNGeneve — new isolated topology

Why This Matters

Why the Default Pod Network Isn't Enough

In a traditional OpenShift cluster, every namespace — Finance, Telco, Production, DMZ — shares exactly one thing underneath: the same cluster router, the same logical topology, the same OVN Northbound database entries extended outward. Isolation between them exists at exactly one layer: NetworkPolicy, a set of rules layered on top of a network they all still fundamentally share.

Single Default Networkone cluster router, one topology Financenamespace Telconamespace Productionnamespace DMZnamespace All four share the same cluster router and logical topology Isolation only via NetworkPolicy — same broadcast domain, same routing plane
Diagram 1 — The Problem: one default network, many tenants, isolation enforced only by policy

That's sufficient for most workloads. But it starts to strain the moment an architect needs something stronger than a rule that could, in principle, be misconfigured — a Financial Services namespace that must be provably unreachable from a Development namespace, not just policy-blocked from it. Auditors ask about topology. Rules can be changed by anyone with the right RBAC; topology can't be crossed at all.

What if, instead of one shared network with rules layered on top, a namespace could have its own completely separate SDN — its own router, its own switch, its own routing domain? That's exactly what a User Defined Network is.


Before We Go Further

Where Does UDN Actually Live?

One compact answer before diving into the architecture.

Kubernetes API
UDN CRD
OVN-Kubernetes
Northbound DB
Southbound DB
OVS
Worker Nodes
A UDN is not another CNI, and it doesn't run its own agent. It's an OVN topology generated from a Kubernetes resource — the same pipeline as everything else in this cluster's networking stack.

Section 02 · Hero Architecture

What Is a User Defined Network?

Get one misconception out of the way immediately: a UDN is not another network interface. It's not Multus. It's not another bridge sitting beside the default one. A UDN doesn't extend the default OVN network — it instructs OVN to build an entirely separate logical forwarding topology that coexists on the same cluster infrastructure: its own logical switch, its own logical router, its own ACLs, its own NAT rules, and its own routing tables, completely separate from the default network's.

Is Multus Still Involved?

A fair question, since Multus has been the go-to answer for "extra networks" in Kubernetes for years. For a primary UDN — the case covered in this entire article — the answer is no: the pod's primary interface attaches directly through OVN-Kubernetes's own CNI, no Multus in the path.

Pod
Multus
OVN Secondary Network
UDN (as secondary)

Multus only re-enters the picture for secondary UDN attachments — a pod with an additional interface into a UDN alongside its primary network.

OVN Northbound DBDesired state store Cluster RouterOVN logical router Default NetworkDefault logical switch UDN-1Isolated OVN topology UDN-2Isolated OVN topology Logical Switch Logical Switch Logical Switch Pods Pods (ns-A) Pods (ns-B)
Diagram 2 — Hero Architecture: one Northbound DB, one cluster router, three fully independent topologies branching from it
Architecture Note: Every branch below the cluster router in this diagram — Default Network, UDN-1, UDN-2 — is a complete, self-contained OVN topology. They share the same physical nodes and the same OVS instances, but nothing about their logical forwarding plane overlaps.

One clarification worth stating precisely, since diagrams can imply more sharing than actually exists: every UDN still connects to the cluster-level routing framework, but only through its own isolated logical objects. Traffic between different UDNs is absent by default — not filtered, absent — unless explicit connectivity is deliberately configured.

Inside the Northbound DB

Zooming into what "isolated topology" actually means as rows in a database:

OVN Northbound DB — three independent object sets, same database DefaultLogical SwitchLogical RouterRouter PortSwitch PortACLAddress Set UDN-1Logical SwitchLogical RouterRouter PortSwitch PortACLAddress Set UDN-2Logical SwitchLogical RouterRouter PortSwitch PortACLAddress Set
Diagram 3 — Inside the Northbound DB: three parallel, non-overlapping sets of logical objects

Default, UDN-1, and UDN-2 each get their own complete set: Logical Switch, Logical Router, Router Port, Switch Port, ACL, Address Set. Nothing in one column references anything in another — which is exactly why there's no route between them to misconfigure in the first place.

📊 What One UDN Roughly Creates
  • 1 Logical Switch
  • 1 Logical Router
  • Router Ports
  • Switch Ports
  • ACLs
  • Address Sets
  • Load Balancer objects (if required)
Multiplied across every node — which is exactly why "one UDN per application" (see Section 09) becomes a control-plane scaling problem, not just an aesthetic one.

Section 03

How OVN Builds a UDN

Most explanations stop at "OVN creates an isolated network." Here's what that sentence actually means, mechanically, from the moment a cluster admin applies a UDN manifest.

UDN YAMLuser writesOVN-KubernetescontrollerNB Databasedesired stateLogical Router+ ACLsLogical Switch+ port bindingsSouthboundoperational stateovs-vswitchdper-node agentOpenFlowinstalled rules
Diagram 4 — UDN Creation Lifecycle: from manifest to installed OpenFlow rules

The user (or cluster admin, for CUDN) submits a UDN manifest. OVN-Kubernetes's controller watches for it and writes new rows into the OVN Northbound database — a new Logical Router, a new Logical Switch, ACLs, and port bindings, all tagged as belonging to this UDN rather than the default network. ovn-northd compiles that intent down to the Southbound database, and each node's ovs-vswitchd reads only the flows relevant to its local pods and installs them as OpenFlow rules.

Architecture Note: This is precisely the same control-plane machinery covered in Part 2 — nothing new was invented for UDN. It's the same Northbound → Southbound → ovn-controller → OVS pipeline, just producing a second, disconnected set of logical objects.

Section 04

Complete UDN Architecture

Zooming out to the full translation chain makes the isolation model click into place.

KubernetesUDN CR OVN Northboundlogical intent OVN Southboundoperational state ovn-controllerper node Workernode UDN Logical Switch+ Router (isolated) The translation chain is identical to default networking A UDN just produces a second, isolated set of Northbound objects instead of extending the default one
Diagram 5 — Translation Pipeline: Kubernetes UDN object → OVN Northbound → Southbound → ovn-controller → worker node → isolated UDN topology

This is the same translation chain readers of Part 2 already know. What's different isn't the mechanism — it's that this chain now produces a completely separate branch of logical objects, disconnected from the default network's branch at the Northbound database level.

What Actually Changed From Default Networking?

✓ Same
  • OVN databases (Northbound / Southbound)
  • Geneve overlay mechanism
  • Distributed routing engine
  • ovn-controller on every node
  • br-int as the integration bridge
◆ Different
  • Separate logical switch
  • Separate logical router
  • Separate ACLs
  • Separate address sets
  • Separate topology, end to end

This is the clearest possible statement of the article's core claim: UDN extends the existing architecture — it doesn't replace it.


Section 05

Packet Walk Inside a UDN

Once traffic is inside a UDN, forwarding behaves exactly like the default network's distributed routing covered in Part 2 — because mechanically, it is the same distributed routing engine, just scoped to this UDN's own logical router instance.

Node 1 Pod A (UDN-1)10.128.1.10 br-intIntegration bridge OVN logical routerlocal decision Node 2 Pod B (UDN-1)10.128.2.15 br-intIntegration bridge Geneve tunnel
Diagram 6 — Pod-to-pod traffic inside UDN-1, crossing nodes via Geneve

Pod A sends to Pod B. The frame hits br-int, the UDN's own logical router makes a local routing decision, and — because the destination is on another node — the packet is Geneve-encapsulated and tunneled to Node 2, where it's decapsulated and delivered.

Architecture Note: No Linux routing tables are involved anywhere in this path. Everything is OVN logical forwarding — the same principle from Part 2, now operating inside a private, isolated topology instead of the shared default one.

Section 06 · Signature Section

Isolation Model

This is where the article earns its place in the series. Most engineers assume UDN isolation works like NetworkPolicy — a rule that blocks traffic. It doesn't.

Default Networkshared cluster router UDN-1isolated topology UDN-2isolated topology no route exists no route exists Isolation by topology — not by rule
Diagram 7 — Isolation Boundaries: no route exists between separate UDN topologies, by construction

A pod in UDN-1 cannot reach a pod in UDN-2 — not because a firewall rule blocks it, but because no logical route to it exists at all. There's no shared logical router, no shared logical switch, nothing in the Northbound database connecting the two topologies. Traffic isn't dropped by a policy evaluation; it simply has nowhere to go.

Common Misconception: "UDN isolation is just stronger NetworkPolicy." It isn't. NetworkPolicy is enforcement on top of a shared network — a rule that can be misconfigured or removed. UDN isolation is architectural: the absence of any logical path between topologies. This is the single most important distinction in this article.

Section 07

UDN vs. CUDN

UDNCUDN
Namespace scopedCluster scoped
One namespaceMultiple namespaces
Team-level isolationEnterprise-wide segmentation
Created by namespace ownerCreated by cluster admin
Architecture Note: CUDN isn't a "bigger UDN" — it's the same isolated-topology concept applied at a different scope. Think of UDN as per-team and CUDN as per-business-unit.

Put simply: a CUDN is not technically different from a UDN. The underlying OVN objects — logical switch, logical router, ACLs — are built exactly the same way. The difference lies entirely in who creates it and how many namespaces consume the same isolated topology.


Section 08

UDN vs. Other Network Types

Linux BridgeLocalnetUDN
L2L2L3 SDN
Linux bridgeOVNOVN
Physical VLANPhysical LANVirtual topology
No overlayNo overlayGeneve
FastModerateFeature rich

The full seven-way matrix, including SR-IOV and macvlan, lives in the Cloud-Native Networking Architecture Portal.


Bridging Architecture to Operations

From Design Decision to Running Workload

Everything covered so far is architecture. Here's where it fits in the operational lifecycle every OpenShift platform team already thinks in.

DAY 0
Design isolation strategy — tenant, environment, or security domain
DAY 1
Deploy OpenShift with OVN-Kubernetes as the network provider
DAY 2
Create the UDN or CUDN manifest
ONGOING
Namespaces attach to the topology
Pods and VMs consume the isolated network
Architecture Note: The Day 0 decision matters most. Everything covered in the Isolation Model and Common Design Mistake sections above is really a Day 0 planning problem — UDN topology is far easier to design correctly upfront than to restructure after workloads are already running on it.

Section 09

When Should You Use UDN?

✅ Strong Architectural Fit
  • Enterprise tenant isolation across business units
  • Development, staging, and production environments sharing one cluster
  • Financial workloads with topology-level compliance requirements
  • Telecom CNFs needing dedicated network domains
  • Partner or third-party environments with zero-trust boundaries
  • Regulated workloads (HIPAA, PCI) requiring provable network separation
  • Multi-tenant AI platforms isolating customer workloads
🚫 Less Suitable
  • Single-tenant clusters with no isolation requirement — default networking is simpler
  • Workloads needing direct L2 adjacency to physical enterprise VLANs (see Localnet, Part 3)
✅ Operations Checklist — Designing Your UDN Layout
Design by tenant
Design by environment
Use L2 for VMs
Use L3 for stateless pods
Prefer CUDN when many namespaces share one topology
Avoid one UDN per application
Common Design Mistake: Creating one UDN per application. Each additional UDN adds a full set of logical objects — switch, router, ports, ACLs, address sets — that OVN and its operators must track. The funnel is real: Application → Namespace → UDN → OVN Topology → more logical objects → higher operational complexity. Design around UDN per tenant, UDN per environment, or UDN per security domain — not per microservice.

Design Recommendation: UDN L2 vs. UDN L3 vs. CUDN Localnet

Need tenant isolation? yes, pods only yes, with VMs / VLAN needs Pods only? UDN L3cluster-internal routing Need VMs? UDN L2VM live migration ready CUDN Localnetphysical VLAN
Diagram 8 — Design recommendation: choosing between UDN L2, UDN L3, and CUDN Localnet
🔍 Operational View — How Do I Know My UDN Exists?
kubectl get userdefinednetworks
kubectl describe udn <name>
ovn-nbctl show
ovn-sbctl show
ovs-vsctl show

Decision Guide — Which Network Type Across the Whole Series?

Need VMs? yes no (pods) Line-rate needed? Multi-tenant isolation? SR-IOVPart 5 Existing VLAN? UDN / CUDNthis article Default OVNPart 2 Localnet — Part 3 Linux Bridge — Part 1
Diagram 9 — Which network type? A quick decision path across the whole series

Section 10

Key Takeaways


Section 11

What's Next

Next in the Series — Part 5 of 6
SR-IOV
Why bypass Linux completely?
How VF passthrough actually works, hop by hop
When latency matters more than flexibility
Read Next