WeightedRoundRobin load balancer
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
This commit is contained in:
parent
84de444325
commit
6fed76a687
44 changed files with 1612 additions and 833 deletions
|
@ -198,11 +198,13 @@ spec:
|
|||
# "Parameter", etc, to support simpler forms of rule matching, but for now we
|
||||
# only support "Rule".
|
||||
kind: Rule
|
||||
# Priority disambiguates rules of the same length, for route matching.
|
||||
# (optional) Priority disambiguates rules of the same length, for route matching.
|
||||
priority: 12
|
||||
services:
|
||||
- name: whoami
|
||||
port: 80
|
||||
# (default 1) A weight used by the weighted round-robin strategy (WRR).
|
||||
weight: 1
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
|
|
|
@ -130,10 +130,10 @@
|
|||
- "traefik.http.services.service0.loadbalancer.healthcheck.timeout=foobar"
|
||||
- "traefik.http.services.service0.loadbalancer.passhostheader=true"
|
||||
- "traefik.http.services.service0.loadbalancer.responseforwarding.flushinterval=foobar"
|
||||
- "traefik.http.services.service0.loadbalancer.stickiness=true"
|
||||
- "traefik.http.services.service0.loadbalancer.stickiness.cookiename=foobar"
|
||||
- "traefik.http.services.service0.loadbalancer.stickiness.httponlycookie=true"
|
||||
- "traefik.http.services.service0.loadbalancer.stickiness.securecookie=true"
|
||||
- "traefik.http.services.service0.loadbalancer.sticky=true"
|
||||
- "traefik.http.services.service0.loadbalancer.sticky.cookie.name=foobar"
|
||||
- "traefik.http.services.service0.loadbalancer.sticky.cookie.httponly=true"
|
||||
- "traefik.http.services.service0.loadbalancer.sticky.cookie.secure=true"
|
||||
- "traefik.http.services.service0.loadbalancer.server.port=foobar"
|
||||
- "traefik.http.services.service0.loadbalancer.server.scheme=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.healthcheck.headers.name0=foobar"
|
||||
|
@ -146,10 +146,10 @@
|
|||
- "traefik.http.services.service1.loadbalancer.healthcheck.timeout=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.passhostheader=true"
|
||||
- "traefik.http.services.service1.loadbalancer.responseforwarding.flushinterval=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.stickiness=true"
|
||||
- "traefik.http.services.service1.loadbalancer.stickiness.cookiename=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.stickiness.httponlycookie=true"
|
||||
- "traefik.http.services.service1.loadbalancer.stickiness.securecookie=true"
|
||||
- "traefik.http.services.service1.loadbalancer.sticky=true"
|
||||
- "traefik.http.services.service1.loadbalancer.sticky.cookie.name=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.sticky.cookie.httponly=true"
|
||||
- "traefik.http.services.service1.loadbalancer.sticky.cookie.secure=true"
|
||||
- "traefik.http.services.service1.loadbalancer.server.port=foobar"
|
||||
- "traefik.http.services.service1.loadbalancer.server.scheme=foobar"
|
||||
- "traefik.tcp.routers.tcprouter0.entrypoints=foobar, foobar"
|
||||
|
|
|
@ -35,56 +35,47 @@
|
|||
main = "foobar"
|
||||
sans = ["foobar", "foobar"]
|
||||
[http.services]
|
||||
[http.services.Service0]
|
||||
[http.services.Service0.loadBalancer]
|
||||
[http.services.Service01]
|
||||
[http.services.Service01.loadBalancer]
|
||||
passHostHeader = true
|
||||
[http.services.Service0.loadBalancer.stickiness]
|
||||
cookieName = "foobar"
|
||||
secureCookie = true
|
||||
httpOnlyCookie = true
|
||||
[http.services.Service01.loadBalancer.sticky]
|
||||
[http.services.Service01.loadBalancer.sticky.cookie]
|
||||
name = "foobar"
|
||||
secure = true
|
||||
httpOnly = true
|
||||
|
||||
[[http.services.Service0.loadBalancer.servers]]
|
||||
[[http.services.Service01.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
|
||||
[[http.services.Service0.loadBalancer.servers]]
|
||||
[[http.services.Service01.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
[http.services.Service0.loadBalancer.healthCheck]
|
||||
[http.services.Service01.loadBalancer.healthCheck]
|
||||
scheme = "foobar"
|
||||
path = "foobar"
|
||||
port = 42
|
||||
interval = "foobar"
|
||||
timeout = "foobar"
|
||||
hostname = "foobar"
|
||||
[http.services.Service0.loadBalancer.healthCheck.headers]
|
||||
[http.services.Service01.loadBalancer.healthCheck.headers]
|
||||
name0 = "foobar"
|
||||
name1 = "foobar"
|
||||
[http.services.Service0.loadBalancer.responseForwarding]
|
||||
[http.services.Service01.loadBalancer.responseForwarding]
|
||||
flushInterval = "foobar"
|
||||
[http.services.Service1]
|
||||
[http.services.Service1.loadBalancer]
|
||||
passHostHeader = true
|
||||
[http.services.Service1.loadBalancer.stickiness]
|
||||
cookieName = "foobar"
|
||||
secureCookie = true
|
||||
httpOnlyCookie = true
|
||||
[http.services.Service02]
|
||||
[http.services.Service02.weighted]
|
||||
|
||||
[[http.services.Service1.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
[[http.services.Service02.weighted.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
|
||||
[[http.services.Service1.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
[http.services.Service1.loadBalancer.healthCheck]
|
||||
scheme = "foobar"
|
||||
path = "foobar"
|
||||
port = 42
|
||||
interval = "foobar"
|
||||
timeout = "foobar"
|
||||
hostname = "foobar"
|
||||
[http.services.Service1.loadBalancer.healthCheck.headers]
|
||||
name0 = "foobar"
|
||||
name1 = "foobar"
|
||||
[http.services.Service1.loadBalancer.responseForwarding]
|
||||
flushInterval = "foobar"
|
||||
[[http.services.Service02.weighted.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
[http.services.Service02.weighted.sticky]
|
||||
[http.services.Service02.weighted.sticky.cookie]
|
||||
name = "foobar"
|
||||
secure = true
|
||||
httpOnly = true
|
||||
[http.middlewares]
|
||||
[http.middlewares.Middleware00]
|
||||
[http.middlewares.Middleware00.addPrefix]
|
||||
|
|
|
@ -45,34 +45,13 @@ http:
|
|||
- foobar
|
||||
- foobar
|
||||
services:
|
||||
Service0:
|
||||
Service01:
|
||||
loadBalancer:
|
||||
stickiness:
|
||||
cookieName: foobar
|
||||
secureCookie: true
|
||||
httpOnlyCookie: true
|
||||
servers:
|
||||
- url: foobar
|
||||
- url: foobar
|
||||
healthCheck:
|
||||
scheme: foobar
|
||||
path: foobar
|
||||
port: 42
|
||||
interval: foobar
|
||||
timeout: foobar
|
||||
hostname: foobar
|
||||
headers:
|
||||
name0: foobar
|
||||
name1: foobar
|
||||
passHostHeader: true
|
||||
responseForwarding:
|
||||
flushInterval: foobar
|
||||
Service1:
|
||||
loadBalancer:
|
||||
stickiness:
|
||||
cookieName: foobar
|
||||
secureCookie: true
|
||||
httpOnlyCookie: true
|
||||
sticky:
|
||||
cookie:
|
||||
name: foobar
|
||||
secure: true
|
||||
httpOnly: true
|
||||
servers:
|
||||
- url: foobar
|
||||
- url: foobar
|
||||
|
@ -89,6 +68,18 @@ http:
|
|||
passHostHeader: true
|
||||
responseForwarding:
|
||||
flushInterval: foobar
|
||||
Service02:
|
||||
weighted:
|
||||
services:
|
||||
- name: foobar
|
||||
weight: 42
|
||||
- name: foobar
|
||||
weight: 42
|
||||
sticky:
|
||||
cookie:
|
||||
name: foobar
|
||||
secure: true
|
||||
httpOnly: true
|
||||
middlewares:
|
||||
Middleware00:
|
||||
addPrefix:
|
||||
|
|
|
@ -130,10 +130,10 @@
|
|||
"traefik.http.services.service0.loadbalancer.healthcheck.timeout": "foobar",
|
||||
"traefik.http.services.service0.loadbalancer.passhostheader": "true",
|
||||
"traefik.http.services.service0.loadbalancer.responseforwarding.flushinterval": "foobar",
|
||||
"traefik.http.services.service0.loadbalancer.stickiness": "true",
|
||||
"traefik.http.services.service0.loadbalancer.stickiness.cookiename": "foobar",
|
||||
"traefik.http.services.service0.loadbalancer.stickiness.httponlycookie": "true",
|
||||
"traefik.http.services.service0.loadbalancer.stickiness.securecookie": "true",
|
||||
"traefik.http.services.service0.loadbalancer.sticky": "true",
|
||||
"traefik.http.services.service0.loadbalancer.sticky.cookie.name": "foobar",
|
||||
"traefik.http.services.service0.loadbalancer.sticky.cookie.httponly": "true",
|
||||
"traefik.http.services.service0.loadbalancer.sticky.cookie.secure": "true",
|
||||
"traefik.http.services.service0.loadbalancer.server.port": "foobar",
|
||||
"traefik.http.services.service0.loadbalancer.server.scheme": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.healthcheck.headers.name0": "foobar",
|
||||
|
@ -146,10 +146,10 @@
|
|||
"traefik.http.services.service1.loadbalancer.healthcheck.timeout": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.passhostheader": "true",
|
||||
"traefik.http.services.service1.loadbalancer.responseforwarding.flushinterval": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.stickiness": "true",
|
||||
"traefik.http.services.service1.loadbalancer.stickiness.cookiename": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.stickiness.httponlycookie": "true",
|
||||
"traefik.http.services.service1.loadbalancer.stickiness.securecookie": "true",
|
||||
"traefik.http.services.service1.loadbalancer.sticky": "true",
|
||||
"traefik.http.services.service1.loadbalancer.sticky.cookie.name": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.sticky.cookie.secure": "true",
|
||||
"traefik.http.services.service1.loadbalancer.sticky.cookie.httponly": "true",
|
||||
"traefik.http.services.service1.loadbalancer.server.port": "foobar",
|
||||
"traefik.http.services.service1.loadbalancer.server.scheme": "foobar",
|
||||
"traefik.tcp.routers.tcprouter0.entrypoints": "foobar, foobar",
|
||||
|
|
|
@ -54,13 +54,7 @@ The `Services` are responsible for configuring how to reach the actual services
|
|||
|
||||
## Configuring HTTP Services
|
||||
|
||||
### General
|
||||
|
||||
Currently, `LoadBalancer` is the only supported kind of HTTP `Service` (see below).
|
||||
However, since Traefik is an ever evolving project, other kind of HTTP Services will be available in the future,
|
||||
reason why you have to specify it.
|
||||
|
||||
### Load Balancer
|
||||
### Servers Load Balancer
|
||||
|
||||
The load balancers are able to load balance the requests between multiple instances of your programs.
|
||||
|
||||
|
@ -161,7 +155,7 @@ On subsequent requests, the client is forwarded to the same server.
|
|||
```toml tab="TOML"
|
||||
[http.services]
|
||||
[http.services.my-service]
|
||||
[http.services.my-service.loadBalancer.stickiness]
|
||||
[http.services.my-service.loadBalancer.sticky.cookie]
|
||||
```
|
||||
|
||||
```yaml tab="YAML"
|
||||
|
@ -169,18 +163,19 @@ On subsequent requests, the client is forwarded to the same server.
|
|||
services:
|
||||
my-service:
|
||||
loadBalancer:
|
||||
stickiness: {}
|
||||
sticky:
|
||||
cookie: {}
|
||||
```
|
||||
|
||||
??? example "Adding Stickiness with a Custom Cookie Name"
|
||||
??? example "Adding Stickiness with custom Options"
|
||||
|
||||
```toml tab="TOML"
|
||||
[http.services]
|
||||
[http.services.my-service]
|
||||
[http.services.my-service.loadBalancer.stickiness]
|
||||
cookieName = "my_stickiness_cookie_name"
|
||||
secureCookie = true
|
||||
httpOnlyCookie = true
|
||||
[http.services.my-service.loadBalancer.sticky.cookie]
|
||||
name = "my_sticky_cookie_name"
|
||||
secure = true
|
||||
httpOnly = true
|
||||
```
|
||||
|
||||
```yaml tab="YAML"
|
||||
|
@ -188,10 +183,11 @@ On subsequent requests, the client is forwarded to the same server.
|
|||
services:
|
||||
my-service:
|
||||
loadBalancer:
|
||||
stickiness:
|
||||
cookieName: my_stickiness_cookie_name
|
||||
secureCookie: true
|
||||
httpOnlyCookie: true
|
||||
sticky:
|
||||
cookie:
|
||||
name: my_sticky_cookie_name
|
||||
secure: true
|
||||
httpOnly: true
|
||||
```
|
||||
|
||||
#### Health Check
|
||||
|
@ -306,6 +302,57 @@ Below are the available options for the health check mechanism:
|
|||
My-Header: bar
|
||||
```
|
||||
|
||||
### Weighted Round Robin (service)
|
||||
|
||||
The WRR is able to load balance the requests between multiple services based on weights.
|
||||
|
||||
This strategy is only available to load balance between [services](./index.md) and not between [servers](./index.md#servers).
|
||||
|
||||
This strategy can be defined only with [File](../../providers/file.md).
|
||||
|
||||
```toml tab="TOML"
|
||||
[http.services]
|
||||
[http.services.canary]
|
||||
[[http.services.canary.weighted.services]]
|
||||
name = "appv1"
|
||||
weight = 3
|
||||
[[http.services.canary.weighted.services]]
|
||||
name = "appv2"
|
||||
weight = 1
|
||||
|
||||
[http.services.appv1]
|
||||
[http.services.appv1.loadBalancer]
|
||||
[[http.services.appv1.loadBalancer.servers]]
|
||||
url = "http://private-ip-server-1/"
|
||||
|
||||
[http.services.appv2]
|
||||
[http.services.appv2.loadBalancer]
|
||||
[[http.services.appv2.loadBalancer.servers]]
|
||||
url = "http://private-ip-server-2/"
|
||||
```
|
||||
|
||||
```yaml tab="YAML"
|
||||
http:
|
||||
services:
|
||||
canary:
|
||||
weighted:
|
||||
services:
|
||||
- name: appv1
|
||||
weight: 3
|
||||
- name: appv2
|
||||
weight: 1
|
||||
|
||||
appv1:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://private-ip-server-1/"
|
||||
|
||||
appv2:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://private-ip-server-2/"
|
||||
```
|
||||
|
||||
## Configuring TCP Services
|
||||
|
||||
### General
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue