No description
  • Go 90.8%
  • Shell 3.5%
  • Makefile 2.8%
  • Nix 1.7%
  • Dockerfile 0.7%
  • Other 0.5%
Find a file
Antoine Viallon 33294e472c
All checks were successful
ci / test (push) Successful in 5m38s
chore(tasks): record deferred per-hostname locationpools work
Defer the disagglb.io/locationpools extension to Gateway/ListenerSet/HTTPRoute.
Agreed design: per-hostname restriction from the owning resource chain, which
requires vendoring + consuming HTTPRoute.spec.hostnames.
2026-08-20 17:15:06 +02:00
.devcontainer chore: commit remaining scaffold configs; drop GitHub Actions (Forgejo Actions is used) 2026-08-12 00:52:38 +02:00
.forgejo/workflows ci: fix CI (setup-go + make, no Go-module FOD) and release (docker-in-docker) 2026-08-19 16:52:30 +02:00
api feat(api): record port and protocol on allocation status 2026-08-19 23:47:44 +02:00
charts/disagglb feat(api): record port and protocol on allocation status 2026-08-19 23:47:44 +02:00
cmd feat(gateway): M6.4 — Envoy SNI TLS termination + gateway demux hostnames 2026-08-18 19:19:20 +02:00
config feat(api): record port and protocol on allocation status 2026-08-19 23:47:44 +02:00
deploy/forgejo feat(manager): HA — 3 replicas, node anti-affinity, broad NoSchedule tolerations 2026-08-17 12:21:16 +02:00
docs feat(controller): add disagglb.io/locationpools location restriction 2026-08-19 23:49:22 +02:00
hack chore(e2e): dockerd shim for multi-device bcachefs hosts 2026-08-12 00:52:22 +02:00
internal fix(controller): honor the service's IP family when allocating addresses 2026-08-20 17:15:01 +02:00
nix/golangci-lint feat(nix): golangci-lint with the logcheck plugin as a proper derivation 2026-08-19 16:33:36 +02:00
plugins feat(m2.9): dummy accept-all plugin + webhook round-trip test 2026-08-14 23:04:55 +02:00
protocol refactor(protocol): extract shared webhook protocol module (oapi-codegen types + Router/Adapter) 2026-08-14 22:26:06 +02:00
test fix(gateway): underscore-free wildcard anchor (OVH rejects underscores) 2026-08-19 15:50:28 +02:00
.custom-gcl.yml chore: commit remaining scaffold configs; drop GitHub Actions (Forgejo Actions is used) 2026-08-12 00:52:38 +02:00
.dockerignore fix(build): re-include nested go.mod files for plugin modules 2026-08-14 22:30:01 +02:00
.gitignore build(nix): go vet check + pre-push git hooks (git-hooks.nix) 2026-08-19 11:49:42 +02:00
.golangci.yml ci: Nix-based CI + fix homeless-shelter purity check 2026-08-19 14:07:15 +02:00
AGENTS.md docs: gateway status ownership, IPv4 ingress, and dev gotchas 2026-08-19 19:31:35 +02:00
Dockerfile fix(prober): use distinct metrics/health ports to avoid agent collision 2026-08-15 14:51:51 +02:00
flake.lock build(nix): go vet check + pre-push git hooks (git-hooks.nix) 2026-08-19 11:49:42 +02:00
flake.nix release: v0.1.2 2026-08-19 19:14:37 +02:00
go.mod refactor(protocol): extract shared webhook protocol module (oapi-codegen types + Router/Adapter) 2026-08-14 22:26:06 +02:00
go.sum feat(portmap): UPnP, NAT-PMP, PCP, and webhook providers + OpenAPI contract 2026-08-14 12:49:23 +02:00
LICENSE chore: kubebuilder scaffold, Apache-2.0 license 2026-08-12 00:52:16 +02:00
Makefile feat(nix): golangci-lint with the logcheck plugin as a proper derivation 2026-08-19 16:33:36 +02:00
mkdocs.yml docs(gateway): M6.5 — gateway integration guide + e2e 2026-08-18 19:23:35 +02:00
PROJECT chore: kubebuilder scaffold, Apache-2.0 license 2026-08-12 00:52:16 +02:00
README.md docs: readme, e2e rules in AGENTS.md, M0 task status 2026-08-12 00:52:22 +02:00
ROADMAP.md docs(m7): plan the kernel data plane (IPVS + nft, drop Envoy) 2026-08-19 23:48:59 +02:00
TASKS.md chore(tasks): record deferred per-hostname locationpools work 2026-08-20 17:15:06 +02:00

DisaggLB

A Kubernetes LoadBalancer operator for disaggregated networks: several homelab sites, each with its own ISP, no BGP, one NATed public IPv4 per site, and L3-routable IPv6. IPs are location-bound and can never move — failover and migration happen through DNS (ExternalDNS + multi-value A/AAAA RRsets), not through IP mobility.

Status: early development. The design is settled; M0 (scaffold & CRDs) is in progress. See below.

Documentation

Quick summary

  • Standard Service + loadBalancerClass: disagglb.io/site; optional LoadBalancerConfig CRD for rich config (locations, DNS, health, drain).
  • LocationPool CRD models each site's location-bound inventory.
  • IPv6 via DHCPv6-PD; IPv4 via UPnP/NAT-PMP/PCP/webhook/manual port mapping.
  • Envoy site proxies (xDS from the manager), prefer-local with cross-site fallback.
  • DNS via ExternalDNS (--source=crd); phase 2 adds a dedicated authoritative NS (dnsd) with weighted/GeoIP answers.

License

Apache-2.0, see LICENSE.