| Crates.io | kflow |
| lib.rs | kflow |
| version | 0.1.2 |
| created_at | 2025-12-10 21:20:53.656182+00 |
| updated_at | 2025-12-11 07:26:26.40416+00 |
| description | Node-local daemon and TUI that reads kernel conntrack and visualizes per-node network connections. |
| homepage | https://github.com/AlexsJones/kflow |
| repository | https://github.com/AlexsJones/kflow |
| max_upload_size | |
| id | 1978795 |
| size | 817,909 |
kflow — node-local network "top"
kflow is like top for Kubernetes networking. It finds connections through conntrack on your nodes and identifies point to point connections across those nodes. It is a tool for debugging and diagnostics.
Coming soon: Throughput metrics to rank connections

cargo install kflow
kflow install
kflow # opens tui
Press h for keybinding information
The agent intentionally requires elevated privileges on the node. The DaemonSet mounts the host /proc into each pod, runs the container as root, and requests NET_ADMIN/NET_RAW capabilities so it can read live conntrack state. Applying the provided Kubernetes manifest therefore requires a user with permission to create DaemonSets and hostPath mounts in the target namespace (cluster-admin or equivalent RBAC is usually needed).
Build the CLI and daemon locally with Cargo. The repository contains a multi-stage Dockerfile.daemon and a k8s/daemonset.yaml manifest; the CLI provides install and uninstall subcommands that call kubectl for convenience.
To build and run the CLI (the binary is named kflow):
cargo build --bin kflow
./target/debug/kflow
Install the DaemonSet into the current cluster context (may require cluster-admin). The installer accepts an optional --conntrack value to override the path the daemon reads from inside the pod:
kflow install -n <namespace>
kflow install --conntrack /proc/net/ip_conntrack -n <namespace>
Remove the DaemonSet:
kflow uninstall -n <namespace>
Notes: some environments (for example kind) may not expose conntrack entries by default or may use a different proc path. If pods show no connections, verify conntrack is present on the node (sudo head -n 20 /proc/net/nf_conntrack) and that the manifest is mounting /proc into /host/proc inside the pod.
kflow relies on the kernel conntrack table being available on each node so the node-local daemon can read active connections. Many Linux distributions expose conntrack under /proc/net/ but the exact filename and location can vary by kernel/module and distribution.
Common paths you may encounter:
/proc/net/nf_conntrack (modern kernels, common on many distros)/proc/net/ip_conntrack (older kernels or different module naming)/proc/net/nf_conntrack6 (IPv6 conntrack on some systems)If you run the provided DaemonSet the manifest mounts the host /proc into the pod at /host/proc and sets the default CONNTRACK_PATH to /host/proc/net/nf_conntrack. If you have a different host path, supply a container-visible path to the installer using --conntrack.
Examples:
Node exposes the file at /proc/net/nf_conntrack (default):
kflow install -n monitoring
Node exposes the file at /proc/net/ip_conntrack (override):
kflow install --conntrack /proc/net/ip_conntrack -n monitoring
You mounted host /proc at a different location inside the pod (advanced):
Edit k8s/daemonset.yaml so the volumeMount and CONNTRACK_PATH agree, or pass the exact path the daemon can see inside the container with --conntrack.
The daemon can attempt to auto-detect the correct conntrack file path if you don't want to pick an exact path.
This is enabled by default.
Use the installer to embed a custom path into the manifest (the installer will translate /proc/... to /host/proc/... when needed):
`kflow install --conntrack <whatever> -n monitoring`
If auto-detection fails the daemon will log a message and fall back to the configured path; using KFLOW_DEBUG will emit helpful debug messages about which candidate paths were tested.
Quick debugging checklist if pods show no connections:
sudo head -n 20 /proc/net/nf_conntrack (or your distro's path).kubectl exec -n <ns> <pod> -- ls -l /host/proc/net and kubectl exec -n <ns> <pod> -- head -n 5 /host/proc/net/nf_conntrack.kflow install --conntrack <path> where <path> is the host's path (our installer translates /proc/... to the mounted /host/proc/... for you).