mirror of
https://github.com/traefik/traefik.git
synced 2025-05-05 15:33:01 +00:00
Add unhealthy Interval to the health check configuration
This commit is contained in:
parent
6c3b099c25
commit
d7d0017545
@ -209,6 +209,7 @@
|
|||||||
- "traefik.http.services.service02.loadbalancer.healthcheck.scheme=foobar"
|
- "traefik.http.services.service02.loadbalancer.healthcheck.scheme=foobar"
|
||||||
- "traefik.http.services.service02.loadbalancer.healthcheck.status=42"
|
- "traefik.http.services.service02.loadbalancer.healthcheck.status=42"
|
||||||
- "traefik.http.services.service02.loadbalancer.healthcheck.timeout=42s"
|
- "traefik.http.services.service02.loadbalancer.healthcheck.timeout=42s"
|
||||||
|
- "traefik.http.services.service02.loadbalancer.healthcheck.unhealthyinterval=42s"
|
||||||
- "traefik.http.services.service02.loadbalancer.passhostheader=true"
|
- "traefik.http.services.service02.loadbalancer.passhostheader=true"
|
||||||
- "traefik.http.services.service02.loadbalancer.responseforwarding.flushinterval=42s"
|
- "traefik.http.services.service02.loadbalancer.responseforwarding.flushinterval=42s"
|
||||||
- "traefik.http.services.service02.loadbalancer.serverstransport=foobar"
|
- "traefik.http.services.service02.loadbalancer.serverstransport=foobar"
|
||||||
|
@ -84,6 +84,7 @@
|
|||||||
status = 42
|
status = 42
|
||||||
port = 42
|
port = 42
|
||||||
interval = "42s"
|
interval = "42s"
|
||||||
|
unhealthyInterval = "42s"
|
||||||
timeout = "42s"
|
timeout = "42s"
|
||||||
hostname = "foobar"
|
hostname = "foobar"
|
||||||
followRedirects = true
|
followRedirects = true
|
||||||
|
@ -89,6 +89,7 @@ http:
|
|||||||
status: 42
|
status: 42
|
||||||
port: 42
|
port: 42
|
||||||
interval: 42s
|
interval: 42s
|
||||||
|
unhealthyInterval: 42s
|
||||||
timeout: 42s
|
timeout: 42s
|
||||||
hostname: foobar
|
hostname: foobar
|
||||||
followRedirects: true
|
followRedirects: true
|
||||||
|
@ -136,7 +136,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -172,6 +172,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -1070,7 +1079,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -1106,6 +1115,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -2743,7 +2761,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -2779,6 +2797,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -2828,7 +2855,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -2864,6 +2891,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -3167,7 +3203,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -3203,6 +3239,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
|
@ -281,6 +281,7 @@ THIS FILE MUST NOT BE EDITED BY HAND
|
|||||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/scheme` | `foobar` |
|
| `traefik/http/services/Service02/loadBalancer/healthCheck/scheme` | `foobar` |
|
||||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/status` | `42` |
|
| `traefik/http/services/Service02/loadBalancer/healthCheck/status` | `42` |
|
||||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/timeout` | `42s` |
|
| `traefik/http/services/Service02/loadBalancer/healthCheck/timeout` | `42s` |
|
||||||
|
| `traefik/http/services/Service02/loadBalancer/healthCheck/unhealthyInterval` | `42s` |
|
||||||
| `traefik/http/services/Service02/loadBalancer/passHostHeader` | `true` |
|
| `traefik/http/services/Service02/loadBalancer/passHostHeader` | `true` |
|
||||||
| `traefik/http/services/Service02/loadBalancer/responseForwarding/flushInterval` | `42s` |
|
| `traefik/http/services/Service02/loadBalancer/responseForwarding/flushInterval` | `42s` |
|
||||||
| `traefik/http/services/Service02/loadBalancer/servers/0/preservePath` | `true` |
|
| `traefik/http/services/Service02/loadBalancer/servers/0/preservePath` | `true` |
|
||||||
|
@ -136,7 +136,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -172,6 +172,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
|
@ -301,7 +301,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -337,6 +337,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
|
@ -71,7 +71,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -107,6 +107,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -156,7 +165,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -192,6 +201,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -495,7 +513,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -531,6 +549,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "Traefik HTTP Services Documentation"
|
title: "Traefik HTTP Services Documentation"
|
||||||
description: "A service is in charge of connecting incoming requests to the Servers that can handle them. Read the technical documentation."
|
description: "A service is in charge of connecting incoming requests to the Servers that can handle them. Read the technical documentation."
|
||||||
---
|
---
|
||||||
|
|
||||||
## Service Load Balancer
|
## Service Load Balancer
|
||||||
|
|
||||||
@ -70,7 +70,6 @@ labels:
|
|||||||
|
|
||||||
```json tab="Tags"
|
```json tab="Tags"
|
||||||
{
|
{
|
||||||
// ...
|
|
||||||
"Tags": [
|
"Tags": [
|
||||||
"traefik.http.services.my-service.loadBalancer.servers[0].url=http://private-ip-server-1/",
|
"traefik.http.services.my-service.loadBalancer.servers[0].url=http://private-ip-server-1/",
|
||||||
"traefik.http.services.my-service.loadBalancer.servers[0].weight=2",
|
"traefik.http.services.my-service.loadBalancer.servers[0].weight=2",
|
||||||
@ -88,15 +87,15 @@ labels:
|
|||||||
|
|
||||||
### Configuration Options
|
### Configuration Options
|
||||||
|
|
||||||
| Field | Description | Required |
|
| Field | Description | Required |
|
||||||
|----------|------------------------------------------|----------|
|
|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|
|
||||||
|`servers`| Represents individual backend instances for your service | Yes |
|
| `servers` | Represents individual backend instances for your service | Yes |
|
||||||
|`sticky`| Defines a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response. | No |
|
| `sticky` | Defines a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response. | No |
|
||||||
|`healthcheck`| Configures health check to remove unhealthy servers from the load balancing rotation. | No |
|
| `healthcheck` | Configures health check to remove unhealthy servers from the load balancing rotation. | No |
|
||||||
|`passHostHeader`| Allows forwarding of the client Host header to server. By default, `passHostHeader` is true. | No |
|
| `passHostHeader` | Allows forwarding of the client Host header to server. By default, `passHostHeader` is true. | No |
|
||||||
|`serversTransport`| Allows to reference an [HTTP ServersTransport](./serverstransport.md) configuration for the communication between Traefik and your servers. If no `serversTransport` is specified, the `default@internal` will be used. | No |
|
| `serversTransport` | Allows to reference an [HTTP ServersTransport](./serverstransport.md) configuration for the communication between Traefik and your servers. If no `serversTransport` is specified, the `default@internal` will be used. | No |
|
||||||
| `responseForwarding` | Configures how Traefik forwards the response from the backend server to the client.| No |
|
| `responseForwarding` | Configures how Traefik forwards the response from the backend server to the client. | No |
|
||||||
| `responseForwarding.FlushInterval` | Specifies the interval in between flushes to the client while copying the response body. It is a duration in milliseconds, defaulting to 100ms. A negative value means to flush immediately after each write to the client. The `FlushInterval` is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately. | No |
|
| `responseForwarding.FlushInterval` | Specifies the interval in between flushes to the client while copying the response body. It is a duration in milliseconds, defaulting to 100ms. A negative value means to flush immediately after each write to the client. The `FlushInterval` is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately. | No |
|
||||||
|
|
||||||
#### Servers
|
#### Servers
|
||||||
|
|
||||||
@ -104,11 +103,11 @@ Servers represent individual backend instances for your service. The [service lo
|
|||||||
|
|
||||||
##### Configuration Options
|
##### Configuration Options
|
||||||
|
|
||||||
| Field | Description | Required |
|
| Field | Description | Required |
|
||||||
|----------|------------------------------------------|----------|
|
|----------------|----------------------------------------------------|----------------------------------------------------------------------------------|
|
||||||
|`url`| Points to a specific instance. | Yes for File provider, No for [Docker provider](../../other-providers/docker.md) |
|
| `url` | Points to a specific instance. | Yes for File provider, No for [Docker provider](../../other-providers/docker.md) |
|
||||||
|`weight`| Allows for weighted load balancing on the servers. | No |
|
| `weight` | Allows for weighted load balancing on the servers. | No |
|
||||||
|`preservePath`| Allows to preserve the URL path. | No |
|
| `preservePath` | Allows to preserve the URL path. | No |
|
||||||
|
|
||||||
#### Health Check
|
#### Health Check
|
||||||
|
|
||||||
@ -118,20 +117,21 @@ To propagate status changes (e.g. all servers of this service are down) upwards,
|
|||||||
|
|
||||||
Below are the available options for the health check mechanism:
|
Below are the available options for the health check mechanism:
|
||||||
|
|
||||||
| Field | Description | Default | Required |
|
| Field | Description | Default | Required |
|
||||||
|----------|------------------------------------------|----------|--------|
|
|---------------------|-------------------------------------------------------------------------------------------------------------------------------|---------|----------|
|
||||||
|`path`| Defines the server URL path for the health check endpoint. | "" | Yes |
|
| `path` | Defines the server URL path for the health check endpoint. | "" | Yes |
|
||||||
|`scheme`| Replaces the server URL scheme for the health check endpoint. | | No |
|
| `scheme` | Replaces the server URL scheme for the health check endpoint. | | No |
|
||||||
|`mode`| If defined to `grpc`, will use the gRPC health check protocol to probe the server. | http | No |
|
| `mode` | If defined to `grpc`, will use the gRPC health check protocol to probe the server. | http | No |
|
||||||
|`hostname`| Defines the value of hostname in the Host header of the health check request. | "" | No |
|
| `hostname` | Defines the value of hostname in the Host header of the health check request. | "" | No |
|
||||||
|`port`| Replaces the server URL port for the health check endpoint. | | No |
|
| `port` | Replaces the server URL port for the health check endpoint. | | No |
|
||||||
|`interval`| Defines the frequency of the health check calls. | 30s | No |
|
| `interval` | Defines the frequency of the health check calls for healthy targets. | 30s | No |
|
||||||
|`timeout`| Defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy. | 5s | No |
|
| `unhealthyInterval` | Defines the frequency of the health check calls for unhealthy targets. When not defined, it defaults to the `interval` value. | 30s | No |
|
||||||
|`headers`| Defines custom headers to be sent to the health check endpoint. | | No |
|
| `timeout` | Defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy. | 5s | No |
|
||||||
|`followRedirects`| Defines whether redirects should be followed during the health check calls. | true | No |
|
| `headers` | Defines custom headers to be sent to the health check endpoint. | | No |
|
||||||
|`hostname`| Defines the value of hostname in the Host header of the health check request. | "" | No |
|
| `followRedirects` | Defines whether redirects should be followed during the health check calls. | true | No |
|
||||||
|`method`| Defines the HTTP method that will be used while connecting to the endpoint. | GET | No |
|
| `hostname` | Defines the value of hostname in the Host header of the health check request. | "" | No |
|
||||||
|`status`| Defines the expected HTTP status code of the response to the health check request. | | No |
|
| `method` | Defines the HTTP method that will be used while connecting to the endpoint. | GET | No |
|
||||||
|
| `status` | Defines the expected HTTP status code of the response to the health check request. | | No |
|
||||||
|
|
||||||
## Weighted Round Robin (WRR)
|
## Weighted Round Robin (WRR)
|
||||||
|
|
||||||
|
@ -74,56 +74,57 @@ spec:
|
|||||||
|
|
||||||
## Configuration Options
|
## Configuration Options
|
||||||
|
|
||||||
| Field | Description | Default | Required |
|
| Field | Description | Default | Required |
|
||||||
|:------|:----------------------------------------------------------|:---------------------|:---------|
|
|:---------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|:---------|
|
||||||
| `entryPoints` | List of [entry points](../../../../install-configuration/entrypoints.md) names.<br />If not specified, HTTP routers will accept requests from all EntryPoints in the list of default EntryPoints. | | No |
|
| `entryPoints` | List of [entry points](../../../../install-configuration/entrypoints.md) names.<br />If not specified, HTTP routers will accept requests from all EntryPoints in the list of default EntryPoints. | | No |
|
||||||
| `routes` | List of routes. | | Yes |
|
| `routes` | List of routes. | | Yes |
|
||||||
| `routes[n].kind` | Kind of router matching, only `Rule` is allowed yet. | "Rule" | No |
|
| `routes[n].kind` | Kind of router matching, only `Rule` is allowed yet. | "Rule" | No |
|
||||||
| `routes[n].match` | Defines the [rule](../../../http/router/rules-and-priority.md#rules) corresponding to an underlying router. | | Yes |
|
| `routes[n].match` | Defines the [rule](../../../http/router/rules-and-priority.md#rules) corresponding to an underlying router. | | Yes |
|
||||||
| `routes[n].priority` | Defines the [priority](../../../http/router/rules-and-priority.md#priority-calculation) to disambiguate rules of the same length, for route matching.<br />If not set, the priority is directly equal to the length of the rule, and so the longest length has the highest priority.<br />A value of `0` for the priority is ignored, the default rules length sorting is used. | 0 | No |
|
| `routes[n].priority` | Defines the [priority](../../../http/router/rules-and-priority.md#priority-calculation) to disambiguate rules of the same length, for route matching.<br />If not set, the priority is directly equal to the length of the rule, and so the longest length has the highest priority.<br />A value of `0` for the priority is ignored, the default rules length sorting is used. | 0 | No |
|
||||||
| `routes[n].middlewares` | List of middlewares to attach to the IngressRoute. <br />More information [here](#middleware). | "" | No |
|
| `routes[n].middlewares` | List of middlewares to attach to the IngressRoute. <br />More information [here](#middleware). | "" | No |
|
||||||
| `routes[n].`<br />`middlewares[m].`<br />`name` | Middleware name.<br />The character `@` is not authorized. <br />More information [here](#middleware). | | Yes |
|
| `routes[n].`<br />`middlewares[m].`<br />`name` | Middleware name.<br />The character `@` is not authorized. <br />More information [here](#middleware). | | Yes |
|
||||||
| `routes[n].`<br />`middlewares[m].`<br />`namespace` | Middleware namespace.<br />Can be empty if the middleware belongs to the same namespace as the IngressRoute. <br />More information [here](#middleware). | | No |
|
| `routes[n].`<br />`middlewares[m].`<br />`namespace` | Middleware namespace.<br />Can be empty if the middleware belongs to the same namespace as the IngressRoute. <br />More information [here](#middleware). | | No |
|
||||||
| `routes[n].`<br />`observability.`<br />`accesslogs` | Defines whether the route will produce [access-logs](../../../../install-configuration/observability/logs-and-accesslogs.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
| `routes[n].`<br />`observability.`<br />`accesslogs` | Defines whether the route will produce [access-logs](../../../../install-configuration/observability/logs-and-accesslogs.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
||||||
| `routes[n].`<br />`observability.`<br />`metrics` | Defines whether the route will produce [metrics](../../../../install-configuration/observability/metrics.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
| `routes[n].`<br />`observability.`<br />`metrics` | Defines whether the route will produce [metrics](../../../../install-configuration/observability/metrics.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
||||||
| `routes[n].`<br />`observability.`<br />`tracing` | Defines whether the route will produce [traces](../../../../install-configuration/observability/tracing.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
| `routes[n].`<br />`observability.`<br />`tracing` | Defines whether the route will produce [traces](../../../../install-configuration/observability/tracing.md). See [here](../../../http/router/observability.md) for more information. | false | No |
|
||||||
| `routes[n].`<br />`services` | List of any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />More information [here](#externalname-service). | | No |
|
| `routes[n].`<br />`services` | List of any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />More information [here](#externalname-service). | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`kind` | Kind of the service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br /> **TraefikService**: Traefik Service.<br />More information [here](#externalname-service). | "Service" | No |
|
| `routes[n].`<br />`services[m].`<br />`kind` | Kind of the service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br /> **TraefikService**: Traefik Service.<br />More information [here](#externalname-service). | "Service" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`name` | Service name.<br />The character `@` is not authorized. <br />More information [here](#middleware). | | Yes |
|
| `routes[n].`<br />`services[m].`<br />`name` | Service name.<br />The character `@` is not authorized. <br />More information [here](#middleware). | | Yes |
|
||||||
| `routes[n].`<br />`services[m].`<br />`namespace` | Service namespace.<br />Can be empty if the service belongs to the same namespace as the IngressRoute. <br />More information [here](#externalname-service). | | No |
|
| `routes[n].`<br />`services[m].`<br />`namespace` | Service namespace.<br />Can be empty if the service belongs to the same namespace as the IngressRoute. <br />More information [here](#externalname-service). | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`port` | Service port (number or port name).<br />Evaluated only if the kind is **Service**. | | No |
|
| `routes[n].`<br />`services[m].`<br />`port` | Service port (number or port name).<br />Evaluated only if the kind is **Service**. | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind is **Service**. | 100ms | No |
|
| `routes[n].`<br />`services[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind is **Service**. | 100ms | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
| `routes[n].`<br />`services[m].`<br />`scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and your servers.<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and your servers.<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`passHostHeader` | Forward client Host header to server.<br />Evaluated only if the kind is **Service**. | true | No |
|
| `routes[n].`<br />`services[m].`<br />`passHostHeader` | Forward client Host header to server.<br />Evaluated only if the kind is **Service**. | true | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "http" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "http" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.interval` | Frequency of the health check calls.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "100ms" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.interval` | Frequency of the health check calls for healthy targets.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "100ms" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "GET" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.unhealthyInterval` | Frequency of the health check calls for unhealthy targets.<br />When not defined, it defaults to the `interval` value.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "100ms" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind is **Service**. | | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "GET" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind is **Service**. | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "5s" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "5s" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | true | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service)). | | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service). | true | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#externalname-service)). | | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind is **Service**. | false | No |
|
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind is **Service**. | false | No |
|
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind is **Service**. | 0 | No |
|
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind is **Service**. | "RoundRobin" | No |
|
| `routes[n].`<br />`services[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind is **Service**. | 0 | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
| `routes[n].`<br />`services[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind is **Service**. | "RoundRobin" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br /> Evaluated only if the kind is **Service**. | false | No |
|
| `routes[n].`<br />`services[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
||||||
| `routes[n].`<br />`services[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind is **Service**. | false | No |
|
| `routes[n].`<br />`services[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br /> Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `tls` | TLS configuration.<br />Can be an empty value(`{}`):<br />A self signed is generated in such a case<br />(or the [default certificate](tlsstore.md) is used if it is defined.) | | No |
|
| `routes[n].`<br />`services[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `tls.secretName` | [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the same namesapce as the `IngressRoute`) | "" | No |
|
| `tls` | TLS configuration.<br />Can be an empty value(`{}`):<br />A self signed is generated in such a case<br />(or the [default certificate](tlsstore.md) is used if it is defined.) | | No |
|
||||||
| `tls.`<br />`options.name` | Name of the [`TLSOption`](tlsoption.md) to use.<br />More information [here](#tls-options). | "" | No |
|
| `tls.secretName` | [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the same namesapce as the `IngressRoute`) | "" | No |
|
||||||
| `tls.`<br />`options.namespace` | Namespace of the [`TLSOption`](tlsoption.md) to use. | "" | No |
|
| `tls.`<br />`options.name` | Name of the [`TLSOption`](tlsoption.md) to use.<br />More information [here](#tls-options). | "" | No |
|
||||||
| `tls.certResolver` | Name of the [Certificate Resolver](../../../../install-configuration/tls/certificate-resolvers/overview.md) to use to generate automatic TLS certificates. | "" | No |
|
| `tls.`<br />`options.namespace` | Namespace of the [`TLSOption`](tlsoption.md) to use. | "" | No |
|
||||||
| `tls.domains` | List of domains to serve using the certificates generates (one `tls.domain`= one certificate).<br />More information in the [dedicated section](../../../../install-configuration/tls/certificate-resolvers/acme.md#domain-definition). | | No |
|
| `tls.certResolver` | Name of the [Certificate Resolver](../../../../install-configuration/tls/certificate-resolvers/overview.md) to use to generate automatic TLS certificates. | "" | No |
|
||||||
| `tls.`<br />`domains[n].main` | Main domain name | "" | Yes |
|
| `tls.domains` | List of domains to serve using the certificates generates (one `tls.domain`= one certificate).<br />More information in the [dedicated section](../../../../install-configuration/tls/certificate-resolvers/acme.md#domain-definition). | | No |
|
||||||
| `tls.`<br />`domains[n].sans` | List of alternative domains (SANs) | | No |
|
| `tls.`<br />`domains[n].main` | Main domain name | "" | Yes |
|
||||||
|
| `tls.`<br />`domains[n].sans` | List of alternative domains (SANs) | | No |
|
||||||
|
|
||||||
### ExternalName Service
|
### ExternalName Service
|
||||||
|
|
||||||
|
@ -148,42 +148,43 @@ data:
|
|||||||
|
|
||||||
### Configuration Options
|
### Configuration Options
|
||||||
|
|
||||||
| Field | Description | Default | Required |
|
| Field | Description | Default | Required |
|
||||||
|:------|:----------------------------------------------------------|:---------------------|:---------|
|
|:---------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|:---------|
|
||||||
| `services` | List of any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />. | | No |
|
| `services` | List of any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />. | | No |
|
||||||
| `services[m].`<br />`kind` | Kind of the service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br /> - **TraefikService**: Traefik Service. | "" | No |
|
| `services[m].`<br />`kind` | Kind of the service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br /> - **TraefikService**: Traefik Service. | "" | No |
|
||||||
| `services[m].`<br />`name` | Service name.<br />The character `@` is not authorized. | "" | Yes |
|
| `services[m].`<br />`name` | Service name.<br />The character `@` is not authorized. | "" | Yes |
|
||||||
| `services[m].`<br />`namespace` | Service namespace. | "" | No |
|
| `services[m].`<br />`namespace` | Service namespace. | "" | No |
|
||||||
| `services[m].`<br />`port` | Service port (number or port name).<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `services[m].`<br />`port` | Service port (number or port name).<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `services[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind is **Service**. | 100ms | No |
|
| `services[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind is **Service**. | 100ms | No |
|
||||||
| `services[m].`<br />`scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
| `services[m].`<br />`scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
||||||
| `services[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and your servers.<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `services[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and your servers.<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `services[m].`<br />`passHostHeader` | Forward client Host header to server.<br />Evaluated only if the kind is **Service**. | true | No |
|
| `services[m].`<br />`passHostHeader` | Forward client Host header to server.<br />Evaluated only if the kind is **Service**. | true | No |
|
||||||
| `services[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
| `services[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
||||||
| `services[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "http" | No |
|
| `services[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "http" | No |
|
||||||
| `services[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
| `services[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
||||||
| `services[m].`<br />`healthCheck.interval` | Frequency of the health check calls.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName]`ExternalName`. | "100ms" | No |
|
| `services[m].`<br />`healthCheck.interval` | Frequency of the health check calls for healthy targets.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName]`ExternalName`. | "100ms" | No |
|
||||||
| `services[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "GET" | No |
|
| `services[m].`<br />`healthCheck.unhealthyInterval` | Frequency of the health check calls for unhealthy targets.<br />When not defined, it defaults to the `interval` value.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName]`ExternalName`. | "100ms" | No |
|
||||||
| `services[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind is **Service**. | | No |
|
| `services[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "GET" | No |
|
||||||
| `services[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | | No |
|
| `services[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind is **Service**. | | No |
|
||||||
| `services[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "5s" | No |
|
| `services[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | | No |
|
||||||
| `services[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
| `services[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "5s" | No |
|
||||||
| `services[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | true | No |
|
| `services[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | "" | No |
|
||||||
| `services[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | | No |
|
| `services[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | true | No |
|
||||||
| `services[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />Evaluated only if the kind is **Service**. | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
| `services[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type `ExternalName`. | | No |
|
||||||
| `services[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind is **Service**. | false | No |
|
| `services[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />Evaluated only if the kind is **Service**. | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
||||||
| `services[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind is **Service**. | false | No |
|
| `services[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `services[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind is **Service**. | "" | No |
|
| `services[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `services[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind is **Service**. | 0 | No |
|
| `services[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind is **Service**. | "" | No |
|
||||||
| `services[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind is **Service**. | "RoundRobin" | No |
|
| `services[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind is **Service**. | 0 | No |
|
||||||
| `services[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
| `services[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind is **Service**. | "RoundRobin" | No |
|
||||||
| `services[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind is **Service**. | false | No |
|
| `services[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
||||||
| `services[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind is **Service**. | false | No |
|
| `services[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness at the WRR service level.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
| `services[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind is **Service**. | false | No |
|
||||||
| `sticky.`<br />`cookie.httpOnly` | Allow the cookie used for the stickiness at the WRR service level to be accessed by client-side APIs, such as JavaScript.<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | false | No |
|
| `sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness at the WRR service level.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
||||||
| `sticky.`<br />`cookie.secure` | Allow the cookie used for the stickiness at the WRR service level to be only transmitted over an encrypted connection (i.e. HTTPS).<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | false | No |
|
| `sticky.`<br />`cookie.httpOnly` | Allow the cookie used for the stickiness at the WRR service level to be accessed by client-side APIs, such as JavaScript.<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | false | No |
|
||||||
| `sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy for the cookie used for the stickiness at the WRR service level.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | "" | No |
|
| `sticky.`<br />`cookie.secure` | Allow the cookie used for the stickiness at the WRR service level to be only transmitted over an encrypted connection (i.e. HTTPS).<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | false | No |
|
||||||
| `sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie used for the stickiness at the WRR service level expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires. | 0 | No |
|
| `sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy for the cookie used for the stickiness at the WRR service level.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />More information about WRR stickiness [here](#stickiness-on-multiple-levels) | "" | No |
|
||||||
|
| `sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie used for the stickiness at the WRR service level expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires. | 0 | No |
|
||||||
|
|
||||||
#### Stickiness on multiple levels
|
#### Stickiness on multiple levels
|
||||||
|
|
||||||
@ -372,65 +373,67 @@ spec:
|
|||||||
|
|
||||||
The mirrored services properties are set in the `mirrors` list.
|
The mirrored services properties are set in the `mirrors` list.
|
||||||
|
|
||||||
| Field | Description | Default | Required |
|
| Field | Description | Default | Required |
|
||||||
|:------|:----------------------------------------------------------|:---------------------|:---------|
|
|:--------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|:---------|
|
||||||
| `kind` | Kind of the main service.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br />- **TraefikService**: Traefik Service.<br />More information [here](#services) | "" | No |
|
| `kind` | Kind of the main service.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br />- **TraefikService**: Traefik Service.<br />More information [here](#services) | "" | No |
|
||||||
| `name` | Main service name.<br />The character `@` is not authorized. | "" | Yes |
|
| `name` | Main service name.<br />The character `@` is not authorized. | "" | Yes |
|
||||||
| `namespace` | Main service namespace.<br />More information [here](#services). | "" | No |
|
| `namespace` | Main service namespace.<br />More information [here](#services). | "" | No |
|
||||||
| `port` | Main service port (number or port name).<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
| `port` | Main service port (number or port name).<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
||||||
| `responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind of the main service is **Service**. | 100ms | No |
|
| `responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind of the main service is **Service**. | 100ms | No |
|
||||||
| `scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind of the main service is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
| `scheme` | Scheme to use for the request to the upstream Kubernetes Service.<br />Evaluated only if the kind of the main service is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
||||||
| `serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and the main service's servers.<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
| `serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and the main service's servers.<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
||||||
| `passHostHeader` | Forward client Host header to main service's server.<br />Evaluated only if the kind of the main service is **Service**. | true | No |
|
| `passHostHeader` | Forward client Host header to main service's server.<br />Evaluated only if the kind of the main service is **Service**. | true | No |
|
||||||
| `healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "http" | No |
|
| `healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "http" | No |
|
||||||
| `healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `healthCheck.interval` | Frequency of the health check calls.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
| `healthCheck.interval` | Frequency of the health check calls for healthy targets.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
||||||
| `healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "GET" | No |
|
| `healthCheck.unhealthyInterval` | Frequency of the health check calls for unhealthy targets.<br />When not defined, it defaults to the `interval` value.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
||||||
| `healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind of the main service is **Service**. | | No |
|
| `healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "GET" | No |
|
||||||
| `healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
| `healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind of the main service is **Service**. | | No |
|
||||||
| `healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "5s" | No |
|
| `healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
||||||
| `healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "5s" | No |
|
||||||
| `healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | true | No |
|
| `healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
| `healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | true | No |
|
||||||
| `sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness on the main service.<br />Evaluated only if the kind of the main service is **Service**. | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
| `healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind of the main service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
||||||
| `sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
| `sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness on the main service.<br />Evaluated only if the kind of the main service is **Service**. | Abbreviation of a sha1<br />(ex: `_1d52e`). | No |
|
||||||
| `sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
| `sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
||||||
| `sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
| `sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
||||||
| `sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind of the main service is **Service**. | 0 | No |
|
| `sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind of the main service is **Service**. | "" | No |
|
||||||
| `strategy` | Load balancing strategy between the main service's servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind of the main service is **Service**. | "RoundRobin" | No |
|
| `sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind of the main service is **Service**. | 0 | No |
|
||||||
| `weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
| `strategy` | Load balancing strategy between the main service's servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind of the main service is **Service**. | "RoundRobin" | No |
|
||||||
| `nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
| `weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
||||||
| `nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
| `nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
||||||
| `maxBodySize` | Maximum size allowed for the body of the request.<br />If the body is larger, the request is not mirrored.<br />-1 means unlimited size. | -1 | No |
|
| `nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind of the main service is **Service**. | false | No |
|
||||||
| `mirrors` | List of mirrored services to target.<br /> It can be any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />More information [here](#services). | | No |
|
| `maxBodySize` | Maximum size allowed for the body of the request.<br />If the body is larger, the request is not mirrored.<br />-1 means unlimited size. | -1 | No |
|
||||||
| `mirrors[m].`<br />`kind` | Kind of the mirrored service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br />- **TraefikService**: Traefik Service.<br />More information [here](#services) | "" | No |
|
| `mirrors` | List of mirrored services to target.<br /> It can be any combination of TraefikService and [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). <br />More information [here](#services). | | No |
|
||||||
| `mirrors[m].`<br />`name` | Mirrored service name.<br />The character `@` is not authorized. | "" | Yes |
|
| `mirrors[m].`<br />`kind` | Kind of the mirrored service targeted.<br />Two values allowed:<br />- **Service**: Kubernetes Service<br />- **TraefikService**: Traefik Service.<br />More information [here](#services) | "" | No |
|
||||||
| `mirrors[m].`<br />`namespace` | Mirrored service namespace.<br />More information [here](#services). | "" | No |
|
| `mirrors[m].`<br />`name` | Mirrored service name.<br />The character `@` is not authorized. | "" | Yes |
|
||||||
| `mirrors[m].`<br />`port` | Mirrored service port (number or port name).<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
| `mirrors[m].`<br />`namespace` | Mirrored service namespace.<br />More information [here](#services). | "" | No |
|
||||||
| `mirrors[m].`<br />`percent` | Part of the traffic to mirror in percent (from 0 to 100) | 0 | No |
|
| `mirrors[m].`<br />`port` | Mirrored service port (number or port name).<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
||||||
| `mirrors[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind of the mirrored service is **Service**. | 100ms | No |
|
| `mirrors[m].`<br />`percent` | Part of the traffic to mirror in percent (from 0 to 100) | 0 | No |
|
||||||
| `mirrors[m].`<br />`scheme` | Scheme to use for the request to the mirrored service.<br />Evaluated only if the kind of the mirrored service is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
| `mirrors[m].`<br />`responseForwarding.`<br />`flushInterval` | Interval, in milliseconds, in between flushes to the client while copying the response body.<br />A negative value means to flush immediately after each write to the client.<br />This configuration is ignored when a response is a streaming response; for such responses, writes are flushed to the client immediately.<br />Evaluated only if the kind of the mirrored service is **Service**. | 100ms | No |
|
||||||
| `mirrors[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and the mirrored service servers.<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
| `mirrors[m].`<br />`scheme` | Scheme to use for the request to the mirrored service.<br />Evaluated only if the kind of the mirrored service is **Service**. | "http"<br />"https" if `port` is 443 or contains the string *https*. | No |
|
||||||
| `mirrors[m].`<br />`passHostHeader` | Forward client Host header to the mirrored service servers.<br />Evaluated only if the kind of the mirrored service is **Service**. | true | No |
|
| `mirrors[m].`<br />`serversTransport` | Name of ServersTransport resource to use to configure the transport between Traefik and the mirrored service servers.<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `mirrors[m].`<br />`passHostHeader` | Forward client Host header to the mirrored service servers.<br />Evaluated only if the kind of the mirrored service is **Service**. | true | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "http" | No |
|
| `mirrors[m].`<br />`healthCheck.scheme` | Server URL scheme for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `mirrors[m].`<br />`healthCheck.mode` | Health check mode.<br /> If defined to grpc, will use the gRPC health check protocol to probe the server.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "http" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.interval` | Frequency of the health check calls.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
| `mirrors[m].`<br />`healthCheck.path` | Server URL path for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "GET" | No |
|
| `mirrors[m].`<br />`healthCheck.interval` | Frequency of the health check calls.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind of the mirrored service is **Service**. | | No |
|
| `mirrors[m].`<br />`healthCheck.unhealthyInterval` | Frequency of the health check calls for unhealthy targets.<br />When not defined, it defaults to the `interval` value.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "100ms" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
| `mirrors[m].`<br />`healthCheck.method` | HTTP method for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "GET" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "5s" | No |
|
| `mirrors[m].`<br />`healthCheck.status` | Expected HTTP status code of the response to the health check request.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName.<br />If not set, expect a status between 200 and 399.<br />Evaluated only if the kind of the mirrored service is **Service**. | | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
| `mirrors[m].`<br />`healthCheck.port` | URL port for the health check endpoint.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | true | No |
|
| `mirrors[m].`<br />`healthCheck.timeout` | Maximum duration to wait before considering the server unhealthy.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "5s" | No |
|
||||||
| `mirrors[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
| `mirrors[m].`<br />`healthCheck.hostname` | Value in the Host header of the health check request.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | "" | No |
|
||||||
| `mirrors[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
| `mirrors[m].`<br />`healthCheck.`<br />`followRedirect` | Follow the redirections during the healtchcheck.<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | true | No |
|
||||||
| `mirrors[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
| `mirrors[m].`<br />`healthCheck.headers` | Map of header to send to the health check endpoint<br />Evaluated only if the kind of the mirrored service is **Service**.<br />Only for [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type [ExternalName](#services). | | No |
|
||||||
| `mirrors[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
| `mirrors[m].`<br />`sticky.`<br />`cookie.name` | Name of the cookie used for the stickiness.<br />When sticky sessions are enabled, a `Set-Cookie` header is set on the initial response to let the client know which server handles the first response.<br />On subsequent requests, to keep the session alive with the same server, the client should send the cookie with the value set.<br />If the server pecified in the cookie becomes unhealthy, the request will be forwarded to a new server (and the cookie will keep track of the new server).<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
||||||
| `mirrors[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
| `mirrors[m].`<br />`sticky.`<br />`cookie.httpOnly` | Allow the cookie can be accessed by client-side APIs, such as JavaScript.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
||||||
| `mirrors[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind of the mirrored service is **Service**. | 0 | No |
|
| `mirrors[m].`<br />`sticky.`<br />`cookie.secure` | Allow the cookie can only be transmitted over an encrypted connection (i.e. HTTPS).<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
||||||
| `mirrors[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind of the mirrored service is **Service**. | "RoundRobin" | No |
|
| `mirrors[m].`<br />`sticky.`<br />`cookie.sameSite` | [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) policy.<br />Allowed values:<br />-`none`<br />-`lax`<br />`strict`<br />Evaluated only if the kind of the mirrored service is **Service**. | "" | No |
|
||||||
| `mirrors[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
| `mirrors[m].`<br />`sticky.`<br />`cookie.maxAge` | Number of seconds until the cookie expires.<br />Negative number, the cookie expires immediately.<br />0, the cookie never expires.<br />Evaluated only if the kind of the mirrored service is **Service**. | 0 | No |
|
||||||
| `mirrors[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
| `mirrors[m].`<br />`strategy` | Load balancing strategy between the servers.<br />RoundRobin is the only supported value yet.<br />Evaluated only if the kind of the mirrored service is **Service**. | "RoundRobin" | No |
|
||||||
| `mirrors[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
| `mirrors[m].`<br />`weight` | Service weight.<br />To use only to refer to WRR TraefikService | "" | No |
|
||||||
| `mirrorBody` | Defines whether the request body should be mirrored. | true | No |
|
| `mirrors[m].`<br />`nativeLB` | Allow using the Kubernetes Service load balancing between the pods instead of the one provided by Traefik.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
||||||
|
| `mirrors[m].`<br />`nodePortLB` | Use the nodePort IP address when the service type is NodePort.<br />It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.<br />Evaluated only if the kind of the mirrored service is **Service**. | false | No |
|
||||||
|
| `mirrorBody` | Defines whether the request body should be mirrored. | true | No |
|
||||||
|
@ -222,6 +222,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -327,6 +327,14 @@ you'd add the label `traefik.http.services.<name-of-your-choice>.loadbalancer.pa
|
|||||||
"traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
"traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
"traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10s"
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -218,6 +218,14 @@ you'd add the label `traefik.http.services.{name-of-your-choice}.loadbalancer.pa
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -203,6 +203,14 @@ description: "Read the technical documentation to learn the Traefik Routing Conf
|
|||||||
|---------------------------------------------------------------------|-------|
|
|---------------------------------------------------------------------|-------|
|
||||||
| `traefik/http/services/myservice/loadbalancer/healthcheck/interval` | `10` |
|
| `traefik/http/services/myservice/loadbalancer/healthcheck/interval` | `10` |
|
||||||
|
|
||||||
|
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
| Key (Path) | Value |
|
||||||
|
|------------------------------------------------------------------------------|-------|
|
||||||
|
| `traefik/http/services/myservice/loadbalancer/healthcheck/unhealthyinterval` | `10` |
|
||||||
|
|
||||||
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/path`"
|
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -222,6 +222,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -351,6 +351,14 @@ you'd add the label `traefik.http.services.<name-of-your-choice>.loadbalancer.pa
|
|||||||
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10s"
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
See [health check](../http/load-balancing/service.md#health-check) for more information.
|
||||||
|
@ -218,6 +218,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -333,6 +333,14 @@ you'd add the label `traefik.http.services.<name-of-your-choice>.loadbalancer.pa
|
|||||||
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10s"
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -220,6 +220,14 @@ you'd add the label `traefik.http.services.{name-of-your-choice}.loadbalancer.pa
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -180,6 +180,14 @@ A Story of key & values
|
|||||||
|---------------------------------------------------------------------|-------|
|
|---------------------------------------------------------------------|-------|
|
||||||
| `traefik/http/services/myservice/loadbalancer/healthcheck/interval` | `10` |
|
| `traefik/http/services/myservice/loadbalancer/healthcheck/interval` | `10` |
|
||||||
|
|
||||||
|
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
| Key (Path) | Value |
|
||||||
|
|------------------------------------------------------------------------------|-------|
|
||||||
|
| `traefik/http/services/myservice/loadbalancer/healthcheck/unhealthyinterval` | `10` |
|
||||||
|
|
||||||
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/path`"
|
??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -218,6 +218,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass
|
|||||||
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
traefik.http.services.myservice.loadbalancer.healthcheck.interval=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -347,6 +347,14 @@ you'd add the label `traefik.http.services.<name-of-your-choice>.loadbalancer.pa
|
|||||||
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.interval=10s"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.unhealthyinterval`"
|
||||||
|
|
||||||
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- "traefik.http.services.myservice.loadbalancer.healthcheck.unhealthyinterval=10s"
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.path`"
|
||||||
|
|
||||||
See [health check](../services/index.md#health-check) for more information.
|
See [health check](../services/index.md#health-check) for more information.
|
||||||
|
@ -415,7 +415,8 @@ Below are the available options for the health check mechanism:
|
|||||||
- `mode` (default: http), if defined to `grpc`, will use the gRPC health check protocol to probe the server.
|
- `mode` (default: http), if defined to `grpc`, will use the gRPC health check protocol to probe the server.
|
||||||
- `hostname` (optional), sets the value of `hostname` in the `Host` header of the health check request.
|
- `hostname` (optional), sets the value of `hostname` in the `Host` header of the health check request.
|
||||||
- `port` (optional), replaces the server URL `port` for the health check endpoint.
|
- `port` (optional), replaces the server URL `port` for the health check endpoint.
|
||||||
- `interval` (default: 30s), defines the frequency of the health check calls.
|
- `interval` (default: 30s), defines the frequency of the health check calls for healthy targets.
|
||||||
|
- `unhealthyInterval` (default: 30s), defines the frequency of the health check calls for unhealthy targets. When not defined, it defaults to the `interval` value.
|
||||||
- `timeout` (default: 5s), defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
- `timeout` (default: 5s), defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
- `headers` (optional), defines custom headers to be sent to the health check endpoint.
|
- `headers` (optional), defines custom headers to be sent to the health check endpoint.
|
||||||
- `followRedirects` (default: true), defines whether redirects should be followed during the health check calls.
|
- `followRedirects` (default: true), defines whether redirects should be followed during the health check calls.
|
||||||
@ -424,7 +425,7 @@ Below are the available options for the health check mechanism:
|
|||||||
|
|
||||||
!!! info "Interval & Timeout Format"
|
!!! info "Interval & Timeout Format"
|
||||||
|
|
||||||
Interval and timeout are to be given in a format understood by [time.ParseDuration](https://golang.org/pkg/time/#ParseDuration).
|
Interval, UnhealthyInterval and Timeout are to be given in a format understood by [time.ParseDuration](https://golang.org/pkg/time/#ParseDuration).
|
||||||
|
|
||||||
!!! info "Recovering Servers"
|
!!! info "Recovering Servers"
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -172,6 +172,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -1070,7 +1079,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -1106,6 +1115,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -2743,7 +2761,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -2779,6 +2797,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -2828,7 +2855,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -2864,6 +2891,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
@ -3167,7 +3203,7 @@ spec:
|
|||||||
- type: integer
|
- type: integer
|
||||||
- type: string
|
- type: string
|
||||||
description: |-
|
description: |-
|
||||||
Interval defines the frequency of the health check calls.
|
Interval defines the frequency of the health check calls for healthy targets.
|
||||||
Default: 30s
|
Default: 30s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
method:
|
method:
|
||||||
@ -3203,6 +3239,15 @@ spec:
|
|||||||
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
Default: 5s
|
Default: 5s
|
||||||
x-kubernetes-int-or-string: true
|
x-kubernetes-int-or-string: true
|
||||||
|
unhealthyInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
type: object
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
|
@ -299,17 +299,18 @@ type Server struct {
|
|||||||
|
|
||||||
// ServerHealthCheck holds the HealthCheck configuration.
|
// ServerHealthCheck holds the HealthCheck configuration.
|
||||||
type ServerHealthCheck struct {
|
type ServerHealthCheck struct {
|
||||||
Scheme string `json:"scheme,omitempty" toml:"scheme,omitempty" yaml:"scheme,omitempty" export:"true"`
|
Scheme string `json:"scheme,omitempty" toml:"scheme,omitempty" yaml:"scheme,omitempty" export:"true"`
|
||||||
Mode string `json:"mode,omitempty" toml:"mode,omitempty" yaml:"mode,omitempty" export:"true"`
|
Mode string `json:"mode,omitempty" toml:"mode,omitempty" yaml:"mode,omitempty" export:"true"`
|
||||||
Path string `json:"path,omitempty" toml:"path,omitempty" yaml:"path,omitempty" export:"true"`
|
Path string `json:"path,omitempty" toml:"path,omitempty" yaml:"path,omitempty" export:"true"`
|
||||||
Method string `json:"method,omitempty" toml:"method,omitempty" yaml:"method,omitempty" export:"true"`
|
Method string `json:"method,omitempty" toml:"method,omitempty" yaml:"method,omitempty" export:"true"`
|
||||||
Status int `json:"status,omitempty" toml:"status,omitempty" yaml:"status,omitempty" export:"true"`
|
Status int `json:"status,omitempty" toml:"status,omitempty" yaml:"status,omitempty" export:"true"`
|
||||||
Port int `json:"port,omitempty" toml:"port,omitempty,omitzero" yaml:"port,omitempty" export:"true"`
|
Port int `json:"port,omitempty" toml:"port,omitempty,omitzero" yaml:"port,omitempty" export:"true"`
|
||||||
Interval ptypes.Duration `json:"interval,omitempty" toml:"interval,omitempty" yaml:"interval,omitempty" export:"true"`
|
Interval ptypes.Duration `json:"interval,omitempty" toml:"interval,omitempty" yaml:"interval,omitempty" export:"true"`
|
||||||
Timeout ptypes.Duration `json:"timeout,omitempty" toml:"timeout,omitempty" yaml:"timeout,omitempty" export:"true"`
|
UnhealthyInterval *ptypes.Duration `json:"unhealthyInterval,omitempty" toml:"unhealthyInterval,omitempty" yaml:"unhealthyInterval,omitempty" export:"true"`
|
||||||
Hostname string `json:"hostname,omitempty" toml:"hostname,omitempty" yaml:"hostname,omitempty"`
|
Timeout ptypes.Duration `json:"timeout,omitempty" toml:"timeout,omitempty" yaml:"timeout,omitempty" export:"true"`
|
||||||
FollowRedirects *bool `json:"followRedirects,omitempty" toml:"followRedirects,omitempty" yaml:"followRedirects,omitempty" export:"true"`
|
Hostname string `json:"hostname,omitempty" toml:"hostname,omitempty" yaml:"hostname,omitempty"`
|
||||||
Headers map[string]string `json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" export:"true"`
|
FollowRedirects *bool `json:"followRedirects,omitempty" toml:"followRedirects,omitempty" yaml:"followRedirects,omitempty" export:"true"`
|
||||||
|
Headers map[string]string `json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDefaults Default values for a HealthCheck.
|
// SetDefaults Default values for a HealthCheck.
|
||||||
|
@ -1428,6 +1428,11 @@ func (in *Server) DeepCopy() *Server {
|
|||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ServerHealthCheck) DeepCopyInto(out *ServerHealthCheck) {
|
func (in *ServerHealthCheck) DeepCopyInto(out *ServerHealthCheck) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
if in.UnhealthyInterval != nil {
|
||||||
|
in, out := &in.UnhealthyInterval, &out.UnhealthyInterval
|
||||||
|
*out = new(paersertypes.Duration)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
if in.FollowRedirects != nil {
|
if in.FollowRedirects != nil {
|
||||||
in, out := &in.FollowRedirects, &out.FollowRedirects
|
in, out := &in.FollowRedirects, &out.FollowRedirects
|
||||||
*out = new(bool)
|
*out = new(bool)
|
||||||
|
@ -162,6 +162,7 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.headers.name1": "foobar",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.headers.name1": "foobar",
|
||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.hostname": "foobar",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.hostname": "foobar",
|
||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.interval": "1s",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.interval": "1s",
|
||||||
|
"traefik.http.services.Service0.loadbalancer.healthcheck.unhealthyinterval": "1s",
|
||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.path": "foobar",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.path": "foobar",
|
||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.method": "foobar",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.method": "foobar",
|
||||||
"traefik.http.services.Service0.loadbalancer.healthcheck.status": "401",
|
"traefik.http.services.Service0.loadbalancer.healthcheck.status": "401",
|
||||||
@ -186,6 +187,7 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.headers.name1": "foobar",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.headers.name1": "foobar",
|
||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.hostname": "foobar",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.hostname": "foobar",
|
||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.interval": "1s",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.interval": "1s",
|
||||||
|
"traefik.http.services.Service1.loadbalancer.healthcheck.unhealthyinterval": "1s",
|
||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.path": "foobar",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.path": "foobar",
|
||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.method": "foobar",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.method": "foobar",
|
||||||
"traefik.http.services.Service1.loadbalancer.healthcheck.status": "401",
|
"traefik.http.services.Service1.loadbalancer.healthcheck.status": "401",
|
||||||
@ -701,15 +703,16 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Scheme: "foobar",
|
Scheme: "foobar",
|
||||||
Mode: "foobar",
|
Mode: "foobar",
|
||||||
Path: "foobar",
|
Path: "foobar",
|
||||||
Method: "foobar",
|
Method: "foobar",
|
||||||
Status: 401,
|
Status: 401,
|
||||||
Port: 42,
|
Port: 42,
|
||||||
Interval: ptypes.Duration(time.Second),
|
Interval: ptypes.Duration(time.Second),
|
||||||
Timeout: ptypes.Duration(time.Second),
|
UnhealthyInterval: pointer(ptypes.Duration(time.Second)),
|
||||||
Hostname: "foobar",
|
Timeout: ptypes.Duration(time.Second),
|
||||||
|
Hostname: "foobar",
|
||||||
Headers: map[string]string{
|
Headers: map[string]string{
|
||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
@ -735,15 +738,16 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Scheme: "foobar",
|
Scheme: "foobar",
|
||||||
Mode: "foobar",
|
Mode: "foobar",
|
||||||
Path: "foobar",
|
Path: "foobar",
|
||||||
Method: "foobar",
|
Method: "foobar",
|
||||||
Status: 401,
|
Status: 401,
|
||||||
Port: 42,
|
Port: 42,
|
||||||
Interval: ptypes.Duration(time.Second),
|
Interval: ptypes.Duration(time.Second),
|
||||||
Timeout: ptypes.Duration(time.Second),
|
UnhealthyInterval: pointer(ptypes.Duration(time.Second)),
|
||||||
Hostname: "foobar",
|
Timeout: ptypes.Duration(time.Second),
|
||||||
|
Hostname: "foobar",
|
||||||
Headers: map[string]string{
|
Headers: map[string]string{
|
||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
@ -1244,14 +1248,15 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Scheme: "foobar",
|
Scheme: "foobar",
|
||||||
Path: "foobar",
|
Path: "foobar",
|
||||||
Method: "foobar",
|
Method: "foobar",
|
||||||
Status: 401,
|
Status: 401,
|
||||||
Port: 42,
|
Port: 42,
|
||||||
Interval: ptypes.Duration(time.Second),
|
Interval: ptypes.Duration(time.Second),
|
||||||
Timeout: ptypes.Duration(time.Second),
|
UnhealthyInterval: pointer(ptypes.Duration(time.Second)),
|
||||||
Hostname: "foobar",
|
Timeout: ptypes.Duration(time.Second),
|
||||||
|
Hostname: "foobar",
|
||||||
Headers: map[string]string{
|
Headers: map[string]string{
|
||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
@ -1276,14 +1281,15 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Scheme: "foobar",
|
Scheme: "foobar",
|
||||||
Path: "foobar",
|
Path: "foobar",
|
||||||
Method: "foobar",
|
Method: "foobar",
|
||||||
Status: 401,
|
Status: 401,
|
||||||
Port: 42,
|
Port: 42,
|
||||||
Interval: ptypes.Duration(time.Second),
|
Interval: ptypes.Duration(time.Second),
|
||||||
Timeout: ptypes.Duration(time.Second),
|
UnhealthyInterval: pointer(ptypes.Duration(time.Second)),
|
||||||
Hostname: "foobar",
|
Timeout: ptypes.Duration(time.Second),
|
||||||
|
Hostname: "foobar",
|
||||||
Headers: map[string]string{
|
Headers: map[string]string{
|
||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
@ -1471,6 +1477,7 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Headers.name1": "foobar",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Headers.name1": "foobar",
|
||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Hostname": "foobar",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Hostname": "foobar",
|
||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Interval": "1000000000",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Interval": "1000000000",
|
||||||
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.UnhealthyInterval": "1000000000",
|
||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Path": "foobar",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Path": "foobar",
|
||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Method": "foobar",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Method": "foobar",
|
||||||
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Status": "401",
|
"traefik.HTTP.Services.Service0.LoadBalancer.HealthCheck.Status": "401",
|
||||||
@ -1495,6 +1502,7 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Headers.name1": "foobar",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Headers.name1": "foobar",
|
||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Hostname": "foobar",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Hostname": "foobar",
|
||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Interval": "1000000000",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Interval": "1000000000",
|
||||||
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.UnhealthyInterval": "1000000000",
|
||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Path": "foobar",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Path": "foobar",
|
||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Method": "foobar",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Method": "foobar",
|
||||||
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Status": "401",
|
"traefik.HTTP.Services.Service1.LoadBalancer.HealthCheck.Status": "401",
|
||||||
|
@ -40,18 +40,27 @@ type metricsHealthCheck interface {
|
|||||||
ServiceServerUpGauge() gokitmetrics.Gauge
|
ServiceServerUpGauge() gokitmetrics.Gauge
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type target struct {
|
||||||
|
targetURL *url.URL
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
|
||||||
type ServiceHealthChecker struct {
|
type ServiceHealthChecker struct {
|
||||||
balancer StatusSetter
|
balancer StatusSetter
|
||||||
info *runtime.ServiceInfo
|
info *runtime.ServiceInfo
|
||||||
|
|
||||||
config *dynamic.ServerHealthCheck
|
config *dynamic.ServerHealthCheck
|
||||||
interval time.Duration
|
interval time.Duration
|
||||||
timeout time.Duration
|
unhealthyInterval time.Duration
|
||||||
|
timeout time.Duration
|
||||||
|
|
||||||
metrics metricsHealthCheck
|
metrics metricsHealthCheck
|
||||||
|
|
||||||
client *http.Client
|
client *http.Client
|
||||||
targets map[string]*url.URL
|
|
||||||
|
healthyTargets chan target
|
||||||
|
unhealthyTargets chan target
|
||||||
|
|
||||||
serviceName string
|
serviceName string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,13 +69,26 @@ func NewServiceHealthChecker(ctx context.Context, metrics metricsHealthCheck, co
|
|||||||
|
|
||||||
interval := time.Duration(config.Interval)
|
interval := time.Duration(config.Interval)
|
||||||
if interval <= 0 {
|
if interval <= 0 {
|
||||||
logger.Error().Msg("Health check interval smaller than zero")
|
logger.Error().Msg("Health check interval smaller than zero, default value will be used instead.")
|
||||||
interval = time.Duration(dynamic.DefaultHealthCheckInterval)
|
interval = time.Duration(dynamic.DefaultHealthCheckInterval)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the unhealthyInterval option is not set, we use the interval option value,
|
||||||
|
// to check the unhealthy targets as often as the healthy ones.
|
||||||
|
var unhealthyInterval time.Duration
|
||||||
|
if config.UnhealthyInterval == nil {
|
||||||
|
unhealthyInterval = interval
|
||||||
|
} else {
|
||||||
|
unhealthyInterval = time.Duration(*config.UnhealthyInterval)
|
||||||
|
if unhealthyInterval <= 0 {
|
||||||
|
logger.Error().Msg("Health check unhealthy interval smaller than zero, default value will be used instead.")
|
||||||
|
unhealthyInterval = time.Duration(dynamic.DefaultHealthCheckInterval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
timeout := time.Duration(config.Timeout)
|
timeout := time.Duration(config.Timeout)
|
||||||
if timeout <= 0 {
|
if timeout <= 0 {
|
||||||
logger.Error().Msg("Health check timeout smaller than zero")
|
logger.Error().Msg("Health check timeout smaller than zero, default value will be used instead.")
|
||||||
timeout = time.Duration(dynamic.DefaultHealthCheckTimeout)
|
timeout = time.Duration(dynamic.DefaultHealthCheckTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,21 +102,38 @@ func NewServiceHealthChecker(ctx context.Context, metrics metricsHealthCheck, co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
healthyTargets := make(chan target, len(targets))
|
||||||
|
for name, targetURL := range targets {
|
||||||
|
healthyTargets <- target{
|
||||||
|
targetURL: targetURL,
|
||||||
|
name: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unhealthyTargets := make(chan target, len(targets))
|
||||||
|
|
||||||
return &ServiceHealthChecker{
|
return &ServiceHealthChecker{
|
||||||
balancer: service,
|
balancer: service,
|
||||||
info: info,
|
info: info,
|
||||||
config: config,
|
config: config,
|
||||||
interval: interval,
|
interval: interval,
|
||||||
timeout: timeout,
|
unhealthyInterval: unhealthyInterval,
|
||||||
targets: targets,
|
timeout: timeout,
|
||||||
serviceName: serviceName,
|
healthyTargets: healthyTargets,
|
||||||
client: client,
|
unhealthyTargets: unhealthyTargets,
|
||||||
metrics: metrics,
|
serviceName: serviceName,
|
||||||
|
client: client,
|
||||||
|
metrics: metrics,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (shc *ServiceHealthChecker) Launch(ctx context.Context) {
|
func (shc *ServiceHealthChecker) Launch(ctx context.Context) {
|
||||||
ticker := time.NewTicker(shc.interval)
|
go shc.healthcheck(ctx, shc.unhealthyTargets, shc.unhealthyInterval)
|
||||||
|
|
||||||
|
shc.healthcheck(ctx, shc.healthyTargets, shc.interval)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (shc *ServiceHealthChecker) healthcheck(ctx context.Context, targets chan target, interval time.Duration) {
|
||||||
|
ticker := time.NewTicker(interval)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -103,7 +142,23 @@ func (shc *ServiceHealthChecker) Launch(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
|
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
for proxyName, target := range shc.targets {
|
// We collect the targets to check once for all,
|
||||||
|
// to avoid rechecking a target that has been moved during the health check.
|
||||||
|
var targetsToCheck []target
|
||||||
|
hasMoreTargets := true
|
||||||
|
for hasMoreTargets {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
case target := <-targets:
|
||||||
|
targetsToCheck = append(targetsToCheck, target)
|
||||||
|
default:
|
||||||
|
hasMoreTargets = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we can check the targets.
|
||||||
|
for _, target := range targetsToCheck {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
@ -113,14 +168,14 @@ func (shc *ServiceHealthChecker) Launch(ctx context.Context) {
|
|||||||
up := true
|
up := true
|
||||||
serverUpMetricValue := float64(1)
|
serverUpMetricValue := float64(1)
|
||||||
|
|
||||||
if err := shc.executeHealthCheck(ctx, shc.config, target); err != nil {
|
if err := shc.executeHealthCheck(ctx, shc.config, target.targetURL); err != nil {
|
||||||
// The context is canceled when the dynamic configuration is refreshed.
|
// The context is canceled when the dynamic configuration is refreshed.
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Ctx(ctx).Warn().
|
log.Ctx(ctx).Warn().
|
||||||
Str("targetURL", target.String()).
|
Str("targetURL", target.targetURL.String()).
|
||||||
Err(err).
|
Err(err).
|
||||||
Msg("Health check failed.")
|
Msg("Health check failed.")
|
||||||
|
|
||||||
@ -128,17 +183,21 @@ func (shc *ServiceHealthChecker) Launch(ctx context.Context) {
|
|||||||
serverUpMetricValue = float64(0)
|
serverUpMetricValue = float64(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
shc.balancer.SetStatus(ctx, proxyName, up)
|
shc.balancer.SetStatus(ctx, target.name, up)
|
||||||
|
|
||||||
statusStr := runtime.StatusDown
|
var statusStr string
|
||||||
if up {
|
if up {
|
||||||
statusStr = runtime.StatusUp
|
statusStr = runtime.StatusUp
|
||||||
|
shc.healthyTargets <- target
|
||||||
|
} else {
|
||||||
|
statusStr = runtime.StatusDown
|
||||||
|
shc.unhealthyTargets <- target
|
||||||
}
|
}
|
||||||
|
|
||||||
shc.info.UpdateServerStatus(target.String(), statusStr)
|
shc.info.UpdateServerStatus(target.targetURL.String(), statusStr)
|
||||||
|
|
||||||
shc.metrics.ServiceServerUpGauge().
|
shc.metrics.ServiceServerUpGauge().
|
||||||
With("service", shc.serviceName, "url", target.String()).
|
With("service", shc.serviceName, "url", target.targetURL.String()).
|
||||||
Set(serverUpMetricValue)
|
Set(serverUpMetricValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -419,11 +419,12 @@ func TestServiceHealthChecker_Launch(t *testing.T) {
|
|||||||
lb := &testLoadBalancer{RWMutex: &sync.RWMutex{}}
|
lb := &testLoadBalancer{RWMutex: &sync.RWMutex{}}
|
||||||
|
|
||||||
config := &dynamic.ServerHealthCheck{
|
config := &dynamic.ServerHealthCheck{
|
||||||
Mode: test.mode,
|
Mode: test.mode,
|
||||||
Status: test.status,
|
Status: test.status,
|
||||||
Path: "/path",
|
Path: "/path",
|
||||||
Interval: ptypes.Duration(500 * time.Millisecond),
|
Interval: ptypes.Duration(500 * time.Millisecond),
|
||||||
Timeout: ptypes.Duration(499 * time.Millisecond),
|
UnhealthyInterval: pointer(ptypes.Duration(500 * time.Millisecond)),
|
||||||
|
Timeout: ptypes.Duration(499 * time.Millisecond),
|
||||||
}
|
}
|
||||||
|
|
||||||
gauge := &testhelpers.CollectingGauge{}
|
gauge := &testhelpers.CollectingGauge{}
|
||||||
@ -456,3 +457,54 @@ func TestServiceHealthChecker_Launch(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDifferentIntervals(t *testing.T) {
|
||||||
|
// The context is passed to the health check and
|
||||||
|
// canonically canceled by the test server once all expected requests have been received.
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
|
healthyServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
}))
|
||||||
|
healthyURL := testhelpers.MustParseURL(healthyServer.URL)
|
||||||
|
|
||||||
|
unhealthyServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusServiceUnavailable)
|
||||||
|
}))
|
||||||
|
unhealthyURL := testhelpers.MustParseURL(unhealthyServer.URL)
|
||||||
|
|
||||||
|
lb := &testLoadBalancer{RWMutex: &sync.RWMutex{}}
|
||||||
|
|
||||||
|
config := &dynamic.ServerHealthCheck{
|
||||||
|
Mode: "http",
|
||||||
|
Path: "/path",
|
||||||
|
Interval: ptypes.Duration(500 * time.Millisecond),
|
||||||
|
UnhealthyInterval: pointer(ptypes.Duration(50 * time.Millisecond)),
|
||||||
|
Timeout: ptypes.Duration(499 * time.Millisecond),
|
||||||
|
}
|
||||||
|
|
||||||
|
gauge := &testhelpers.CollectingGauge{}
|
||||||
|
serviceInfo := &runtime.ServiceInfo{}
|
||||||
|
hc := NewServiceHealthChecker(ctx, &MetricsMock{gauge}, config, lb, serviceInfo, http.DefaultTransport, map[string]*url.URL{"healthy": healthyURL, "unhealthy": unhealthyURL}, "foobar")
|
||||||
|
|
||||||
|
wg := sync.WaitGroup{}
|
||||||
|
wg.Add(1)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
hc.Launch(ctx)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-time.After(2 * time.Second):
|
||||||
|
break
|
||||||
|
case <-ctx.Done():
|
||||||
|
wg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
lb.Lock()
|
||||||
|
defer lb.Unlock()
|
||||||
|
|
||||||
|
assert.Greater(t, lb.numRemovedServers, lb.numUpsertedServers, "removed servers greater than upserted servers")
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
ptypes "github.com/traefik/paerser/types"
|
||||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||||
"github.com/traefik/traefik/v3/pkg/logs"
|
"github.com/traefik/traefik/v3/pkg/logs"
|
||||||
"github.com/traefik/traefik/v3/pkg/provider"
|
"github.com/traefik/traefik/v3/pkg/provider"
|
||||||
@ -373,6 +374,17 @@ func (c configBuilder) buildServersLB(namespace string, svc traefikv1alpha1.Load
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If the UnhealthyInterval option is not set, we use the Interval option value,
|
||||||
|
// to check the unhealthy targets as often as the healthy ones.
|
||||||
|
if svc.HealthCheck.UnhealthyInterval == nil {
|
||||||
|
lb.HealthCheck.UnhealthyInterval = &lb.HealthCheck.Interval
|
||||||
|
} else {
|
||||||
|
var unhealthyInterval ptypes.Duration
|
||||||
|
if err := unhealthyInterval.Set(svc.HealthCheck.UnhealthyInterval.String()); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
lb.HealthCheck.UnhealthyInterval = &unhealthyInterval
|
||||||
|
}
|
||||||
if svc.HealthCheck.Timeout != nil {
|
if svc.HealthCheck.Timeout != nil {
|
||||||
if err := lb.HealthCheck.Timeout.Set(svc.HealthCheck.Timeout.String()); err != nil {
|
if err := lb.HealthCheck.Timeout.Set(svc.HealthCheck.Timeout.String()); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -2647,10 +2647,11 @@ func TestLoadIngressRoutes(t *testing.T) {
|
|||||||
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Path: "/health",
|
Path: "/health",
|
||||||
Timeout: 5000000000,
|
Timeout: 5000000000,
|
||||||
Interval: 15000000000,
|
Interval: 15000000000,
|
||||||
FollowRedirects: pointer(true),
|
UnhealthyInterval: pointer(ptypes.Duration(15000000000)),
|
||||||
|
FollowRedirects: pointer(true),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -2712,10 +2713,11 @@ func TestLoadIngressRoutes(t *testing.T) {
|
|||||||
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Path: "/health1",
|
Path: "/health1",
|
||||||
Timeout: 5000000000,
|
Timeout: 5000000000,
|
||||||
Interval: 15000000000,
|
Interval: 15000000000,
|
||||||
FollowRedirects: pointer(true),
|
UnhealthyInterval: pointer(ptypes.Duration(15000000000)),
|
||||||
|
FollowRedirects: pointer(true),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -2732,10 +2734,11 @@ func TestLoadIngressRoutes(t *testing.T) {
|
|||||||
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Path: "/health2",
|
Path: "/health2",
|
||||||
Timeout: 5000000000,
|
Timeout: 5000000000,
|
||||||
Interval: 20000000000,
|
Interval: 20000000000,
|
||||||
FollowRedirects: pointer(true),
|
UnhealthyInterval: pointer(ptypes.Duration(20000000000)),
|
||||||
|
FollowRedirects: pointer(true),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -2776,10 +2779,11 @@ func TestLoadIngressRoutes(t *testing.T) {
|
|||||||
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
FlushInterval: ptypes.Duration(100 * time.Millisecond),
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Path: "/health1",
|
Path: "/health1",
|
||||||
Timeout: 5000000000,
|
Timeout: 5000000000,
|
||||||
Interval: 15000000000,
|
Interval: 15000000000,
|
||||||
FollowRedirects: pointer(true),
|
UnhealthyInterval: pointer(ptypes.Duration(15000000000)),
|
||||||
|
FollowRedirects: pointer(true),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -170,9 +170,13 @@ type ServerHealthCheck struct {
|
|||||||
Status int `json:"status,omitempty"`
|
Status int `json:"status,omitempty"`
|
||||||
// Port defines the server URL port for the health check endpoint.
|
// Port defines the server URL port for the health check endpoint.
|
||||||
Port int `json:"port,omitempty"`
|
Port int `json:"port,omitempty"`
|
||||||
// Interval defines the frequency of the health check calls.
|
// Interval defines the frequency of the health check calls for healthy targets.
|
||||||
// Default: 30s
|
// Default: 30s
|
||||||
Interval *intstr.IntOrString `json:"interval,omitempty"`
|
Interval *intstr.IntOrString `json:"interval,omitempty"`
|
||||||
|
// UnhealthyInterval defines the frequency of the health check calls for unhealthy targets.
|
||||||
|
// When UnhealthyInterval is not defined, it defaults to the Interval value.
|
||||||
|
// Default: 30s
|
||||||
|
UnhealthyInterval *intstr.IntOrString `json:"unhealthyInterval,omitempty"`
|
||||||
// Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
// Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
// Default: 5s
|
// Default: 5s
|
||||||
Timeout *intstr.IntOrString `json:"timeout,omitempty"`
|
Timeout *intstr.IntOrString `json:"timeout,omitempty"`
|
||||||
|
@ -1280,6 +1280,11 @@ func (in *ServerHealthCheck) DeepCopyInto(out *ServerHealthCheck) {
|
|||||||
*out = new(intstr.IntOrString)
|
*out = new(intstr.IntOrString)
|
||||||
**out = **in
|
**out = **in
|
||||||
}
|
}
|
||||||
|
if in.UnhealthyInterval != nil {
|
||||||
|
in, out := &in.UnhealthyInterval, &out.UnhealthyInterval
|
||||||
|
*out = new(intstr.IntOrString)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
if in.Timeout != nil {
|
if in.Timeout != nil {
|
||||||
in, out := &in.Timeout, &out.Timeout
|
in, out := &in.Timeout, &out.Timeout
|
||||||
*out = new(intstr.IntOrString)
|
*out = new(intstr.IntOrString)
|
||||||
|
@ -45,6 +45,7 @@ func Test_buildConfiguration(t *testing.T) {
|
|||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/path": "foobar",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/path": "foobar",
|
||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/port": "42",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/port": "42",
|
||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/interval": "1s",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/interval": "1s",
|
||||||
|
"traefik/http/services/Service01/loadBalancer/healthCheck/unhealthyinterval": "1s",
|
||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/timeout": "1s",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/timeout": "1s",
|
||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/hostname": "foobar",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/hostname": "foobar",
|
||||||
"traefik/http/services/Service01/loadBalancer/healthCheck/headers/name0": "foobar",
|
"traefik/http/services/Service01/loadBalancer/healthCheck/headers/name0": "foobar",
|
||||||
@ -665,14 +666,15 @@ func Test_buildConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
HealthCheck: &dynamic.ServerHealthCheck{
|
HealthCheck: &dynamic.ServerHealthCheck{
|
||||||
Scheme: "foobar",
|
Scheme: "foobar",
|
||||||
Mode: "foobar",
|
Mode: "foobar",
|
||||||
Path: "foobar",
|
Path: "foobar",
|
||||||
Port: 42,
|
Port: 42,
|
||||||
Interval: ptypes.Duration(time.Second),
|
Interval: ptypes.Duration(time.Second),
|
||||||
Timeout: ptypes.Duration(time.Second),
|
UnhealthyInterval: pointer(ptypes.Duration(time.Second)),
|
||||||
Hostname: "foobar",
|
Timeout: ptypes.Duration(time.Second),
|
||||||
FollowRedirects: pointer(true),
|
Hostname: "foobar",
|
||||||
|
FollowRedirects: pointer(true),
|
||||||
Headers: map[string]string{
|
Headers: map[string]string{
|
||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
:thumb-style="appThumbStyle"
|
:thumb-style="appThumbStyle"
|
||||||
style="height:100%;"
|
style="height:100%;"
|
||||||
>
|
>
|
||||||
<q-card-section v-if="data.scheme || data.interval">
|
<q-card-section v-if="data.scheme || data.interval || data.unhealthyInterval">
|
||||||
<div class="row items-start no-wrap">
|
<div class="row items-start no-wrap">
|
||||||
<div
|
<div
|
||||||
v-if="data.scheme"
|
v-if="data.scheme"
|
||||||
@ -38,6 +38,20 @@
|
|||||||
{{ data.interval }}
|
{{ data.interval }}
|
||||||
</q-chip>
|
</q-chip>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="data.unhealthyInterval"
|
||||||
|
class="col"
|
||||||
|
>
|
||||||
|
<div class="text-subtitle2">
|
||||||
|
UNHEALTHY INTERVAL
|
||||||
|
</div>
|
||||||
|
<q-chip
|
||||||
|
dense
|
||||||
|
class="app-chip app-chip-interval"
|
||||||
|
>
|
||||||
|
{{ data.unhealthyInterval }}
|
||||||
|
</q-chip>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-card-section v-if="data.path || data.timeout">
|
<q-card-section v-if="data.path || data.timeout">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user