Skip to content

How it works

kubehz is built around one question: how much do you want to hand over, and what are you willing to share to get it? Two independent axes answer that, and a firm privacy boundary makes the answer safe.

Two axes

You choose these separately in cluster.lok8s.yaml under spec.kubehz:

yaml
spec:
  kubehz:
    hosting: self          # self | hosted
    access: registered     # none | registered | managed
    apiUrl: https://api.kubehz.cloud

Hosting — who runs the control plane

ValueMeaningStatus
selfYou provision and own the control plane on your own Hetzner account. The normal lok8s flow.Available
hostedkubehz runs the control plane (etcd, apiserver, scheduler) on its infrastructure; you run only workers.Available

Access — how much kubehz sees and does

Valuekubehz seeskubehz doesStatus
noneNothing: no platform contact at all.Nothing.Available
registeredRead-only health: Kubernetes version, nodes & status, control-plane component health, certificate expiry.Shows it in the dashboard.Available
managedManagement data for healing policies, capacity watches, desired state.Records desired state; your cluster pulls it and applies the actions that are switched on.Available (Supporter+)

The everyday combination is hosting: self + access: registered: your cluster on your account, kubehz as a read-only dashboard. access: managed is live on top of that: it adds kubehz’s management features (healing policies, capacity watches, desired-state management driven from the dashboard) and requires a Supporter subscription or higher. A managed cluster registers and is claimed exactly like a registered one; the subscription gate applies when you drive management features.

The trust boundary — who needs your Hetzner token

This is the part that matters, so it is worth stating exactly:

  • registered (self-hosted): no Hetzner token. kubehz gets read-only health and nothing else. It cannot change anything on your account or in your cluster.
  • managed on your own self-hosted cluster: token optional. kubehz records the desired state (e.g. “upgrade to v1.35”); the in-cluster agent pulls it from the platform and applies it locally with the credentials your cluster already holds. kubehz never pushes in and holds no inbound credential. Self-heal, scale and upgrade therefore need no token at all: they run inside your cluster, each behind its own execution switch. A Hetzner token is only ever needed to show you account-specific pricing, never to run the cluster.
  • hosted control plane: token required. Here you are genuinely delegating: kubehz provisions infrastructure for you, so it needs access to do so.

registered, managed and hosted are all live today; the managed boundary above is exactly how the tier works: pull-based and outbound-only. The escalation is deliberate: you grant each capability only the access it needs, nothing more.

Your data — a firm promise (self-hosted)

For self-hosted clusters this is a guarantee, not a nicety:

  • Only the data the feature you turned on needs ever leaves your cluster. registered sends health; managed sends management data. That is the whole list.
  • No telemetry. No analytics. Nothing else. We do not collect usage data, workload contents, secrets, logs, or metrics you did not opt into.
  • Outbound-only. The in-cluster heartbeat agent pushes a status snapshot on a schedule. kubehz never connects into your cluster and holds no inbound credentials to it.
  • Opt-out is one step. lo kubehz deregister plus deleting the kubehz-system namespace removes everything; your cluster keeps running.

Because the agent only pushes what a feature needs, turning a feature off turns its data off.

Ownership — registering and claiming

A cluster becomes yours on the platform in two conceptual moves:

  1. Register: provisioning announces the cluster to kubehz (or run lo kubehz register). It shows up as pending.
  2. Claim: in the dashboard you claim the pending cluster to prove ownership and link it to your account. Once claimed, it is owned by you.

That is the whole model: register → claim → owned. Claiming documents both handshakes in full: a one-time claim code, or an SSH fingerprint verified against your Hetzner account.

Principles

  • Open source first. lok8s, the CLI that provisions everything, is open source and works without kubehz. You are never locked in.
  • Honest pricing. Prices come from measured costs on our own fleet, and we explain our pricing.
  • EU data sovereignty. Infrastructure in Germany; no US cloud dependencies.

Next steps

Doc status

AspectDetail
StateLive: self-hosted, managed and hosted all available; billing starts 1 November 2026
Last reviewed14 August 2026