Limitations
Honest list; more in skills/litek8s/references/differences.md.
- Authentication and RBAC are simpler than upstream’s.
litek8s apiserver(and soinstall server,cluster apply) authenticates clients and enforces RBAC by default (--authorization-mode RBAC): service account tokens, client certificates signed by the cluster’s client CA (CN user, O groups; the kubeconfig it writes issystem:admininsystem:masters), and the join token (an administrator’s credential). Anonymous requests reach only/healthz,/livez,/readyz,/versionand the OIDC discovery documents; everything else gets 401.--authorization-mode RBAC-auditdecides, logs (RBAC-audit: DENY ..., and each user’s first use of a verb and resource asALLOW) and allows, to find the RBAC a cluster’s charts lack before enforcing;AlwaysAllowis the old behavior. Dev clusters (litek8s dev) stay AlwaysAllow on127.0.0.1. Missing next to upstream: OIDC, static token and webhook authenticators; the Node and ABAC authorizers (the nodes’ agents talk to the server over their own authenticated connection); client certificate revocation (certificates are valid for ten years; to cut one off, rotate the client CA by replacing<data-dir>/sa.key, which also invalidates every service account token); aggregated API servers (metrics-server) get no front-proxy identity, so their delegated authorization sees anonymous requests; the escalation check compares rules one by one (a role whose verbs are covered by several of the author’s rules together may be refused). Sign your own users’ certificates with<data-dir>/client-ca.{crt,key}(an Ed25519 CA;extendedKeyUsage = clientAuth). Keep the API port (and the Raft port, 6444) off untrusted networks anyway. Upgrading a cluster made with an earlier release, and fixing 401/403: auth.md. - One person’s project, weeks old: APIs, flags and on-disk formats may change between 0.x releases without migration.
- Not every kubelet behavior: no
Unhealthy/BackOffevents, a memoryemptyDiris one tmpfs per container mount. - NetworkPolicies are enforced on crun nodes (Linux) only; the Docker
runtime (macOS servers) stores them without effect. Traffic from a node to
its own pods (probes, NodePort and LoadBalancer relays, which run on the
node) is always allowed, and pods with
NET_ADMINcan forge source addresses on their node’s bridge (networking.md). - Pods’
imagePullSecretsare not used: nodes pull with the credentials of their registry configuration (registries.md), and the Docker API cannotdocker pushyet. - Metrics cover containers, nodes and cluster state; application
/metricsendpoints are not scraped (point a Prometheus at them). - The macOS VM never returns memory to macOS once touched (a Virtualization.framework limit); litek8s keeps the guest small instead (dev.md).
- macOS servers use Docker for pods and are meant for development; run real servers and nodes on Linux.