All flags, environment variables, ConfigMap settings, and tuning guidance for unbounded-net.
This document describes all configuration options for unbounded-net components.
For a conceptual introduction, see Networking Concepts.
Runtime Configuration
Both the controller and node agent load runtime settings from a shared YAML
file mounted from the unbounded-net-config ConfigMap.
Default path: /etc/unbounded-net/config.yaml
Override: --config-file=<path>
Startup behavior: fail-fast if the config file is missing or invalid.
CLI flags still work as explicit overrides when set.
Config Structure
common:azureTenantId:""# Only for Azure Portal links in the UIapiserverURL:""# Override API server URL (empty = in-cluster)logLevel:2# klog verbosity (0-10), watched for live changescontroller:healthPort:9999nodeAgentHealthPort:9998informerResyncPeriod:300sstatusStaleThreshold:40sregisterAggregatedAPIServer:truemanagedKubeProxy:enabled:trueimage:""leaderElection:enabled:trueleaseDuration:15srenewDeadline:5sretryPeriod:10snode:cniConfDir:/host/etc/cni/net.dcniConfFile:10-unbounded.conflistbridgeName:cbr0wireGuardDir:/host/etc/wireguardwireGuardPort:51820mtu:0healthPort:9998tunnelDataplaneMapSize:16384tunnelIPFamily:IPv4preferredPrivateEncap:GENEVEpreferredPublicEncap:WireGuardgenevePort:6081geneveVni:1vxlanPort:4789
Controller Configuration
Managed kube-proxy
The controller creates a kube-proxy DaemonSet for each Site whose nodes are not
covered by the provider-managed kube-proxy. Each DaemonSet uses the Site’s pod
CIDR and runs only on nodes labeled for that Site and for unbounded-managed
kube-proxy.
The image setting defaults to an empty string. When it is empty, the controller
reuses the image from the kube-system/kube-proxy DaemonSet. If that DaemonSet
does not exist, it uses registry.k8s.io/kube-proxy:<server version>.
Set controller.managedKubeProxy.image to override the image for all
unbounded-managed kube-proxy DaemonSets, for example when pulling kube-proxy
through a private registry. Set controller.managedKubeProxy.enabled to false
to disable their creation.
Flag
Runtime setting
Default
Description
--managed-kube-proxy
controller.managedKubeProxy.enabled
true
Create kube-proxy DaemonSets for unbounded-managed Site nodes not covered by provider kube-proxy.
--managed-kube-proxy-image
controller.managedKubeProxy.image
""
Override the kube-proxy image used by unbounded-managed DaemonSets.
Leader Election
Flag
Default
Description
--leader-elect
false
Enable leader election for HA.
--leader-elect-lease-duration
15s
Duration of the leader lease.
--leader-elect-renew-deadline
5s
Deadline for renewing leadership.
--leader-elect-retry-period
10s
Retry period for acquiring leadership.
Health and Monitoring
Flag
Default
Description
--health-port
9999
Health check HTTP server port (0 to disable).
--node-agent-health-port
9998
Node agent health port (for dashboard links).
--status-stale-threshold
40s
Duration after which pushed status is stale.
--register-aggregated-apiserver
true
Enable aggregated API status endpoints.
--informer-resync-period
300s
Informer resync interval.
Logging
Flag
Default
Description
-v
0
Log verbosity level (0-10).
--logtostderr
true
Log to stderr.
Node Agent Configuration
General
Flag
Default
Env Var
Description
--node-name
–
NODE_NAME
Name of this node (required).
--health-port
9998
–
Health check server port.
--informer-resync-period
3600s
–
Informer resync period.
--route-table-id
252
–
Custom routing table ID.
--preferred-private-encap
GENEVE
–
Preferred encap for internal links.
--preferred-public-encap
WireGuard
–
Preferred encap for external links.
--health-flap-max-backoff
120s
–
Max backoff for health check flap dampening.
CNI Configuration
Flag
Default
Description
--cni-conf-dir
/etc/cni/net.d
CNI configuration directory.
--cni-conf-file
10-unbounded.conflist
CNI configuration file name.
--bridge-name
cbr0
Bridge interface name.
--mtu
0
Optional MTU cap. Zero derives MTU from each peer’s underlay route and encapsulation type.
MTU Guidance
The node.mtu setting caps the automatically selected MTU on tunnel and bridge interfaces. Zero enables automatic selection.
Encapsulation overhead:
Type
Overhead
WireGuard
80 bytes
GENEVE
58 bytes
VXLAN
50 bytes
IPIP
20 bytes
The node agent resolves the route to each peer and subtracts the selected
encapsulation overhead. For example, WireGuard over a 1500-byte route uses
1420.
Behavior:
Each peer’s effective MTU is the lowest applicable configured cap, CRD
tunnelMTU, and route MTU after encapsulation overhead.
Sites and GatewayPools form a topology connected by SitePeerings,
SiteGatewayPoolAssignments, and GatewayPoolPeerings. The lowest tunnelMTU
in the local site’s connected topology is applied site-wide, including
downstream multi-hop gateway paths.
The CNI MTU is the lowest effective peer or connected-topology MTU.
At startup and whenever the effective CNI MTU changes, the node agent updates
the CNI bridge and both endpoints of existing pod veth pairs.
Forwarded TCP SYN packets on every interface are MSS-clamped to the
site-wide fabric MTU (MTU - 40 for IPv4 and MTU - 60 for IPv6).
A value of 0 enables route-specific automatic MTU selection.
WireGuard
Flag
Default
Description
--wireguard-dir
/etc/wireguard
WireGuard key storage directory.
--wireguard-port
51820
WireGuard listen port.
--wireguard-interface-prefix
wg
Prefix for per-port WireGuard interface names; runtime name is <prefix><port>. See Tunnel interface names.
The three shared tunnel device names (geneve0, vxlan0, ipip0) and the per-port WireGuard interface prefix (default wg) are configurable via the flags above and via the matching YAML fields under node: (geneveInterfaceName, vxlanInterfaceName, ipipInterfaceName, wireGuardInterfacePrefix). Operators rarely need to change them.
Constraints, enforced at startup:
Shared tunnel names: non-empty, at most 15 bytes (Linux IFNAMSIZ limit), pairwise distinct, must not equal unbounded0.
WireGuard prefix: non-empty, at most 10 bytes (so prefix + 5-digit UDP port fits in IFNAMSIZ), no /, must not equal unbounded0.
unbounded0 (the agent’s eBPF dummy device) is not configurable.
When the names are changed, the agent automatically removes previous-run devices it can confidently identify, scoped narrowly so other CNIs (e.g. Cilium) running flow-based GENEVE / VXLAN on different UDP ports are not touched. IPIP is not auto-cleaned: remove a renamed-away IPIP device manually with ip link del <old-name>.
Tunnel Dataplane
The node agent uses an eBPF dataplane: BPF LPM tries on the unbounded0 interface drive per-destination tunnel redirection.
Flag
Default
Description
--tunnel-dataplane-map-size
16384
Max entries per BPF LPM trie map.
--tunnel-ip-family
IPv4
Underlay IP family for tunnel encapsulation (IPv4 or IPv6).
Tunnel Protocol Selection
The tunnelProtocol field is available on all scope CRDs:
Value
Overhead
Encrypted
Use Case
WireGuard
80 bytes
Yes
Cross-site links over public networks
GENEVE
58 bytes
No
High-throughput internal links
VXLAN
~58 bytes
No
Links with VXLAN hardware offload
IPIP
20 bytes
No
Minimal overhead internal links
None
0 bytes
No
Direct L3 routing
Auto
Varies
Varies
System selects based on link type (default)
When Auto, links using external IPs use WireGuard; internal-only links use
the preferred private encap (default GENEVE). The security-wins rule ensures
WireGuard is used if any scope explicitly requests it.
See Routing Flows for
the full protocol selection algorithm.
Status Push
Flag
Default
Description
--status-push-enabled
true
Push status to controller.
--status-push-interval
10s
Push interval.
--status-ws-enabled
true
Enable WebSocket transport.
--status-ws-apiserver-mode
fallback
never, fallback, or preferred for API server relay.
--status-critical-interval
1s
Max critical-delta publish frequency.
--status-stats-interval
15s
Max statistics-delta publish frequency.
Health Check (UDP Probes)
Flag
Default
Description
--healthcheck-port
9997
UDP health check probe port (0 to disable).
--base-metric
1
Base metric for programmed routes.
Health check sessions are automatically created for all routes with nexthops.
Route metric adjustment on failure provides fast failover.