Upgrade Path

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: true

File (TOML)

[experimental]
    kubernetesIngressNGINX=true

CLI

--experimental.kubernetesIngressNGINX=true

Migration Steps:

  1. Remove the kubernetesIngressNGINX option from the experimental section
  2. Configure the provider using the kubernetesIngressNGINX Provider documentation

From doc.traefik.io/traefik/migrate/v3/#v362

Full release notes for 3.6.2

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 CharacterCharacterConfig option to allow the encoded character
%2f or %2F/ (slash)entryPoints.<name> .http.encodedCharacters .allowEncodedSlash
%5c or %5C\ (backslash)entryPoints.<name> .http.encodedCharacters .allowEncodedBackSlash
%00NULL (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

Full release notes for 3.6.4

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 CharacterCharacterConfig optionsDefault value
%2f or %2F/ (slash)entryPoints.<name> .http.encodedCharacters .allowEncodedSlashtrue
%5c or %5C\ (backslash)entryPoints.<name> .http.encodedCharacters .allowEncodedBackSlashtrue
%00NULL (null character)entryPoints.<name> .http.encodedCharacters .allowEncodedNullCharactertrue
%3b or %3B; (semicolon)entryPoints.<name> .http.encodedCharacters .allowEncodedSemicolontrue
%25% (percent)entryPoints.<name> .http.encodedCharacters .allowEncodedPercenttrue
%3f or %3F? (question mark)entryPoints.<name> .http.encodedCharacters .allowEncodedQuestionMarktrue
%23# (hash)entryPoints.<name> .http.encodedCharacters .allowEncodedHashtrue

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

Full release notes for 3.6.7

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

Full release notes for 3.6.8

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.yml

From doc.traefik.io/traefik/migrate/v3/#v369

Full release notes for 3.6.9

3.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

Full release notes for 3.6.14

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.

From doc.traefik.io/traefik/migrate/v3/#v3615

Full release notes for 3.6.15

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

Full release notes for 3.6.16

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.yaml

Migration

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.yml

Migration

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

Full release notes for 3.7.0

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.