Short version: a minimal, fast ingress controller split into a Go control-plane (discovers config) and a Rust data-plane (does the actual proxying). The two talk over gRPC streaming.
- helm repo add argon https://raw.githubusercontent.com/Paramoshka/Argon/main/.deploy
- helm repo update
- helm install argon argon/argon --version 0.4.1
- Watches your cluster (Ingresses/Services/etc.).
- Builds immutable Snapshots: { routes[], clusters[] }.
- Streams updates with Watch(WatchRequest{ node_id }) → stream Snapshot
- Async reverse proxy built on Tokio + hyper v1 + hyper-util + tonic.
- Maintains in-memory RouteTable and Clusters from the Snapshot.
- Load-balancing: RoundRobin (more to come).
- Zero-copy hot updates (reads guarded by RwLock, no restarts).
- Graceful shutdown: stops accepting, waits active conns, then exits.
- Route: { host, path, path_type: "Prefix"|"Exact", cluster, priority }
- Cluster: { name, lb_policy: "RoundRobin", endpoints[], timeout_ms, retries }
- Endpoint: { address, port, weight, zone, region }
- Extract Host (prefer header, fallback to absolute URI).
- Match Route by (host, path).
- Pick an Endpoint via the cluster’s LB policy.
- Proxy request to address:port.
How to configure Ingress (annotations, timeouts, backend protocols) — see docs/settings.md.
-
✅ Go control-plane → streaming Snapshots
-
✅ Rust data-plane → proxy, health/readiness, RR LB, LeastConn
-
✅ HTTP/2|TLS upstreams, per-route timeouts, retries
-
✅ mTLS between planes
-
✅ Dex auth
-
⌛ GatewayAPI
See CHANGELOG.md for detailed release notes.
TBD (MIT/Apache-2.0 suggested).