Fabio is a load balancer that automatically routes HTTP(S) and TCP traffic based on service registrations in Consul.
The tool solves the problem of managing load balancing in dynamic service environments by eliminating manual configuration. It watches Consul for service registrations and health checks, then automatically routes incoming traffic to healthy service instances. Services simply register themselves in Consul with a health check, and fabio discovers and routes to them without requiring explicit load balancer configuration changes.
Fabio suits teams already using Consul for service discovery who want zero-configuration load balancing. It works well in containerized and microservices architectures where services are frequently deployed, upgraded, or refactored. The tool is particularly valuable when you need to avoid the operational overhead of updating load balancer rules each time services change. It supports both HTTP(S) and TCP routing, integrates with Vault for certificate management, and provides metrics export to Prometheus, Graphite, and Datadog's dogstatsd backend.
The project maintains active build automation with continuous integration checks. The tool has been updated to support modern Go versions and has evolved its metrics infrastructure, dropping legacy statsd support in favor of more capable backends. Certificate validation behavior was tightened to require proper SAN extensions in upstream HTTPS backends, reflecting security best practices. Garbage collection defaults were adjusted to align with contemporary Go runtime behavior rather than legacy tuning from earlier language versions.