Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Components Overview

Catallaxy ships with built-in components. Each component is a self-contained module that declares configuration options and writes Kubernetes resources into deployment phases when enabled.

Components are defined in modules/lab/cluster/components/. Enable them in your cluster configuration with components.<name>.enable = true.

Component catalog

CNI

ComponentDescription
ciliumeBPF-based CNI and network policy engine. Provides pod networking, service mesh, and network observability.

Gateway

ComponentDescription
gatewayGateway API controller (Traefik). Manages ingress via HTTPRoute and TLSRoute resources. Configures TLS termination and passthrough.

PKI

ComponentDescription
cert-managerX.509 certificate management. Automates certificate issuance and renewal using the lab CA or ACME.
trust-managerDistributes CA bundles across namespaces as ConfigMaps. Ensures all services trust the lab CA.

Observability

ComponentDescription
prometheusMetrics collection and alerting (kube-prometheus-stack). Includes Prometheus, Alertmanager, and recording/alerting rules.
grafanaDashboards and visualization. Connects to Prometheus, Loki, and Tempo as data sources. Supports OIDC login via Kanidm.
lokiLog aggregation. Receives logs from OpenTelemetry collectors and provides LogQL query interface.
tempoDistributed tracing backend. Receives traces via OTLP and integrates with Grafana.
otel-collectorOpenTelemetry Collector. Deployed as agent (DaemonSet) and/or gateway (Deployment) to collect and forward logs, metrics, and traces.

Databases

ComponentDescription
cnpgCloudNativePG operator. Manages PostgreSQL clusters with automated failover, backups, and connection pooling.
redis-operatorRedis operator. Manages Redis instances and clusters.

Filesystems

ComponentDescription
openebsLocal persistent volume provisioner. Provides storage classes backed by node-local paths.
seaweedfsDistributed object storage. Provides S3-compatible storage for backups, Loki chunks, and Tempo blocks.

Registries

ComponentDescription
zotOCI-compliant container registry. Lightweight registry for local image caching and distribution.

Secrets

ComponentDescription
external-secretsSyncs secrets from external providers (Vault, AWS, etc.) into Kubernetes Secrets.
sopsSOPS-based secret decryption. Decrypts encrypted secret files at deployment time.

Identity

ComponentDescription
kanidmIdentity provider. Provides OIDC/OAuth2 authentication, user management, and WebAuthn/TOTP support.
kaniopKanidm operator. Declaratively manages Kanidm users, groups, and OAuth2 client registrations as Kubernetes resources.

GitOps

ComponentDescription
argocdArgo CD continuous delivery. Manages application deployments from Git repositories. Supports OIDC login via Kanidm.

Source Control

ComponentDescription
forgejoSelf-hosted Git forge. Lightweight GitHub/Gitea alternative with OAuth2 login, issue tracking, and CI integration.

Provisioning

ComponentDescription
cluster-apiCluster API operator (CAPI). Provisions and manages Kubernetes clusters declaratively.
crossplaneCrossplane universal control plane. Manages cloud infrastructure (DNS, compute, storage) as Kubernetes resources.

DNS

ComponentDescription
external-dnsSynchronizes Kubernetes Gateway/Ingress resources with external DNS providers (CoreDNS, Cloudflare, Route53).

VPN

ComponentDescription
netbirdWireGuard-based mesh VPN. Provides secure connectivity between clusters and external networks.

Backups

ComponentDescription
veleroCluster backup and restore. Supports scheduled backups to S3-compatible storage and cross-cluster migration.

Custom

ComponentDescription
customDeploy custom applications using components.custom.apps.<name>. Supports Helm charts, typed resources, raw YAML, and Gateway API routing without writing a full component module. See the Custom Components recipe.

Cross-component wiring

Components expose computed values through ref attributes. These are always available, even when the component is disabled, allowing safe cross-references:

{ config, ... }:
let
  certManagerRef = config.components.cert-manager.ref;
  kanidmRef = config.components.kanidm.ref;
in
{
  # Use certManagerRef.caBundleConfigMap, kanidmRef.oidcEndpoint, etc.
}

For cross-cluster references, use the lab argument:

{ lab, ... }:
{
  components.otel-collector.exporters.otlp.endpoint =
    lab.clusters.obs.components.tempo.ref.otlpGrpc;
}

See Adding Components for the full component authoring guide.