Container security is fucked.
Your containers are spinning up and down randomly, talking to each other in ways that would make your network engineer weep, and most security tools either block everything (breaking prod) or let everything through (defeating the point).
Traditional firewalls don't know what the hell a pod is. Vulnerability scanners find CVEs from 2003 in base images that haven't been patched since Obama was president. Most organizations tweet about being "concerned about container security" while still running legacy approaches that treat containers like fucking VMs.
The Reality of Container Security
I've debugged enough production incidents to know that container security theater is worse than no security. At least with no security, you know you're vulnerable. With bad security, you get a false sense of safety right up until someone pwns your Bitcoin exchange.
How NeuVector Actually Works
NeuVector deploys as containers in your cluster and basically spies on everything. Here's what actually happens:
It Learns Your Apps:
Instead of making you write YAML firewall policies (thank fucking god), it watches your containers for a few days and figures out what they normally do. Then it builds firewall rules automatically. This is pure magic when it works, but it completely shits the bed if you deploy new stuff during the learning phase
- learned this during a midnight deployment that took down our payment processing for 45 minutes.
Runtime Protection: It catches processes doing suspicious things in your containers
- like some asshole spawning
/bin/bash
where there shouldn't be one.
Works pretty well, though you'll get false positives if you're doing anything clever with init containers.
Network Segmentation: Creates a Layer 7 firewall between your containers.
This is where it gets interesting
- it actually understands HTTP and g
RPC traffic, not just ports. But it breaks if your load balancer does anything non-standard with headers (and AWS ALB loves doing non-standard shit).
Vulnerability Scanning: Scans your images for CVEs.
The scanning engine is decent, but the UI will drown you in medium-severity findings from dependencies you can't update because they'd break half your stack.
The Architecture (And What Breaks First)
NeuVector has 4 pieces that matter in production:
Controllers:
The brains. Usually the first thing to break when you upgrade Kubernetes. Run 3 in production or you'll hate yourself when one dies during a critical incident.
Enforcers: DaemonSet that runs on every node.
These actually block traffic. They crash if you're using containerd without the right flags (spent 3 hours debugging this).
Manager: The web UI.
Built with Angular and Scala because someone wanted to be fancy. Looks like it was designed in 2015 but works once you get past the visual pain.
Scanners: Resource-hungry image scanners that will steal CPU from your actual workloads if you don't set proper limits.
Deployment Gotchas (You Will Hit These)
Container Runtime Hell:
If you're using containerd, you need --set containerd.enabled=true
or the enforcers won't start. The error message is "Unknown container runtime"
- completely fucking useless. Took me an hour scrolling through Git
Hub issues to figure this out, and another 2 hours when I realized K3s 1.28.2 changes the socket path again.
K3s is Special: Use --set k3s.enabled=true
if you're on K3s.
Because K3s puts socket files in weird places for no good reason.
Memory Limits: Default memory limits are way too low.
You'll get OOMKilled (exit code 137) in production. Start with 512Mi for enforcers and 1Gi for controllers.
cgroup v2: If you're on Ubuntu 22.04+, make sure cgroup v2 is enabled.
The pods crash loop with cryptic errors on v 1.
When NOT to Use NeuVector
Skip NeuVector if:
- You deploy constantly (learning phase never finishes)
- You have weird networking (custom CNI plugins confuse it)
- You can't tolerate network latency (adds 1-2ms per request)
- Your cluster is under-resourced (needs 4GB+ RAM total)
The GitHub issues section is where you'll spend your time debugging why your specific setup doesn't work. Community discussions are more helpful than docs for edge cases.
Reality check complete. Now let's talk about actually getting this deployed...