Backend infrastructure: three fleet classes, one contract
Hangar keeps managing agent workloads and their state. Self-hosted model serving is delegated to a separate fleet run by Modelplane, and the only thing Hangar depends on is an OpenAI or Anthropic compatible URL, so hosted providers and Modelplane are interchangeable behind the model proxy.
Adopt, do not build
Modelplane is Crossplane-native, written as Python composition functions with no controllers, and splits platform and ML personas the way Hangar does. It also provisions EKS and adopts any cluster (OKE today only by bring-your-own). Its API is v1alpha1 and v0.1, so it sits behind the contract and is pinned.
Where it breaks your principles
It holds cluster credentials, against no-cross-cluster-credentials. Contained: its own hub per environment, dedicated cloud accounts, clusters with no app or agent data.
It owns each inference cluster and installs Envoy Gateway, so it cannot share a Contour cluster.
Its Existing mode takes a kubeconfig Secret, a persisted credential. Unverified: whether short-lived cloud auth works there.
Managed the Hangar way
Hub config (InferenceClass, InferenceCluster, ModelDeployment) is durable and lives in git.
Replicas and scaling are runtime, derived by Modelplane and KEDA.
Cloud and provider keys come from Infisical through External Secrets, never git.