Services
Services define how to reach backend servers and handle load balancing.What is a Service?
A service configures how Traefik forwards requests to your backend servers. Each service defines:- Servers: One or more backend server addresses
- Load Balancing: Algorithm to distribute requests
- Health Checks: Monitoring to remove unhealthy servers
- Sticky Sessions: Route clients to the same server
HTTP Services
HTTP services use theloadBalancer configuration to distribute requests across backend servers.
Basic Service Configuration
Service Configuration Options
array
required
List of backend server URLs.
string
Load balancing algorithm:
wrr (default), p2c, or hrw.object
Health check configuration to monitor server availability.
object
Sticky session configuration using cookies.
boolean
Forward the
Host header to backend servers (default: true).Load Balancing Algorithms
Traefik supports three load balancing strategies with different characteristics.Weighted Round Robin (WRR)
Default algorithm using Earliest Deadline First (EDF) scheduling. Implemented inpkg/server/service/loadbalancer/wrr/wrr.go.
- Equal Weights
- Custom Weights
Distribute requests evenly across all servers:Each server receives ~33% of traffic.
WRR uses O(log n) selection time with a heap-based implementation for efficient server selection.
Power of Two Choices (P2C)
Selects two random servers and chooses the one with fewer active requests. Implemented inpkg/server/service/loadbalancer/p2c/p2c.go.
- High-concurrency applications
- Servers with varying response times
- Distributed deployments without central coordination
- Better “herd behavior” than least connections
P2C provides O(1) selection time by randomly sampling two servers instead of checking all servers.
Highest Random Weight (HRW)
Rendezvous hashing that routes clients consistently to the same server based on client IP. Implemented inpkg/server/service/loadbalancer/hrw/hrw.go.
- Cache-heavy applications (consistent routing to same server)
- Session affinity without sticky cookies
- Minimal disruption when adding/removing servers
Health Checks
Health checks automatically remove unhealthy servers from load balancing rotation.Basic Health Check
Health Check Options
string
required
Health check endpoint path (relative URL).
duration
Frequency of health checks for healthy servers (default:
30s).duration
Frequency of health checks for unhealthy servers (default: same as
interval).duration
Maximum duration to wait for health check response (default:
5s).string
Override URL scheme for health checks (
http or https).string
Hostname to use in
Host header for health checks.integer
Override port for health check endpoint.
string
HTTP method for health checks (default:
GET).integer
Expected HTTP status code (default: accept any 2xx or 3xx).
object
Custom headers to send with health check requests.
boolean
Follow redirects during health checks (default:
true).string
Health check mode:
http (default) or grpc.Advanced Health Check Examples
Custom health check endpoint
Custom health check endpoint
Use dedicated health check port and path:
Authenticated health checks
Authenticated health checks
Send authentication headers with health checks:
gRPC health checks
gRPC health checks
Use gRPC health check protocol:Traefik uses gRPC health check v1 protocol and expects
SERVING status.Fast recovery for unhealthy servers
Fast recovery for unhealthy servers
Check unhealthy servers more frequently:
Healthy servers that become unhealthy are automatically removed from rotation. Once they recover (returning 2xx-3xx status), they’re added back automatically.
Sticky Sessions
Sticky sessions route requests from the same client to the same backend server using cookies.Basic Sticky Sessions
Cookie Configuration
string
Cookie name. Default is SHA1 hash abbreviation (e.g.,
_1d52e).boolean
Set
Secure flag (HTTPS only). Default: false.boolean
Set
HttpOnly flag (no JavaScript access). Default: false.string
SameSite attribute: none, lax, strict, or empty. Default: empty.integer
Cookie expiration in seconds. Default:
0 (session cookie). Negative values create expired cookies.string
Cookie domain for subdomain sharing.
Server Options
Individual server configuration options:Server Weight
Preserve Path
Preserve URL path when forwarding to backends:preservePath is ignored when health checks are configured.TCP Services
TCP services forward raw TCP connections to backend servers.TCP services use
address (host:port) instead of url. Load balancing algorithm is always round-robin.UDP Services
UDP services forward UDP packets to backend servers.Weighted Services
Combine multiple services with weighted traffic distribution:Mirroring Services
Mirror traffic to another service for testing:Real-World Examples
Production-ready API service
Production-ready API service
Complete service with health checks and sticky sessions:
Blue-green deployment
Blue-green deployment
Route traffic between two service versions:Gradually shift traffic by adjusting weights: 90/10, 50/50, 0/100.
Microservices with service mesh
Microservices with service mesh
Multiple services with different configurations:
Next Steps
Configure EntryPoints
Set up network entry points for incoming traffic
Create Routers
Define routing rules to connect requests to services