Problem
Running multi-tenant Sysbox workloads under k3s on dstack CVMs (same setup as Dstack-TEE/meta-dstack#80). k3s ships its embedded kube-router NetworkPolicy controller to enforce Kubernetes NetworkPolicy, which requires the netfilter ipset kernel support. The 6.9.0-dstack kernel is built without it, so on startup the controller fails and skips policy enforcement entirely:
ipset save failed: ipset v7.16: Kernel error received: Invalid argument
After this, iptables contains zero KUBE-NWPLCY chains and any applied NetworkPolicy objects are silently unenforced — meaning tenant pods on the same CVM have unrestricted east-west network access to each other. For multi-tenant isolation this is the network-layer counterpart of the disk-quota gap fixed in Dstack-TEE/meta-dstack#80 / #779.
Reproduction: on a sysbox-image CVM running k3s v1.35.x with disable-network-policy: false, apply any NetworkPolicy, then check journalctl -u k3s | grep ipset and iptables-save | grep KUBE-NWPLCY (empty).
Requested change
Add to os/yocto/layers/meta-dstack/recipes-kernel/linux/files/dstack-sysbox.cfg (or dstack.cfg, matching how #779 placed generic facilities), built-in like the quota/loop precedent since the guest has no module-loading tooling:
# Netfilter ipset, required by k3s/kube-router NetworkPolicy enforcement
# for multi-tenant network isolation.
CONFIG_IP_SET=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_NETFILTER_XT_SET=y
These cover the set types kube-router creates (hash:ip, hash:net, hash:ip,port, ...) plus the -m set iptables match (xt_set).
Alternative considered
An eBPF CNI (Cilium) would avoid ipset, and dstack.cfg already enables CONFIG_BPF/BPF_SYSCALL/BPF_JIT/DEBUG_INFO_BTF — but swapping the CNI is a much larger operational change for guests than enabling the standard netfilter feature the stock k3s path expects. ipset support also benefits any guest using plain iptables+ipset firewalling.
Problem
Running multi-tenant Sysbox workloads under k3s on dstack CVMs (same setup as Dstack-TEE/meta-dstack#80). k3s ships its embedded kube-router NetworkPolicy controller to enforce Kubernetes
NetworkPolicy, which requires the netfilter ipset kernel support. The6.9.0-dstackkernel is built without it, so on startup the controller fails and skips policy enforcement entirely:After this, iptables contains zero
KUBE-NWPLCYchains and any appliedNetworkPolicyobjects are silently unenforced — meaning tenant pods on the same CVM have unrestricted east-west network access to each other. For multi-tenant isolation this is the network-layer counterpart of the disk-quota gap fixed in Dstack-TEE/meta-dstack#80 / #779.Reproduction: on a sysbox-image CVM running k3s v1.35.x with
disable-network-policy: false, apply anyNetworkPolicy, then checkjournalctl -u k3s | grep ipsetandiptables-save | grep KUBE-NWPLCY(empty).Requested change
Add to
os/yocto/layers/meta-dstack/recipes-kernel/linux/files/dstack-sysbox.cfg(ordstack.cfg, matching how #779 placed generic facilities), built-in like the quota/loop precedent since the guest has no module-loading tooling:These cover the set types kube-router creates (
hash:ip,hash:net,hash:ip,port, ...) plus the-m setiptables match (xt_set).Alternative considered
An eBPF CNI (Cilium) would avoid ipset, and
dstack.cfgalready enablesCONFIG_BPF/BPF_SYSCALL/BPF_JIT/DEBUG_INFO_BTF— but swapping the CNI is a much larger operational change for guests than enabling the standard netfilter feature the stock k3s path expects. ipset support also benefits any guest using plain iptables+ipset firewalling.