# Network Observability

Network Observability provides continuous visibility into network traffic across your cluster — connections, DNS queries, and per-workload bandwidth — using eBPF (opens new window) via Inspektor Gadget (opens new window).

It is composed of two components:

  • Agent (network-flow) — a DaemonSet running on every node. It attaches eBPF programs to the kernel to capture TCP connections, traffic volumes, and DNS activity, then streams events to the aggregator.
  • Aggregator (network-flow-aggregator) — a Deployment that enriches raw events with Kubernetes metadata (pod, namespace, workload owner), buffers them, and forwards the data to Insights.

# Requirements

# Linux nodes with eBPF support

The agent requires Linux nodes with bpf and debugfs filesystems available. Windows nodes are not supported.

# Elevated permissions

Because the agent uses eBPF, it requires a set of elevated Linux capabilities and host filesystem mounts. These are configured automatically by the chart, but your cluster must permit them (e.g. PodSecurity policies or admission webhooks must allow the required capabilities):

Requirement Value
Linux capabilities SYS_ADMIN, SYSLOG, SYS_PTRACE, SYS_RESOURCE, IPC_LOCK, NET_RAW, NET_ADMIN
AppArmor unconfined
SELinux type super_t
Host mounts /sys/fs/bpf, /sys/kernel/debug, /sys/fs/cgroup, plus several paths under /host

The aggregator runs with no elevated privileges.

# Setup

Add the following to your insights-agent values.yaml:

network-observability:
  enabled: true

This is the minimum configuration needed. The agent will discover the in-cluster aggregator automatically, and the aggregator will forward enriched flow data to Insights using the token already configured for the agent.

# Architecture

Agents on each node capture flow events via eBPF and stream them to the aggregator, which enriches them with Kubernetes metadata and forwards them to Insights.

# Configuration

The full values reference is in the chart README (opens new window). The most relevant options are listed below.

# Agent

network-observability:
  agent:
    collectorAddr: ""       # default: in-cluster aggregator service; override to point elsewhere
    batchSize: 5000         # events per gRPC batch sent to the aggregator
    maxPendingEvents: 25000 # max events queued before dropping; reduce if OOMing
    flushInterval: 5s       # how often to flush pending events
    logLevel: info
    ig:
      hookMode: auto        # eBPF attach mode; set to 'cgroup' on kernels that need it
      eventsBufferLength: 32768

# Aggregator

network-observability:
  aggregator:
    replicas: 1
    maxEvents: 100000       # max events held in memory across all nodes
    maxAge: 15m             # evict events older than this
    upstream:
      enabled: true
      batchSize: 10000
      flushInterval: 10s

# Caveats

# Cost

The agent runs as a DaemonSet — one pod per node. Default resource requests are 50m CPU / 128Mi memory. On large clusters with high network activity, raise maxPendingEvents or resources.limits before raising the buffer to avoid OOM restarts.

# Admission webhook compatibility

If your cluster enforces Pod Security Standards at restricted or baseline level, the agent pod will be rejected because it requires SYS_ADMIN and other capabilities. You will need to exempt the insights-agent namespace or create a policy exception for the network-flow DaemonSet.

# Kernel version

Older kernels (pre-4.18) may not support all eBPF program types used by Inspektor Gadget. If you see the agent crashing at startup, check ig.hookMode; setting it to cgroup can help on certain distributions.