From 8d9ff0c441c291ea8f0ee31be6d0033cb972b271 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 7 Aug 2024 09:44:03 +0200 Subject: [PATCH 1/8] Mention missing metrics removal in the migration guide --- docs/content/migration/v2-to-v3-details.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/content/migration/v2-to-v3-details.md b/docs/content/migration/v2-to-v3-details.md index fcbe58eea..e40ab39f3 100644 --- a/docs/content/migration/v2-to-v3-details.md +++ b/docs/content/migration/v2-to-v3-details.md @@ -555,6 +555,16 @@ One should use the `ContentType` middleware to enable the `Content-Type` header ### Observability +#### Open Connections Metric + +In v3, the open connections metric has been replaced with a global one because it was erroneously at the HTTP level, and providing misleading information. +While previously produced at the entryPoint, router, and service levels, it is now replaced with a global metric. +The equivalent to `traefik_entrypoint_open_connections`, `traefik_router_open_connections` and `traefik_service_open_connections` is now `traefik_open_connections`. + +#### Configuration Reload Failures Metrics + +In v3, the `traefik_config_reloads_failure_total` and `traefik_config_last_reload_failure` metrics have been suppressed since they could not be implemented. + #### gRPC Metrics In v3, the reported status code for gRPC requests is now the value of the `Grpc-Status` header. From 0eb0a15aa12e41297a51d6ee917df1b8afb0cf31 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 7 Aug 2024 09:52:08 +0200 Subject: [PATCH 2/8] Remove documention for unimplemented service retries metric --- docs/content/observability/metrics/overview.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/content/observability/metrics/overview.md b/docs/content/observability/metrics/overview.md index 0027b3ca6..a47c02a81 100644 --- a/docs/content/observability/metrics/overview.md +++ b/docs/content/observability/metrics/overview.md @@ -150,7 +150,6 @@ traefik.router.responses.bytes.total | Requests TLS total | Count | `tls_version`, `tls_cipher`, `service` | The total count of HTTPS requests processed on a service. | | Request duration | Histogram | `code`, `method`, `protocol`, `service` | Request processing duration histogram on a service. | | Open connections | Count | `method`, `protocol`, `service` | The current count of open connections on a service. | -| Retries total | Count | `service` | The count of requests retries on a service. | | Server UP | Gauge | `service`, `url` | Current service's server status, 0 for a down or 1 for up. | | Requests bytes total | Count | `code`, `method`, `protocol`, `service` | The total size of requests in bytes received by a service. | | Responses bytes total | Count | `code`, `method`, `protocol`, `service` | The total size of responses in bytes returned by a service. | @@ -160,7 +159,6 @@ traefik_service_requests_total traefik_service_requests_tls_total traefik_service_request_duration_seconds traefik_service_open_connections -traefik_service_retries_total traefik_service_server_up traefik_service_requests_bytes_total traefik_service_responses_bytes_total @@ -171,7 +169,6 @@ service.request.total router.service.tls.total service.request.duration service.connections.open -service.retries.total service.server.up service.requests.bytes.total service.responses.bytes.total @@ -182,7 +179,6 @@ traefik.service.requests.total traefik.service.requests.tls.total traefik.service.request.duration traefik.service.connections.open -traefik.service.retries.total traefik.service.server.up traefik.service.requests.bytes.total traefik.service.responses.bytes.total @@ -194,7 +190,6 @@ traefik.service.responses.bytes.total {prefix}.service.request.tls.total {prefix}.service.request.duration {prefix}.service.connections.open -{prefix}.service.retries.total {prefix}.service.server.up {prefix}.service.requests.bytes.total {prefix}.service.responses.bytes.total From e7dc097901e62963d0239cd4db366376971ca110 Mon Sep 17 00:00:00 2001 From: Kevin Pollet Date: Mon, 12 Aug 2024 14:08:05 +0200 Subject: [PATCH 3/8] Prevent error logging when TCP WRR pool is empty --- pkg/tcp/wrr_load_balancer.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/tcp/wrr_load_balancer.go b/pkg/tcp/wrr_load_balancer.go index c47bbef8e..fd1972356 100644 --- a/pkg/tcp/wrr_load_balancer.go +++ b/pkg/tcp/wrr_load_balancer.go @@ -7,6 +7,8 @@ import ( "github.com/traefik/traefik/v2/pkg/log" ) +var errNoServersInPool = errors.New("no servers in the pool") + type server struct { Handler weight int @@ -34,8 +36,10 @@ func (b *WRRLoadBalancer) ServeTCP(conn WriteCloser) { b.lock.Unlock() if err != nil { - log.WithoutContext().Errorf("Error during load balancing: %v", err) - conn.Close() + if !errors.Is(err, errNoServersInPool) { + log.WithoutContext().Errorf("Error during load balancing: %v", err) + } + _ = conn.Close() return } @@ -91,7 +95,7 @@ func gcd(a, b int) int { func (b *WRRLoadBalancer) next() (Handler, error) { if len(b.servers) == 0 { - return nil, errors.New("no servers in the pool") + return nil, errNoServersInPool } // The algo below may look messy, but is actually very simple From ad613e58cdc9cc381fc354063a0b9792cf20646e Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 12 Aug 2024 14:28:04 +0200 Subject: [PATCH 4/8] Allow configuring rule syntax with Kubernetes Ingress annotation --- docs/content/migration/v2-to-v3-details.md | 13 +++++++++++++ .../content/routing/providers/kubernetes-ingress.md | 10 +++++++++- pkg/provider/kubernetes/ingress/annotations.go | 1 + pkg/provider/kubernetes/ingress/annotations_test.go | 4 ++++ .../ingress/fixtures/Ingress-with-annotations.yml | 1 + pkg/provider/kubernetes/ingress/kubernetes.go | 1 + pkg/provider/kubernetes/ingress/kubernetes_test.go | 1 + 7 files changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/content/migration/v2-to-v3-details.md b/docs/content/migration/v2-to-v3-details.md index e40ab39f3..abd8ae587 100644 --- a/docs/content/migration/v2-to-v3-details.md +++ b/docs/content/migration/v2-to-v3-details.md @@ -541,6 +541,19 @@ it is now unsupported and would prevent Traefik to start. All Pilot related configuration should be removed from the static configuration. +### Kubernetes Ingress Path Matching + +In v3, the Kubernetes Ingress default path matching does not support regexes anymore. + +#### Remediation + +Two levels of remediation are possible: + +- Interpret the default path matcher `PathPrefix` with v2 syntax. +This can done globally for all routers with the [static configuration](#configure-the-default-syntax-in-static-configuration) or on a per-router basis by using the [traefik.ingress.kubernetes.io/router.rulesyntax](../routing/providers/kubernetes-ingress.md#annotations) annotation. + +- Adapt the path regex to be compatible with the Go regex syntax and change the default path matcher to use the `PathRegexp` matcher with the [`traefik.ingress.kubernetes.io/router.pathmatcher`](../routing/providers/kubernetes-ingress.md#annotations) annotation. + ## Operations Changes ### Traefik RBAC Update diff --git a/docs/content/routing/providers/kubernetes-ingress.md b/docs/content/routing/providers/kubernetes-ingress.md index 80bd7becb..158543b46 100644 --- a/docs/content/routing/providers/kubernetes-ingress.md +++ b/docs/content/routing/providers/kubernetes-ingress.md @@ -229,10 +229,18 @@ which in turn will create the resulting routers, services, handlers, etc. traefik.ingress.kubernetes.io/router.priority: "42" ``` +??? info "`traefik.ingress.kubernetes.io/router.rulesyntax`" + + See [rule syntax](../routers/index.md#rulesyntax) for more information. + + ```yaml + traefik.ingress.kubernetes.io/router.rulesyntax: "v2" + ``` + ??? info "`traefik.ingress.kubernetes.io/router.pathmatcher`" Overrides the default router rule type used for a path. - Only path-related matcher name can be specified: `Path`, `PathPrefix`. + Only path-related matcher name should be specified: `Path`, `PathPrefix` or `PathRegexp`. Default `PathPrefix` diff --git a/pkg/provider/kubernetes/ingress/annotations.go b/pkg/provider/kubernetes/ingress/annotations.go index 00d5d6649..144dd2a46 100644 --- a/pkg/provider/kubernetes/ingress/annotations.go +++ b/pkg/provider/kubernetes/ingress/annotations.go @@ -26,6 +26,7 @@ type RouterIng struct { EntryPoints []string `json:"entryPoints,omitempty"` Middlewares []string `json:"middlewares,omitempty"` Priority int `json:"priority,omitempty"` + RuleSyntax string `json:"ruleSyntax,omitempty"` TLS *dynamic.RouterTLSConfig `json:"tls,omitempty" label:"allowEmpty"` } diff --git a/pkg/provider/kubernetes/ingress/annotations_test.go b/pkg/provider/kubernetes/ingress/annotations_test.go index 646261894..7746b2623 100644 --- a/pkg/provider/kubernetes/ingress/annotations_test.go +++ b/pkg/provider/kubernetes/ingress/annotations_test.go @@ -24,6 +24,7 @@ func Test_parseRouterConfig(t *testing.T) { "traefik.ingress.kubernetes.io/router.entrypoints": "foobar,foobar", "traefik.ingress.kubernetes.io/router.middlewares": "foobar,foobar", "traefik.ingress.kubernetes.io/router.priority": "42", + "traefik.ingress.kubernetes.io/router.rulesyntax": "foobar", "traefik.ingress.kubernetes.io/router.tls": "true", "traefik.ingress.kubernetes.io/router.tls.certresolver": "foobar", "traefik.ingress.kubernetes.io/router.tls.domains.0.main": "foobar", @@ -38,6 +39,7 @@ func Test_parseRouterConfig(t *testing.T) { EntryPoints: []string{"foobar", "foobar"}, Middlewares: []string{"foobar", "foobar"}, Priority: 42, + RuleSyntax: "foobar", TLS: &dynamic.RouterTLSConfig{ CertResolver: "foobar", Domains: []types.Domain{ @@ -180,6 +182,7 @@ func Test_convertAnnotations(t *testing.T) { "traefik.ingress.kubernetes.io/router.entrypoints": "foobar,foobar", "traefik.ingress.kubernetes.io/router.middlewares": "foobar,foobar", "traefik.ingress.kubernetes.io/router.priority": "42", + "traefik.ingress.kubernetes.io/router.rulesyntax": "foobar", "traefik.ingress.kubernetes.io/router.tls": "true", "traefik.ingress.kubernetes.io/router.tls.certresolver": "foobar", "traefik.ingress.kubernetes.io/router.tls.domains.0.main": "foobar", @@ -194,6 +197,7 @@ func Test_convertAnnotations(t *testing.T) { "traefik.router.entrypoints": "foobar,foobar", "traefik.router.middlewares": "foobar,foobar", "traefik.router.priority": "42", + "traefik.router.rulesyntax": "foobar", "traefik.router.tls": "true", "traefik.router.tls.certresolver": "foobar", "traefik.router.tls.domains[0].main": "foobar", diff --git a/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-annotations.yml b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-annotations.yml index bf4679f30..3a57a6345 100644 --- a/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-annotations.yml +++ b/pkg/provider/kubernetes/ingress/fixtures/Ingress-with-annotations.yml @@ -10,6 +10,7 @@ metadata: traefik.ingress.kubernetes.io/router.entrypoints: ep1,ep2 traefik.ingress.kubernetes.io/router.middlewares: md1,md2 traefik.ingress.kubernetes.io/router.priority: "42" + traefik.ingress.kubernetes.io/router.rulesyntax: "v2" traefik.ingress.kubernetes.io/router.tls: "true" traefik.ingress.kubernetes.io/router.tls.certresolver: foobar traefik.ingress.kubernetes.io/router.tls.domains.0.main: domain.com diff --git a/pkg/provider/kubernetes/ingress/kubernetes.go b/pkg/provider/kubernetes/ingress/kubernetes.go index 490271b8c..982cc09e8 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes.go +++ b/pkg/provider/kubernetes/ingress/kubernetes.go @@ -760,6 +760,7 @@ func loadRouter(rule netv1.IngressRule, pa netv1.HTTPIngressPath, rtConfig *Rout } if rtConfig != nil && rtConfig.Router != nil { + rt.RuleSyntax = rtConfig.Router.RuleSyntax rt.Priority = rtConfig.Router.Priority rt.EntryPoints = rtConfig.Router.EntryPoints rt.Middlewares = rtConfig.Router.Middlewares diff --git a/pkg/provider/kubernetes/ingress/kubernetes_test.go b/pkg/provider/kubernetes/ingress/kubernetes_test.go index 5a4e3dd2b..9b736a454 100644 --- a/pkg/provider/kubernetes/ingress/kubernetes_test.go +++ b/pkg/provider/kubernetes/ingress/kubernetes_test.go @@ -96,6 +96,7 @@ func TestLoadConfigurationFromIngresses(t *testing.T) { Service: "testing-service1-80", Middlewares: []string{"md1", "md2"}, Priority: 42, + RuleSyntax: "v2", TLS: &dynamic.RouterTLSConfig{ CertResolver: "foobar", Domains: []types.Domain{ From 7056eeff6af3dcca770de040da80e3f9c084a6d1 Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 19 Aug 2024 14:38:33 +0200 Subject: [PATCH 5/8] Re-allow empty configuration for Kubernetes Ingress provider --- pkg/cli/deprecation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cli/deprecation.go b/pkg/cli/deprecation.go index 0e7af5d05..58d74cf79 100644 --- a/pkg/cli/deprecation.go +++ b/pkg/cli/deprecation.go @@ -214,7 +214,7 @@ type providers struct { ETCD *etcd `json:"etcd,omitempty" toml:"etcd,omitempty" yaml:"etcd,omitempty" label:"allowEmpty" file:"allowEmpty"` Redis *redis `json:"redis,omitempty" toml:"redis,omitempty" yaml:"redis,omitempty" label:"allowEmpty" file:"allowEmpty"` HTTP *http `json:"http,omitempty" toml:"http,omitempty" yaml:"http,omitempty" label:"allowEmpty" file:"allowEmpty"` - KubernetesIngress *ingress `json:"kubernetesIngress,omitempty" toml:"kubernetesIngress,omitempty" yaml:"kubernetesIngress,omitempty" file:"allowEmpty"` + KubernetesIngress *ingress `json:"kubernetesIngress,omitempty" toml:"kubernetesIngress,omitempty" yaml:"kubernetesIngress,omitempty" label:"allowEmpty" file:"allowEmpty"` } func (p *providers) deprecationNotice(logger zerolog.Logger) bool { From 58bbc0cf0f599b49702f4bb587c5f2d899dbe2d0 Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 26 Aug 2024 09:44:04 +0200 Subject: [PATCH 6/8] Remove mentions about APIVersion traefik.io/v1 --- docs/content/deprecation/features.md | 6 ------ .../dynamic-configuration/kubernetes-crd-definition-v1.yml | 2 +- .../dynamic-configuration/traefik.io_ingressroutetcps.yaml | 2 +- integration/fixtures/k8s/01-traefik-crd.yml | 2 +- .../kubernetes/crd/traefikio/v1alpha1/ingressroutetcp.go | 2 +- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/docs/content/deprecation/features.md b/docs/content/deprecation/features.md index 1cf2355df..2d2422496 100644 --- a/docs/content/deprecation/features.md +++ b/docs/content/deprecation/features.md @@ -4,17 +4,11 @@ This page is maintained and updated periodically to reflect our roadmap and any | Feature | Deprecated | End of Support | Removal | |----------------------------------------------------------------------------------------------------------------------|------------|----------------|---------| -| [Kubernetes CRD Provider API Version `traefik.io/v1alpha1`](#kubernetes-crd-provider-api-version-traefikiov1alpha1) | 3.0 | N/A | 4.0 | | [Kubernetes Ingress API Version `networking.k8s.io/v1beta1`](#kubernetes-ingress-api-version-networkingk8siov1beta1) | N/A | N/A | 3.0 | | [CRD API Version `apiextensions.k8s.io/v1beta1`](#kubernetes-ingress-api-version-networkingk8siov1beta1) | N/A | N/A | 3.0 | ## Impact -### Kubernetes CRD Provider API Version `traefik.io/v1alpha1` - -The Kubernetes CRD provider API Version `traefik.io/v1alpha1` is deprecated in Traefik v3. -Please use the API Group `traefik.io/v1` instead. - ### Kubernetes Ingress API Version `networking.k8s.io/v1beta1` The Kubernetes Ingress API Version `networking.k8s.io/v1beta1` support is removed in v3. diff --git a/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml b/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml index 330ccb552..657e10d99 100644 --- a/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml +++ b/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml @@ -507,7 +507,7 @@ spec: hence fully terminating the connection. It is a duration in milliseconds, defaulting to 100. A negative value means an infinite deadline (i.e. the reading capability is never closed). - Deprecated: TerminationDelay is not supported APIVersion traefik.io/v1, please use ServersTransport to configure the TerminationDelay instead. + Deprecated: TerminationDelay will not be supported in future APIVersions, please use ServersTransport to configure the TerminationDelay instead. type: integer tls: description: TLS determines whether to use TLS when dialing diff --git a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml index 1d35c894e..74d6862a0 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml @@ -141,7 +141,7 @@ spec: hence fully terminating the connection. It is a duration in milliseconds, defaulting to 100. A negative value means an infinite deadline (i.e. the reading capability is never closed). - Deprecated: TerminationDelay is not supported APIVersion traefik.io/v1, please use ServersTransport to configure the TerminationDelay instead. + Deprecated: TerminationDelay will not be supported in future APIVersions, please use ServersTransport to configure the TerminationDelay instead. type: integer tls: description: TLS determines whether to use TLS when dialing diff --git a/integration/fixtures/k8s/01-traefik-crd.yml b/integration/fixtures/k8s/01-traefik-crd.yml index 330ccb552..657e10d99 100644 --- a/integration/fixtures/k8s/01-traefik-crd.yml +++ b/integration/fixtures/k8s/01-traefik-crd.yml @@ -507,7 +507,7 @@ spec: hence fully terminating the connection. It is a duration in milliseconds, defaulting to 100. A negative value means an infinite deadline (i.e. the reading capability is never closed). - Deprecated: TerminationDelay is not supported APIVersion traefik.io/v1, please use ServersTransport to configure the TerminationDelay instead. + Deprecated: TerminationDelay will not be supported in future APIVersions, please use ServersTransport to configure the TerminationDelay instead. type: integer tls: description: TLS determines whether to use TLS when dialing diff --git a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroutetcp.go b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroutetcp.go index c02776e53..3d90b0e67 100644 --- a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroutetcp.go +++ b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroutetcp.go @@ -77,7 +77,7 @@ type ServiceTCP struct { // hence fully terminating the connection. // It is a duration in milliseconds, defaulting to 100. // A negative value means an infinite deadline (i.e. the reading capability is never closed). - // Deprecated: TerminationDelay is not supported APIVersion traefik.io/v1, please use ServersTransport to configure the TerminationDelay instead. + // Deprecated: TerminationDelay will not be supported in future APIVersions, please use ServersTransport to configure the TerminationDelay instead. TerminationDelay *int `json:"terminationDelay,omitempty"` // ProxyProtocol defines the PROXY protocol configuration. // More info: https://doc.traefik.io/traefik/v3.1/routing/services/#proxy-protocol From d2030a583572500b830a3d53ffc016c2dd379a97 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:08:03 +0200 Subject: [PATCH 7/8] Upgrade webui dependencies --- webui/package.json | 2 +- webui/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/webui/package.json b/webui/package.json index 06864f0b7..f0521e8f0 100644 --- a/webui/package.json +++ b/webui/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@quasar/extras": "^1.16.12", - "axios": "^1.7.2", + "axios": "^1.7.4", "bowser": "^2.11.0", "chart.js": "^4.4.1", "core-js": "^3.35.1", diff --git a/webui/yarn.lock b/webui/yarn.lock index 0b5eff401..88b6bac4f 100644 --- a/webui/yarn.lock +++ b/webui/yarn.lock @@ -2151,10 +2151,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== +axios@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" + integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" From e56ae1a7666cf9bffe817c39722c04768b8878ee Mon Sep 17 00:00:00 2001 From: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:00:06 +0200 Subject: [PATCH 8/8] Update to go1.23 --- .github/workflows/build.yaml | 2 +- .github/workflows/experimental.yaml | 2 +- .github/workflows/test-integration.yaml | 2 +- .github/workflows/test-unit.yaml | 2 +- .github/workflows/validate.yaml | 4 +-- .golangci.yml | 6 ++-- .semaphore/semaphore.yml | 4 +-- .../kubernetes-crd-definition-v1.yml | 36 +++++++++---------- .../traefik.containo.us_ingressroutes.yaml | 2 +- .../traefik.containo.us_ingressroutetcps.yaml | 2 +- .../traefik.containo.us_ingressrouteudps.yaml | 2 +- .../traefik.containo.us_middlewares.yaml | 2 +- .../traefik.containo.us_middlewaretcps.yaml | 2 +- ...traefik.containo.us_serverstransports.yaml | 2 +- .../traefik.containo.us_tlsoptions.yaml | 2 +- .../traefik.containo.us_tlsstores.yaml | 2 +- .../traefik.containo.us_traefikservices.yaml | 2 +- .../traefik.io_ingressroutes.yaml | 2 +- .../traefik.io_ingressroutetcps.yaml | 2 +- .../traefik.io_ingressrouteudps.yaml | 2 +- .../traefik.io_middlewares.yaml | 2 +- .../traefik.io_middlewaretcps.yaml | 2 +- .../traefik.io_serverstransports.yaml | 2 +- .../traefik.io_tlsoptions.yaml | 2 +- .../traefik.io_tlsstores.yaml | 2 +- .../traefik.io_traefikservices.yaml | 2 +- go.mod | 2 +- integration/fixtures/k8s/01-traefik-crd.yml | 36 +++++++++---------- pkg/api/criterion.go | 10 +++--- pkg/collector/collector.go | 10 +++--- pkg/middlewares/accesslog/logger_test.go | 6 ++-- pkg/middlewares/auth/forward.go | 20 +++++------ pkg/middlewares/ipallowlist/ip_allowlist.go | 5 ++- pkg/middlewares/ipwhitelist/ip_whitelist.go | 5 ++- .../pass_tls_client_cert_test.go | 4 +-- pkg/provider/docker/config.go | 3 +- pkg/provider/ecs/config.go | 3 +- pkg/tcp/wrr_load_balancer.go | 14 ++++---- pkg/udp/wrr_load_balancer.go | 14 ++++---- script/code-gen-docker.sh | 2 +- script/codegen.Dockerfile | 4 +-- 41 files changed, 113 insertions(+), 119 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 542cd056b..18f66ed3b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,7 +10,7 @@ on: - 'script/gcg/**' env: - GO_VERSION: '1.22' + GO_VERSION: '1.23' CGO_ENABLED: 0 jobs: diff --git a/.github/workflows/experimental.yaml b/.github/workflows/experimental.yaml index 7d9e2e2ea..aadce96a8 100644 --- a/.github/workflows/experimental.yaml +++ b/.github/workflows/experimental.yaml @@ -7,7 +7,7 @@ on: - v* env: - GO_VERSION: '1.22' + GO_VERSION: '1.23' CGO_ENABLED: 0 jobs: diff --git a/.github/workflows/test-integration.yaml b/.github/workflows/test-integration.yaml index c00cad272..10fe2ca44 100644 --- a/.github/workflows/test-integration.yaml +++ b/.github/workflows/test-integration.yaml @@ -10,7 +10,7 @@ on: - 'script/gcg/**' env: - GO_VERSION: '1.22' + GO_VERSION: '1.23' CGO_ENABLED: 0 jobs: diff --git a/.github/workflows/test-unit.yaml b/.github/workflows/test-unit.yaml index a22dc4cda..5550ec1cd 100644 --- a/.github/workflows/test-unit.yaml +++ b/.github/workflows/test-unit.yaml @@ -10,7 +10,7 @@ on: - 'script/gcg/**' env: - GO_VERSION: '1.22' + GO_VERSION: '1.23' jobs: diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml index 641d5b7b9..708b88e24 100644 --- a/.github/workflows/validate.yaml +++ b/.github/workflows/validate.yaml @@ -6,8 +6,8 @@ on: - '*' env: - GO_VERSION: '1.22' - GOLANGCI_LINT_VERSION: v1.59.0 + GO_VERSION: '1.23' + GOLANGCI_LINT_VERSION: v1.60.3 MISSSPELL_VERSION: v0.6.0 jobs: diff --git a/.golangci.yml b/.golangci.yml index b164ea9ed..41a87c9fd 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -197,8 +197,7 @@ linters: - maintidx # kind of duplicate of gocyclo - nonamedreturns # Too strict - gosmopolitan # not relevant - - exportloopref # Useless with go1.22 - - musttag + - exportloopref # Not relevant since go1.22 issues: exclude-use-default: false @@ -271,3 +270,6 @@ issues: text: 'unusedwrite: unused write to field' linters: - govet + - path: pkg/provider/acme/local_store.go + linters: + - musttag diff --git a/.semaphore/semaphore.yml b/.semaphore/semaphore.yml index 4c638d96c..1ea75c475 100644 --- a/.semaphore/semaphore.yml +++ b/.semaphore/semaphore.yml @@ -19,13 +19,13 @@ global_job_config: prologue: commands: - curl -sSfL https://raw.githubusercontent.com/ldez/semgo/master/godownloader.sh | sudo sh -s -- -b "/usr/local/bin" - - sudo semgo go1.22 + - sudo semgo go1.23 - export "GOPATH=$(go env GOPATH)" - export "SEMAPHORE_GIT_DIR=${GOPATH}/src/github.com/traefik/${SEMAPHORE_PROJECT_NAME}" - export "PATH=${GOPATH}/bin:${PATH}" - mkdir -vp "${SEMAPHORE_GIT_DIR}" "${GOPATH}/bin" - export GOPROXY=https://proxy.golang.org,direct - - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "${GOPATH}/bin" v1.59.0 + - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "${GOPATH}/bin" v1.60.3 - curl -sSfL https://gist.githubusercontent.com/traefiker/6d7ac019c11d011e4f131bb2cca8900e/raw/goreleaser.sh | bash -s -- -b "${GOPATH}/bin" - checkout - cache restore traefik-$(checksum go.sum) diff --git a/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml b/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml index 2b4b4aad6..be8be7dd4 100644 --- a/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml +++ b/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.io spec: group: traefik.io @@ -290,7 +290,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.io spec: group: traefik.io @@ -514,7 +514,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.io spec: group: traefik.io @@ -618,7 +618,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.io spec: group: traefik.io @@ -1598,7 +1598,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.io spec: group: traefik.io @@ -1685,7 +1685,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.io spec: group: traefik.io @@ -1811,7 +1811,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.io spec: group: traefik.io @@ -1925,7 +1925,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.io spec: group: traefik.io @@ -2022,7 +2022,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.io spec: group: traefik.io @@ -2433,7 +2433,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.containo.us spec: group: traefik.containo.us @@ -2720,7 +2720,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.containo.us spec: group: traefik.containo.us @@ -2944,7 +2944,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.containo.us spec: group: traefik.containo.us @@ -3048,7 +3048,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.containo.us spec: group: traefik.containo.us @@ -4028,7 +4028,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.containo.us spec: group: traefik.containo.us @@ -4115,7 +4115,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.containo.us spec: group: traefik.containo.us @@ -4241,7 +4241,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.containo.us spec: group: traefik.containo.us @@ -4355,7 +4355,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.containo.us spec: group: traefik.containo.us @@ -4452,7 +4452,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutes.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutes.yaml index 31f9791db..50f8111f5 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutes.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutetcps.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutetcps.yaml index e8356112f..a3efe07cd 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutetcps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressroutetcps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressrouteudps.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressrouteudps.yaml index ac3f3b17e..9d3df782b 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressrouteudps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_ingressrouteudps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewares.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewares.yaml index 605b8af5f..10382ea4c 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewares.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewares.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewaretcps.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewaretcps.yaml index 6535b365f..829a9c85a 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewaretcps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_middlewaretcps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_serverstransports.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_serverstransports.yaml index 454e35a2a..deb9a824a 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_serverstransports.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_serverstransports.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsoptions.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsoptions.yaml index bef834eab..daa25640d 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsoptions.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsoptions.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsstores.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsstores.yaml index 57c8e1bf7..40bd04225 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsstores.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_tlsstores.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.containo.us_traefikservices.yaml b/docs/content/reference/dynamic-configuration/traefik.containo.us_traefikservices.yaml index 5ceb028aa..348025449 100644 --- a/docs/content/reference/dynamic-configuration/traefik.containo.us_traefikservices.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.containo.us_traefikservices.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.containo.us spec: group: traefik.containo.us diff --git a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutes.yaml b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutes.yaml index 587207d7c..cd011fae3 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutes.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml index ef6f9b8c1..ed704afd0 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_ingressroutetcps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_ingressrouteudps.yaml b/docs/content/reference/dynamic-configuration/traefik.io_ingressrouteudps.yaml index 60cc29d54..234351e9a 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_ingressrouteudps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_ingressrouteudps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_middlewares.yaml b/docs/content/reference/dynamic-configuration/traefik.io_middlewares.yaml index 0068a365f..e82fab171 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_middlewares.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_middlewares.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_middlewaretcps.yaml b/docs/content/reference/dynamic-configuration/traefik.io_middlewaretcps.yaml index 982caa692..dc435fdf5 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_middlewaretcps.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_middlewaretcps.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_serverstransports.yaml b/docs/content/reference/dynamic-configuration/traefik.io_serverstransports.yaml index aad13e089..96e1d432f 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_serverstransports.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_serverstransports.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_tlsoptions.yaml b/docs/content/reference/dynamic-configuration/traefik.io_tlsoptions.yaml index 19ae64ec2..0fdd05bc4 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_tlsoptions.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_tlsoptions.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_tlsstores.yaml b/docs/content/reference/dynamic-configuration/traefik.io_tlsstores.yaml index 18d421823..240fcf44f 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_tlsstores.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_tlsstores.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.io spec: group: traefik.io diff --git a/docs/content/reference/dynamic-configuration/traefik.io_traefikservices.yaml b/docs/content/reference/dynamic-configuration/traefik.io_traefikservices.yaml index f6a460a44..5c6d83ca7 100644 --- a/docs/content/reference/dynamic-configuration/traefik.io_traefikservices.yaml +++ b/docs/content/reference/dynamic-configuration/traefik.io_traefikservices.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.io spec: group: traefik.io diff --git a/go.mod b/go.mod index 394e423bc..1b875c0f1 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/traefik/traefik/v2 -go 1.22 +go 1.23.0 require ( github.com/BurntSushi/toml v1.4.0 diff --git a/integration/fixtures/k8s/01-traefik-crd.yml b/integration/fixtures/k8s/01-traefik-crd.yml index 2b4b4aad6..be8be7dd4 100644 --- a/integration/fixtures/k8s/01-traefik-crd.yml +++ b/integration/fixtures/k8s/01-traefik-crd.yml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.io spec: group: traefik.io @@ -290,7 +290,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.io spec: group: traefik.io @@ -514,7 +514,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.io spec: group: traefik.io @@ -618,7 +618,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.io spec: group: traefik.io @@ -1598,7 +1598,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.io spec: group: traefik.io @@ -1685,7 +1685,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.io spec: group: traefik.io @@ -1811,7 +1811,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.io spec: group: traefik.io @@ -1925,7 +1925,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.io spec: group: traefik.io @@ -2022,7 +2022,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.io spec: group: traefik.io @@ -2433,7 +2433,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutes.traefik.containo.us spec: group: traefik.containo.us @@ -2720,7 +2720,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressroutetcps.traefik.containo.us spec: group: traefik.containo.us @@ -2944,7 +2944,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: ingressrouteudps.traefik.containo.us spec: group: traefik.containo.us @@ -3048,7 +3048,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewares.traefik.containo.us spec: group: traefik.containo.us @@ -4028,7 +4028,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: middlewaretcps.traefik.containo.us spec: group: traefik.containo.us @@ -4115,7 +4115,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: serverstransports.traefik.containo.us spec: group: traefik.containo.us @@ -4241,7 +4241,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsoptions.traefik.containo.us spec: group: traefik.containo.us @@ -4355,7 +4355,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: tlsstores.traefik.containo.us spec: group: traefik.containo.us @@ -4452,7 +4452,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.1 name: traefikservices.traefik.containo.us spec: group: traefik.containo.us diff --git a/pkg/api/criterion.go b/pkg/api/criterion.go index cd173f532..4a3c35612 100644 --- a/pkg/api/criterion.go +++ b/pkg/api/criterion.go @@ -56,7 +56,7 @@ func (c *searchCriterion) searchIn(values ...string) bool { }) } -func pagination(request *http.Request, max int) (pageInfo, error) { +func pagination(request *http.Request, maximum int) (pageInfo, error) { perPage, err := getIntParam(request, "per_page", defaultPerPage) if err != nil { return pageInfo{}, err @@ -68,17 +68,17 @@ func pagination(request *http.Request, max int) (pageInfo, error) { } startIndex := (page - 1) * perPage - if startIndex != 0 && startIndex >= max { + if startIndex != 0 && startIndex >= maximum { return pageInfo{}, fmt.Errorf("invalid request: page: %d, per_page: %d", page, perPage) } endIndex := startIndex + perPage - if endIndex >= max { - endIndex = max + if endIndex >= maximum { + endIndex = maximum } nextPage := 1 - if page*perPage < max { + if page*perPage < maximum { nextPage = page + 1 } diff --git a/pkg/collector/collector.go b/pkg/collector/collector.go index 50ce0666d..28b7fc1d8 100644 --- a/pkg/collector/collector.go +++ b/pkg/collector/collector.go @@ -21,11 +21,11 @@ const collectorURL = "https://collect.traefik.io/9vxmmkcdmalbdi635d4jgc5p5rx0h7h // Collected data. type data struct { - Version string - Codename string - BuildDate string - Configuration string - Hash string + Version string `json:"version"` + Codename string `json:"codename"` + BuildDate string `json:"buildDate"` + Configuration string `json:"configuration"` + Hash string `json:"hash"` } // Collect anonymous data. diff --git a/pkg/middlewares/accesslog/logger_test.go b/pkg/middlewares/accesslog/logger_test.go index ebec9173e..338467293 100644 --- a/pkg/middlewares/accesslog/logger_test.go +++ b/pkg/middlewares/accesslog/logger_test.go @@ -197,7 +197,7 @@ func TestLoggerHeaderFields(t *testing.T) { if config.FilePath != "" { _, err = os.Stat(config.FilePath) - require.NoError(t, err, fmt.Sprintf("logger should create %s", config.FilePath)) + require.NoErrorf(t, err, "logger should create %s", config.FilePath) } req := &http.Request{ @@ -701,7 +701,7 @@ func assertValidLogData(t *testing.T, expected string, logData []byte) { t.Helper() if len(expected) == 0 { - assert.Zero(t, len(logData)) + assert.Empty(t, logData) t.Log(string(logData)) return } @@ -758,7 +758,7 @@ func doLoggingTLSOpt(t *testing.T, config *types.AccessLog, enableTLS bool) { if config.FilePath != "" { _, err = os.Stat(config.FilePath) - require.NoError(t, err, fmt.Sprintf("logger should create %s", config.FilePath)) + require.NoErrorf(t, err, "logger should create %s", config.FilePath) } req := &http.Request{ diff --git a/pkg/middlewares/auth/forward.go b/pkg/middlewares/auth/forward.go index 708ea85dc..70b3374ab 100644 --- a/pkg/middlewares/auth/forward.go +++ b/pkg/middlewares/auth/forward.go @@ -103,9 +103,8 @@ func (fa *forwardAuth) ServeHTTP(rw http.ResponseWriter, req *http.Request) { forwardReq, err := http.NewRequest(http.MethodGet, fa.address, nil) tracing.LogRequest(tracing.GetSpan(req), forwardReq) if err != nil { - logMessage := fmt.Sprintf("Error calling %s. Cause %s", fa.address, err) - logger.Debug(logMessage) - tracing.SetErrorWithEvent(req, logMessage) + logger.Debugf("Error calling %s. Cause %s", fa.address, err) + tracing.SetErrorWithEvent(req, "Error calling %s. Cause %s", fa.address, err) rw.WriteHeader(http.StatusInternalServerError) return @@ -119,9 +118,8 @@ func (fa *forwardAuth) ServeHTTP(rw http.ResponseWriter, req *http.Request) { forwardResponse, forwardErr := fa.client.Do(forwardReq) if forwardErr != nil { - logMessage := fmt.Sprintf("Error calling %s. Cause: %s", fa.address, forwardErr) - logger.Debug(logMessage) - tracing.SetErrorWithEvent(req, logMessage) + logger.Debugf("Error calling %s. Cause: %s", fa.address, forwardErr) + tracing.SetErrorWithEvent(req, "Error calling %s. Cause: %s", fa.address, forwardErr) rw.WriteHeader(http.StatusInternalServerError) return @@ -130,9 +128,8 @@ func (fa *forwardAuth) ServeHTTP(rw http.ResponseWriter, req *http.Request) { body, readError := io.ReadAll(forwardResponse.Body) if readError != nil { - logMessage := fmt.Sprintf("Error reading body %s. Cause: %s", fa.address, readError) - logger.Debug(logMessage) - tracing.SetErrorWithEvent(req, logMessage) + logger.Debugf("Error reading body %s. Cause: %s", fa.address, readError) + tracing.SetErrorWithEvent(req, "Error reading body %s. Cause: %s", fa.address, readError) rw.WriteHeader(http.StatusInternalServerError) return @@ -151,9 +148,8 @@ func (fa *forwardAuth) ServeHTTP(rw http.ResponseWriter, req *http.Request) { if err != nil { if !errors.Is(err, http.ErrNoLocation) { - logMessage := fmt.Sprintf("Error reading response location header %s. Cause: %s", fa.address, err) - logger.Debug(logMessage) - tracing.SetErrorWithEvent(req, logMessage) + logger.Debugf("Error reading response location header %s. Cause: %s", fa.address, err) + tracing.SetErrorWithEvent(req, "Error reading response location header %s. Cause: %s", fa.address, err) rw.WriteHeader(http.StatusInternalServerError) return diff --git a/pkg/middlewares/ipallowlist/ip_allowlist.go b/pkg/middlewares/ipallowlist/ip_allowlist.go index d700a9279..b0dda6c31 100644 --- a/pkg/middlewares/ipallowlist/ip_allowlist.go +++ b/pkg/middlewares/ipallowlist/ip_allowlist.go @@ -66,9 +66,8 @@ func (al *ipAllowLister) ServeHTTP(rw http.ResponseWriter, req *http.Request) { clientIP := al.strategy.GetIP(req) err := al.allowLister.IsAuthorized(clientIP) if err != nil { - msg := fmt.Sprintf("Rejecting IP %s: %v", clientIP, err) - logger.Debug(msg) - tracing.SetErrorWithEvent(req, msg) + logger.Debugf("Rejecting IP %s: %v", clientIP, err) + tracing.SetErrorWithEvent(req, "Rejecting IP %s: %v", clientIP, err) reject(ctx, rw) return } diff --git a/pkg/middlewares/ipwhitelist/ip_whitelist.go b/pkg/middlewares/ipwhitelist/ip_whitelist.go index dde042b42..cc18fb2da 100644 --- a/pkg/middlewares/ipwhitelist/ip_whitelist.go +++ b/pkg/middlewares/ipwhitelist/ip_whitelist.go @@ -66,9 +66,8 @@ func (wl *ipWhiteLister) ServeHTTP(rw http.ResponseWriter, req *http.Request) { clientIP := wl.strategy.GetIP(req) err := wl.whiteLister.IsAuthorized(clientIP) if err != nil { - msg := fmt.Sprintf("Rejecting IP %s: %v", clientIP, err) - logger.Debug(msg) - tracing.SetErrorWithEvent(req, msg) + logger.Debugf("Rejecting IP %s: %v", clientIP, err) + tracing.SetErrorWithEvent(req, "Rejecting IP %s: %v", clientIP, err) reject(ctx, rw) return } diff --git a/pkg/middlewares/passtlsclientcert/pass_tls_client_cert_test.go b/pkg/middlewares/passtlsclientcert/pass_tls_client_cert_test.go index 911fd3cb7..d0a4b7735 100644 --- a/pkg/middlewares/passtlsclientcert/pass_tls_client_cert_test.go +++ b/pkg/middlewares/passtlsclientcert/pass_tls_client_cert_test.go @@ -319,7 +319,7 @@ func TestPassTLSClientCert_PEM(t *testing.T) { res := httptest.NewRecorder() req := testhelpers.MustNewRequest(http.MethodGet, "http://example.com/foo", nil) - if test.certContents != nil && len(test.certContents) > 0 { + if len(test.certContents) > 0 { req.TLS = buildTLSWith(test.certContents) } @@ -541,7 +541,7 @@ func TestPassTLSClientCert_certInfo(t *testing.T) { res := httptest.NewRecorder() req := testhelpers.MustNewRequest(http.MethodGet, "http://example.com/foo", nil) - if test.certContents != nil && len(test.certContents) > 0 { + if len(test.certContents) > 0 { req.TLS = buildTLSWith(test.certContents) } diff --git a/pkg/provider/docker/config.go b/pkg/provider/docker/config.go index 894bb1049..f47b0221f 100644 --- a/pkg/provider/docker/config.go +++ b/pkg/provider/docker/config.go @@ -408,8 +408,7 @@ func getPort(container dockerData, serverPort string) string { nat.Sort(ports, less) if len(ports) > 0 { - min := ports[0] - return min.Port() + return ports[0].Port() } return "" diff --git a/pkg/provider/ecs/config.go b/pkg/provider/ecs/config.go index 8c9362514..297abf01b 100644 --- a/pkg/provider/ecs/config.go +++ b/pkg/provider/ecs/config.go @@ -318,8 +318,7 @@ func getPort(instance ecsInstance, serverPort string) string { nat.Sort(ports, less) if len(ports) > 0 { - min := ports[0] - return min.Port() + return ports[0].Port() } return "" diff --git a/pkg/tcp/wrr_load_balancer.go b/pkg/tcp/wrr_load_balancer.go index fd1972356..69df3a254 100644 --- a/pkg/tcp/wrr_load_balancer.go +++ b/pkg/tcp/wrr_load_balancer.go @@ -65,13 +65,13 @@ func (b *WRRLoadBalancer) AddWeightServer(serverHandler Handler, weight *int) { } func (b *WRRLoadBalancer) maxWeight() int { - max := -1 + maximum := -1 for _, s := range b.servers { - if s.weight > max { - max = s.weight + if s.weight > maximum { + maximum = s.weight } } - return max + return maximum } func (b *WRRLoadBalancer) weightGcd() int { @@ -103,8 +103,8 @@ func (b *WRRLoadBalancer) next() (Handler, error) { // and allows us not to build an iterator every time we readjust weights // Maximum weight across all enabled servers - max := b.maxWeight() - if max == 0 { + maximum := b.maxWeight() + if maximum == 0 { return nil, errors.New("all servers have 0 weight") } @@ -116,7 +116,7 @@ func (b *WRRLoadBalancer) next() (Handler, error) { if b.index == 0 { b.currentWeight -= gcd if b.currentWeight <= 0 { - b.currentWeight = max + b.currentWeight = maximum } } srv := b.servers[b.index] diff --git a/pkg/udp/wrr_load_balancer.go b/pkg/udp/wrr_load_balancer.go index d057ff426..f1d01308a 100644 --- a/pkg/udp/wrr_load_balancer.go +++ b/pkg/udp/wrr_load_balancer.go @@ -61,13 +61,13 @@ func (b *WRRLoadBalancer) AddWeightedServer(serverHandler Handler, weight *int) } func (b *WRRLoadBalancer) maxWeight() int { - max := -1 + maximum := -1 for _, s := range b.servers { - if s.weight > max { - max = s.weight + if s.weight > maximum { + maximum = s.weight } } - return max + return maximum } func (b *WRRLoadBalancer) weightGcd() int { @@ -99,8 +99,8 @@ func (b *WRRLoadBalancer) next() (Handler, error) { // what interleaves servers and allows us not to build an iterator every time we readjust weights. // Maximum weight across all enabled servers - max := b.maxWeight() - if max == 0 { + maximum := b.maxWeight() + if maximum == 0 { return nil, errors.New("all servers have 0 weight") } @@ -112,7 +112,7 @@ func (b *WRRLoadBalancer) next() (Handler, error) { if b.index == 0 { b.currentWeight -= gcd if b.currentWeight <= 0 { - b.currentWeight = max + b.currentWeight = maximum } } srv := b.servers[b.index] diff --git a/script/code-gen-docker.sh b/script/code-gen-docker.sh index 0702960d6..501957c65 100755 --- a/script/code-gen-docker.sh +++ b/script/code-gen-docker.sh @@ -9,7 +9,7 @@ IMAGE_NAME="kubernetes-codegen:latest" CURRENT_DIR="$(pwd)" echo "Building codegen Docker image..." -docker build --build-arg KUBE_VERSION=v0.29.1 \ +docker build --build-arg KUBE_VERSION=v0.29.8 \ --build-arg USER="${USER}" \ --build-arg UID="$(id -u)" \ --build-arg GID="$(id -g)" \ diff --git a/script/codegen.Dockerfile b/script/codegen.Dockerfile index 315d349c1..0d36ef63f 100644 --- a/script/codegen.Dockerfile +++ b/script/codegen.Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22 +FROM golang:1.23 ARG USER=$USER ARG UID=$UID @@ -13,7 +13,7 @@ RUN go install k8s.io/code-generator/cmd/client-gen@$KUBE_VERSION RUN go install k8s.io/code-generator/cmd/lister-gen@$KUBE_VERSION RUN go install k8s.io/code-generator/cmd/informer-gen@$KUBE_VERSION RUN go install k8s.io/code-generator/cmd/deepcopy-gen@$KUBE_VERSION -RUN go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.14.0 +RUN go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.1 RUN mkdir -p $GOPATH/src/k8s.io/code-generator RUN cp -R $GOPATH/pkg/mod/k8s.io/code-generator@$KUBE_VERSION/* $GOPATH/src/k8s.io/code-generator/