2026-01-06 04:21:16 +02:00
2026-01-05 02:13:19 +02:00
2026-01-05 01:06:01 +02:00
2026-01-05 06:26:23 +02:00
2025-12-28 22:04:21 +02:00
2026-01-05 00:38:31 +02:00
2025-08-14 21:06:59 +03:00
2026-01-05 05:42:43 +02:00
2026-01-03 09:44:51 +02:00
2025-12-28 22:28:36 +02:00
2026-01-03 09:43:43 +02:00
2025-08-14 20:28:42 +03:00
2026-01-05 01:00:30 +02:00
2026-01-03 09:40:29 +02:00
2026-01-03 07:20:11 +02:00
2025-12-28 22:28:36 +02:00
2026-01-03 09:37:57 +02:00
2025-12-28 22:35:42 +02:00
2026-01-05 01:55:52 +02:00
2025-12-28 22:35:42 +02:00
2025-06-18 18:21:35 +03:00
2023-07-28 12:23:29 +03:00
2024-07-30 14:15:13 +03:00
2022-08-25 11:22:50 +03:00
2026-01-05 23:14:00 +02:00
2024-07-30 10:32:57 +03:00

k-space.ee infrastructure

Kubernetes manifests, Ansible playbooks, and documentation for K-SPACE services.

Jump to docs: inventory-app / cameras / doors / list of apps // all infra / network / retro / non-infra

Tip: Search the repo for kind: xyz for examples.

Supporting services

  • Build Git repositories with Woodpecker1 .
  • Passmower: Authz with kind: OIDCClient (or kind: OIDCMiddlewareClient2 ).
  • Traefik3 : Expose services with kind: Service + kind: Ingress (TLS and DNS included).

Additional

  • bind: Manage additional DNS records with kind: DNSEndpoint.
  • Prometheus: Collect metrics with kind: PodMonitor (alerts with kind: PrometheusRule).
  • Slack bots and Kubernetes CLUSTER.md itself.

Network

All nodes are in Infra VLAN 21. Routing is implemented with BGP, all nodes and the router make a full-mesh. Both Serice LB IPs and Pod IPs are advertised to the router. Router does NAT for outbound pod traffic. See the Calico installation for Kube side and Routing / BGP in the router. Static routes for 193.40.103.36/30 have been added in pve nodes to make them communicating with Passmower via Traefik more stable - otherwise packets coming back to the PVE are routed directly via VLAN 21 internal IPs by the worker nodes, breaking TCP.

Regenerate networkpolicy-base.yml

It's quite odd there is no better way to generate these.

regenerate-networkpolicy-base.sh

Databases / -stores:

  • Dragonfly: kind: Dragonfly (replaces Redis4 )
  • External (hyperconverged Proxmox) Rook/Ceph: rook-ceph/storage-classes.yaml (filesystem storage)5
  • Mongo6 : kind: MongoDBCommunity (NAS* inventory-mongodb)
  • Garage S37 : buckets/credentials created with CLI and usually stored in secretspace/kube #TODO: link to docs, kube claim instead?
  • MariaDB*: search for mysql, mariadb8 (replaces MySQL)
  • Postgres*: hardcoded to harbor/application.yml
  • Seeded secrets: kind: SecretClaim (generates random secret in templated format)
  • Secrets in git: https://git.k-space.ee/secretspace (members personal info, API credentials, see argocd/deploy_key.pub comment)

This page is referenced by wiki front page as the technical documentation for infra.


  1. Replaces Drone CI. ↩︎

  2. Applications should use OpenID Connect (kind: OIDCClient) for authentication, whereever possible. If not possible, use kind: OIDCMiddlewareClient client, which will provide authentication via a Traefik middleware (traefik.ingress.kubernetes.io/router.middlewares: passmower-proxmox@kubernetescrd). Sometimes you might use both for extra security. ↩︎

  3. No nginx annotations! Use kind: Ingress instead. IngressRoute is not used as it doesn't support external-dns out of the box. ↩︎

  4. Redis has been replaced as redis-operatori couldn't handle itself: didn't reconcile after reboots, master URI was empty, and clients complained about missing masters. Dragonfly replaces KeyDB. ↩︎

  5. Replaces Longhorn and proxmox-csi. ↩︎

  6. Mongo problems: Incompatible with rawfile csi (wiredtiger.wt corrupts), complicated resizing (PVCs from statefulset PVC template). ↩︎

  7. Replaces Minio S3. ↩︎

  8. As of 2024-07-30 used by auth, authelia, bitwarden, etherpad, freescout, git, grafana, nextcloud, wiki, woodpecker ↩︎

Description
Kubernetes manifests of services running on k-space.ee domains (mirrored to https://gitlab.com/k-space/kube)
Readme 2.4 MiB
Languages
Shell 100%