[HN Gopher] Show HN: Katakate - Dozens of VMs per node for safe ...
___________________________________________________________________
Show HN: Katakate - Dozens of VMs per node for safe code exec
I've built this to make it easy to host your own infra for
lightweight VMs at large scale. Intended for exec of AI-generated
code, for CICD runners, or for off-chain AI DApps. Mainly to avoid
Docker-in-Docker dangers and mess. Super easy to use with CLI /
Python SDK, friendly to AI engs who usually don't like to mess with
VM orchestration and networking too much. Defense-in-depth
philosophy. Would love to get feedback (and contributors: clear &
exciting roadmap!), thx
Author : gbxk
Score : 80 points
Date : 2025-10-21 15:22 UTC (7 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| mentalgear wrote:
| I would really like to see a good local sandboxing solution in
| this space, something that is truly local-first. This is
| especially important since many coding models / agentic builders
| will eventually become lightweight enough to run them on-device
| instead of having to buy tokens and share user data with big LLM
| cloud providers.
| dloss wrote:
| Anthropic recently released a sandboxing tool based on
| bubblewrap (Linux, quite lightweight) and sandbox-exec (macOS).
| https://github.com/anthropic-experimental/sandbox-runtime
|
| I wonder if nsjails or gVisor may be useful as well. Here's a
| more comprehensive list of sandboxing solutions:
| https://github.com/restyler/awesome-sandbox
| gbxk wrote:
| wow that's super new! Thanks for that, will look deeply into
| it and compare
| gbxk wrote:
| (sorry I didn't reply in-thread, I'm new to HN, re-posting
| response here:)
|
| Exactly! The main local requirement is to have hardware
| virtualization available (e.g. /dev/kvm) but that should be
| fine on your local linux machine. Won't work in cloud machines
| or on Mac ARM in current form but maybe if I extend
| ofrzeta wrote:
| There are some providers that offer KVM nested
| virtualization, I think Google Cloud, Digital Ocean ... any
| others?
| gbxk wrote:
| True! GCP does. I haven't tested it yet. I didn't know D.O
| does. If anyone knows others, I'm interested too!
| eyberg wrote:
| We (NanoVMs) can run (both unikernel and normal linux)
| virtualized workloads on plain old ec2 instances (eg:
| t2.small).
| elric wrote:
| Are there any such solutions that can adequately protect
| against side-channel attacks (a la rowhammer, meltdown,
| spectre, ...)? I mean protecting local file access and network
| access is pretty easy, but side-channels and VM escaping
| attacks seem like a bigger concern.
| gbxk wrote:
| That's an interesting direction! TEE support would be
| relatively straightforward with current stack (and it's on my
| roadmap), so that could be a first step forward.
| ATechGuy wrote:
| Side-channel attacks apply to multi-tenant cloud
| environments, not local.
| elric wrote:
| That seems like a naive take. If any of your local VMs are
| internet connected and are compromised, side channel
| attacks could be used to exfiltrate data from other VMs or
| the host.
| ATechGuy wrote:
| Then why only apply to VMs, why not apps?
| mkagenius wrote:
| > something that is truly local-first
|
| Hey, we built coderunner[1] exactly for this purpose. It's
| completely local. We use apple containers for this (which are
| 1:1 mapped to a lightweight VM).
|
| 1. Coderunner - https://github.com/instavm/coderunner
| _false wrote:
| What about this: https://github.com/apple/container
| sshine wrote:
| https://rstrict.cloud/ is a CLI built in Rust on top of the
| Landlock API for the Linux kernel.
|
| It lets you narrow the permission scope of an executable using
| simple command line wrappers.
| alexeldeib wrote:
| as someone in the space this ticks a lot of boxes: kubernetes-
| native, strong isolation, python sdk (ideal for ML scenarios).
| devmapper is a nice ootb approach.
|
| Glancing at the readme, is your business model technical support?
| Or what's your plan with this?
|
| Anything interesting to share around startup time for large
| artifacts, scaling, passing through persistent storage (or GPUs)
| to these sandboxes?
|
| Curious what things like 'Multi-node cluster capabilities for
| distributed workloads' mean exactly? inter-VM networking?
| gbxk wrote:
| No business model short-term. My goal is broad adoption, 100%
| open-source.
|
| By multi-node I mean so far I only support 1 k8s node, i.e. 1
| machine, but soon adding support for multiple. Still, on 20
| CPUs I can run +50 VM pods with fractional vCPU limits.
|
| For GPU passthrough: not possible today because I use
| Firecracker as VMM. On roadmap: Add support for Qemu, then GPU
| passthrough possible.
|
| Inter-VM networking: it's already possible on single-node: 1 VM
| = 1 pod. Can have multiple pods per node (have a look at
| utils/stress-test.sh). Right now I default deny-all ingress for
| safety (because by default k8s allows inter pod communication),
| but can make ingress configurable.
|
| Startup time: a second, or a few seconds, depending on which
| base image (alpine, ubuntu, etc...) and whether you use a
| before_script or not (what I execute before the network
| lockdown)
|
| Large artifacts: you can configure resource allocated to a VM
| pod in the sandbox config and it basically uses k8s resource
| limits.
|
| Let me know if any other question! Happy to help
| yjftsjthsd-h wrote:
| > No business model short-term. My goal is broad adoption,
| 100% open-source.
|
| IMHO that's kind of a red flag. There's a happy path here
| where it's successful but stays low-maintenance enough that
| you just work on it in your spare time, or it takes of and
| gets community support, or you get sponsorships or such. But
| there's also an option where in a year or two it becomes your
| job and you decide to monetize by rug-pulling and announce
| that actually paying the bills is more important than staying
| 100% open source. Not a dig at you, just something that's
| happened enough times that I get nervous when people don't
| have a plan and therefore don't have a plan to avoid the
| outcome that creates problems for users.
| gbxk wrote:
| Sure one day if it really kicks off I could think of
| offering additionally a SaaS solution with paid enterprise
| features like SOC 2 compliance, RBAC, multiple clouds
| supported, etc. Why not. But I strongly believe that for it
| to be successful, it needs a strong open-source base. Then,
| billing huge companies for compliance features or huge
| usage makes sense. That would support development of the
| open-source part too.
|
| I like the Docker model, for instance: free for companies
| under 250 employees or $10m/y revenue.
|
| In any case, it will always be open-source.
|
| Those paid enterprise features wouldn't come from closed-
| source: they would come from compliance of a particular
| SaaS-offered infra setup, that anybody else could
| reproduce. Just like HuggingFace.
| empath75 wrote:
| This seems like an amazing stack that ticks a lot of boxes for
| me, but I really dislike cli or a custom api as the UX for this
| and would prefer to manage all of this with CRDs so i can just
| use the k8s client for everything.
| gbxk wrote:
| Actually you can! After you run "k7 install" you'll have a k3s
| cluster up and running, with Kata as a runtime class, and
| Firecracker specified in Kata config. So nothing prevents you
| from hitting the Kubernetes API! kubectl will work.
|
| Note: I use k3s' internal kubectl and containerd, to avoid
| messing with your own if you have some already installed. That
| means you can run commands like "k3s kubectl ..."
|
| And thank you for the compliments on the stack.
| gbxk wrote:
| If you have any suggestion on how I can make this more friendly
| UX-wise to your personal usage, I am most interested to hear!
| And this will shape my roadmap.
| ed_mercer wrote:
| Why do I need this if I already have containers and k8s for
| running agents?
| gbxk wrote:
| It is well known that containers do not provide you safe
| isolation. It is not their purpose. They share kernel and page
| cache with the host. Any kernel exploit gives to someone in a
| container potential root control of the host (see DirtyPipe,
| DirtyCow). That's why you need VM-level isolation.
| whalesalad wrote:
| From an outside perspective, this looks silly. Like fitting a
| square peg in a round hole. But I do ack "what if we could run
| vm's as easily as we run containers" use case and atm it seems
| like things like this (and katacontainers) are the only ways to
| do it. Wondering a few things: do all the layers of abstraction
| make things brittle and how is performance impacted?
| gbxk wrote:
| It uses Kata with Firecracker which gives you as light of a
| boot as it gets. Subsecond booting for instance is accessible
| with a lighter rootfs, which is also on the roadmap (one of the
| easiest items, actually). The k8s layer doesn't add overhead
| either compared to any other VM. If you want to compare to bare
| containers, depending on workload, you could see a 5% overhead
| due to virtualization. Exact overhead would depend on workload.
| gbxk wrote:
| Thanks everyone for the amazing feedback and discussion!
|
| For anyone curious:
|
| - Docs: https://docs.katakate.org
|
| - LangChain Agent tutorial:
| https://docs.katakate.org/guides/langchain-agent
|
| It's getting late where I am, so I'm heading to bed -- looking
| forward to replying to any new comments tomorrow!
| Bnjoroge wrote:
| Great project. There's been multiple approaches/tools in the
| space(top of my head I can think of e2b, arrakis, claude's new
| tool). how is this different?
| srcreigh wrote:
| name: project-build image: alpine:latest
| namespace: default egress_whitelist: -
| "1.1.1.1/32" # Cloudflare DNS - "8.8.8.8/32"
| # Google DNS
|
| This is basically a wide-open network policy as far as data
| exfiltration goes, right?
|
| Malicious code just has to resolve <secret>.evil.com and
| Google/CF will forward that query to evil resolver.
| gbxk wrote:
| That's a config example.
|
| Yes, blocking DNS exfiltration requires DNS filtering at
| cluster level. This is what will be added with the Cilium
| integration which is top-3 on the roadmap (top of readme).
|
| DNS resolution is required for basic Kubernetes functionality
| and hostname resolution within the cluster.
|
| That's said explicitly in several places in the docs: "DNS to
| CoreDNS allowed"
|
| One thing I could do is make it exposed in config, to allow the
| user to block all DNS resolutions until Cilium is integrated.
| LMK if desired!
| srcreigh wrote:
| > One thing I could do is make it exposed in config, to allow
| the user to block all DNS resolutions until Cilium is
| integrated. LMK if desired!
|
| Yes, but it's not great for it to be an optional config
| option. Trivially easy to use data exfiltration methods
| shouldn't be possible at all in a tool like this, let alone
| enabled by default.
|
| I want to recommend ppl to try this out and not have to tell
| them about the 5 different options they need to configure in
| order for it to actually be safe. It ends up defeating the
| purpose of the tool in my opinion.
|
| Some use cases will require mitmproxy whitelists as well, eg
| default deny pulling container image except matching the
| container whitelist.
| bigwheels wrote:
| Is this basically an open-source DIY version of E2B?
|
| If so, cool! AFAICT E2B is open-source licensed but tricky to
| setup.
| ushakov wrote:
| hey, I work at E2B, anything we can do to improve the setup for
| you?
| bigwheels wrote:
| I dig E2B, it's a great service and very cost effective.
| Thanks for all your hard work!
| ushakov wrote:
| what does Katakana add on top of Kata?
___________________________________________________________________
(page generated 2025-10-21 23:00 UTC)