Traefik 3.6.0 → 3.7.0
16 versions, 14 migration-guide sections in 9 versions, 0 required stops
Version by version, oldest first
3.6.1: no action items (1 version)
3.6.2 2025-11-18
Migration
Ingress NGINX Provider
The KubernetesIngressNGINX Provider is no longer experimental in v3.6.2 and can be enabled without the experimental.kubernetesIngressNGINX option.
Deprecated Configuration:
Experimental kubernetesIngressNGINX option (deprecated)
File (YAML)
experimental: kubernetesIngressNGINX: trueFile (TOML)
[experimental] kubernetesIngressNGINX=trueCLI
--experimental.kubernetesIngressNGINX=true
Migration Steps:
- Remove the
kubernetesIngressNGINXoption from the experimental section - Configure the provider using the kubernetesIngressNGINX Provider documentation
3.6.4 2025-12-05
Migration
Encoded Characters in Request Path
Starting with v3.6.4, for security reasons, Traefik now rejects requests with a path containing a specific set of encoded characters by default.
When such a request is received, Traefik responds with a 400 Bad Request status code.
Here is the list of the encoded characters that are rejected by default, along with the corresponding configuration option to allow them:
| Encoded Character | Character | Config option to allow the encoded character |
|---|---|---|
%2f or %2F | / (slash) | entryPoints.<name> .http.encodedCharacters .allowEncodedSlash |
%5c or %5C | \ (backslash) | entryPoints.<name> .http.encodedCharacters .allowEncodedBackSlash |
%00 | NULL (null character) | entryPoints.<name> .http.encodedCharacters .allowEncodedNullCharacter |
%3b or %3B | ; (semicolon) | entryPoints.<name> .http.encodedCharacters .allowEncodedSemicolon |
%25 | % (percent) | entryPoints.<name> .http.encodedCharacters .allowEncodedPercent |
%3f or %3F | ? (question mark) | entryPoints.<name> .http.encodedCharacters .allowEncodedQuestionMark |
%23 | # (hash) | entryPoints.<name> .http.encodedCharacters .allowEncodedHash |
Please check out the entrypoint encodedCharacters option documentation for more details.
From doc.traefik.io/traefik/migrate/v3/#encoded-characters-in-request-path
3.6.5 – 3.6.6: no action items (2 versions)
3.6.7 2026-01-14
Migration
Encoded Characters Configuration Default Values
Since v3.6.7, the options for encoded characters now have a true default value. This means that Traefik will not reject requests with a path containing a specific set of encoded characters by default. It is now up to the users to configure the security hardening of encoded characters.
Here is the list of the encoded characters that can be configured to false to disallow them:
| Encoded Character | Character | Config options | Default value |
|---|---|---|---|
%2f or %2F | / (slash) | entryPoints.<name> .http.encodedCharacters .allowEncodedSlash | true |
%5c or %5C | \ (backslash) | entryPoints.<name> .http.encodedCharacters .allowEncodedBackSlash | true |
%00 | NULL (null character) | entryPoints.<name> .http.encodedCharacters .allowEncodedNullCharacter | true |
%3b or %3B | ; (semicolon) | entryPoints.<name> .http.encodedCharacters .allowEncodedSemicolon | true |
%25 | % (percent) | entryPoints.<name> .http.encodedCharacters .allowEncodedPercent | true |
%3f or %3F | ? (question mark) | entryPoints.<name> .http.encodedCharacters .allowEncodedQuestionMark | true |
%23 | # (hash) | entryPoints.<name> .http.encodedCharacters .allowEncodedHash | true |
Note: This check is not done against query parameters, but only against the request path as defined in RFC3986 section-3.
Please check out the entrypoint encodedCharacters option documentation for more details.
From doc.traefik.io/traefik/migrate/v3/#encoded-characters-configuration-default-values
3.6.8 2026-02-11
Migration
Health Check Request Path
Since v3.6.8, the configured path for the health check request is now verified to be a relative URL, and the health check will fail if it is not.
From doc.traefik.io/traefik/migrate/v3/#health-check-request-path
3.6.9 2026-02-23
Migration
maxResponseBodySize configuration on ForwardAuth middleware
In v3.6.9, a new maxResponseBodySize option has been added to the ForwardAuth middleware configuration. The default value for this option is -1, which means there is no limit to the response body size. However, it is strongly recommended to set this option to a suitable value to avoid performance and security issues, such as DoS attacks and memory exhaustion.
Please check out the ForwardAuth middleware documentation for more details.
From doc.traefik.io/traefik/migrate/v3/#maxresponsebodysize-configuration-on-forwardauth-middleware
Migration
Kubernetes CRD Provider
To use the new maxResponseBodySize option in the ForwardAuth middleware with the Kubernetes CRD provider, you need to update your CRDs.
Apply Updated CRDs:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml3.6.10 – 3.6.13: no action items (4 versions)
3.6.14 2026-04-22
Migration
Kubernetes CRD: Chain middleware and allowCrossNamespace
In v3.6.14, the Chain middleware now honors the Kubernetes CRD provider's allowCrossNamespace option. Previously, a Chain could reference middlewares in other namespaces regardless of the allowCrossNamespace configuration.
If allowCrossNamespace is set to false (the default) and a Chain middleware references a middleware in a different namespace from its own, the whole Chain is now rejected and an error is logged.
From doc.traefik.io/traefik/migrate/v3/#kubernetes-crd-chain-middleware-and-allowcrossnamespace
Migration
ForwardAuth middleware: trustForwardHeader
Starting with v3.6.14, the trustForwardHeader option has been deprecated and will be removed in the next major version. Configure the trusted IPs at the EntryPoint level by using the forwardedHeaders.trustedIPs option, and set trustForwardHeader to true on this middleware.
When trustForwardHeader is not explicitly set, Traefik logs a warning as its behavior is inconsistent: some X-Forwarded-* headers (e.g. X-Forwarded-For, X-Forwarded-Proto) are removed while others (e.g. X-Forwarded-Prefix) are forwarded untouched.
To silence the warning and avoid security concerns, explicitly set trustForwardHeader to true or false in your ForwardAuth middleware configuration.
Please check out the ForwardAuth middleware documentation for more details.
From doc.traefik.io/traefik/migrate/v3/#forwardauth-middleware-trustforwardheader
3.6.15 2026-04-29
Migration
In v3.6.15, a new errorRequestHeaders option has been added to the Errors middleware.
By default, the behavior is unchanged: all original request headers are forwarded to the error page service. If the error page service is in a separate trust domain, consider using errorRequestHeaders to restrict which headers are forwarded.
Please check out the Error Pages middleware documentation for more details.
3.6.16 2026-05-05
Migration
Docker provider: minimum Docker Engine version
Starting with v3.6.16, the Docker provider requires Docker API version v1.40 or above (Docker Engine v19.03). Users running older (end of life) versions of Docker Engine should update their Docker Engine or use the DOCKER_API_VERSION environment variable to override the API version used by Traefik.
From doc.traefik.io/traefik/migrate/v3/#docker-provider-minimum-docker-engine-version
3.6.17 – 3.6.25: released after 3.7.0; not on this route
3.7.0 2026-05-05
Quoted from doc.traefik.io/traefik/migrate/v3/#v370
Migration
Ingress NGINX Provider
Starting with v3.7.0, the Ingress NGINX provider now supports the nginx.ingress.kubernetes.io/custom-headers annotation to add custom headers to the response forwarded to the client.
Therefore, in the corresponding RBACs (see KubernetesIngressNGINX provider RBACs) the configmaps right has been added.
Required RBAC Updates:
...
- apiGroups:
- ""
resources:
- configmaps
verbs:
- list
- watch
...Migration
Kubernetes Gateway API Provider
Starting with v3.7.0, the Kubernetes Gateway API provider supports version v1.5.1 of the specification, which requires the Gateway API CRDs to be updated.
TLSRoute has graduated to the Standard channel and no longer requires the experimentalChannel option. The experimentalChannel option is now only needed for TCPRoute.
Apply Updated CRDs:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.1/standard-install.yaml
For the experimental channel:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.1/experimental-install.yamlMigration
Kubernetes CRD Provider
To use the new options of the retry middleware or the new ingressClassName field with the Kubernetes CRD provider, you need to update your CRDs.
Apply Updated CRDs:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.7/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.ymlMigration
Wildcard Host and HostSNI
Since v3.7.0, the Host and HostSNI matchers support wildcard subdomain matching (e.g., *.example.com). This allows matching any direct subdomain of a domain with a single-level wildcard prefix. For example, *.example.com matches foo.example.com but not foo.bar.example.com or example.com itself.
This feature is only available with the v3 rule syntax (the default).
TLSOptions with Wildcard Domains
Since v3.7.0, TLSOptions can now be associated with routers using wildcard Host and HostSNI matchers (e.g., Host(*.example.com)). This enables configuring different TLS options for wildcard domains.
Previously, TLSOptions selection was limited to exact Host matches, and using HostRegexp or wildcards would fall back to the default TLS options with a warning message like: No domain found in rule HostRegexp(...) the TLS option foo cannot be applied.
Note: TLSOptions for HostRegexp matchers remains unsupported. Use wildcard Host matchers as an alternative.
From doc.traefik.io/traefik/migrate/v3/#wildcard-host-and-hostsni
Release notes from github.com/traefik/traefik/blob/master/CHANGELOG.md, and Migration: Steps needed between the versions, checked 17 hours ago. Only text the vendor marks as breaking, or puts in a warning/caution/important note, is shown; read the full notes for anything else. Traefik's release notes (CHANGELOG.md, GitHub releases) are lists of merged pull requests and mark nothing as breaking. What is quoted instead is Traefik's migration documentation on doc.traefik.io: “Migration: Steps needed between the versions” (v3), the same page of the v2.11 documentation (v2), and “Configuration Details for Migrating from Traefik v2 to v3” (on 3.0.0). Each section of those pages is labelled “Migration” and shown on the release its heading names (“v3.3 to v3.4” on 3.4.0). A section naming a canceled release (v2.4.10, v2.9.0) is shown on the next release of that line. Versions are covered from 2.0.0. No required stop is documented.