Install the controller
helm install svc-mux oci://ghcr.io/nowakeai/charts/svc-lb-mux \
--version 0.1.2 \
--namespace svc-mux \
--create-namespace Active / controller
Service LoadBalancer Multiplexer
Expose many L4 Services without paying for one cloud load balancer each.
svc-lb-mux is for platform and operations teams that need to expose many TCP/UDP services, but do not want every
application-facing LoadBalancer Service to create another provider L4 load balancer, IP, forwarding rule,
and recurring cost line.
Quickstart
Start with the default Helm install and a small echo Service. Provider-specific production values can come after the controller, mux Service, and first channel are visible.
helm install svc-mux oci://ghcr.io/nowakeai/charts/svc-lb-mux \
--version 0.1.2 \
--namespace svc-mux \
--create-namespace kubectl get deploy -n svc-mux
kubectl get svc mux -n svc-mux -w kubectl apply -f echo-channel.yaml
kubectl get svc echo -n default
kubectl get endpoints mux -n svc-mux Use it when
This is a narrow tool by design. It is useful when the workload really needs provider Layer 4 exposure and the cluster has many small services, many public ports, or a provider quota/cost ceiling that appears before the application does.
A cluster exposes many small services, each needing a stable external L4 endpoint. Paying for one cloud load balancer per Service becomes wasteful.
Forwarding rules, IP addresses, load balancers, or provider-specific port limits become the bottleneck before the workload itself does.
Application teams still create normal LoadBalancer Services. The mux handles shared provider exposure behind that Kubernetes-native API.
How it works
A mux Service is the single provider-facing LoadBalancer. Channel Services remain normal Kubernetes Services,
but their spec.loadBalancerClass points at the mux instead of asking the cloud provider for another LB.
Provider reality
svc-lb-mux deliberately stays inside provider-managed Service LoadBalancer behavior. That keeps the normal path Kubernetes-native, but provider limits still define the safe operating envelope.
Defaults target external passthrough Network Load Balancers. One mux is capped at 100 Service ports to stay inside GKE-native behavior.
AWS NLB setup is documented. Provider-specific validation should still be repeated in the target environment.
The core model is Kubernetes-native, but cloud load balancer behavior, limits, and port handling vary by provider.
Docs map
svc-lb-mux has a smaller scope than kube-insight, so the docs stay practical: install, understand channel mapping, copy examples, tune provider behavior, and debug controller-owned runtime state.
Install the chart, create a mux Service, expose a first channel, and validate status and endpoints.
Concept Mux And Channel ServicesUnderstand public ports, target ports, automatic allocation, state ConfigMaps, and external-dns aggregation.
Examples TutorialsCopyable examples for HTTP, TCP, migration, external-dns aggregation, capacity splitting, and GitOps.
Providers GKE And AWS NLBProvider-specific setup notes, static IP configuration, firewall behavior, and capacity boundaries.
Operate GitOps And TroubleshootingSeparate desired config from runtime fields and diagnose missing mux ports, pending ingress, backend readiness, and drift.
Internals Controller DesignRead the ownership model, generated endpoints, mux annotations, events, and current controller limits.
Current focus
The controller is intentionally small. Follow-up work is focused on larger backend state, repeatable provider validation, GitOps hardening, and better operator diagnostics.