diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index a33c8575f..bd06a3124 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "path/filepath" + "sort" "strings" "time" @@ -191,7 +192,7 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err managerFactory := service.NewManagerFactory(*staticConfiguration, routinesPool, metricsRegistry) routerFactory := server.NewRouterFactory(*staticConfiguration, managerFactory, tlsManager, chainBuilder) - var eps []string + var defaultEntryPoints []string for name, cfg := range staticConfiguration.EntryPoints { protocol, err := cfg.GetProtocol() if err != nil { @@ -200,15 +201,17 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err } if protocol != "udp" { - eps = append(eps, name) + defaultEntryPoints = append(defaultEntryPoints, name) } } + sort.Strings(defaultEntryPoints) + watcher := server.NewConfigurationWatcher( routinesPool, providerAggregator, time.Duration(staticConfiguration.Providers.ProvidersThrottleDuration), - eps, + defaultEntryPoints, ) watcher.AddListener(func(conf dynamic.Configuration) { diff --git a/integration/testdata/rawdata-ingress.json b/integration/testdata/rawdata-ingress.json index ddb569ce0..b8b50a8d6 100644 --- a/integration/testdata/rawdata-ingress.json +++ b/integration/testdata/rawdata-ingress.json @@ -30,8 +30,8 @@ }, "test-ingress-default-whoami-test-whoami@kubernetes": { "entryPoints": [ - "web", - "traefik" + "traefik", + "web" ], "service": "default-whoami-http", "rule": "Host(`whoami.test`) \u0026\u0026 PathPrefix(`/whoami`)", @@ -43,8 +43,8 @@ }, "test-ingress-https-default-whoami-test-https-whoami@kubernetes": { "entryPoints": [ - "web", - "traefik" + "traefik", + "web" ], "service": "default-whoami-http", "rule": "Host(`whoami.test.https`) \u0026\u0026 PathPrefix(`/whoami`)", diff --git a/pkg/server/aggregator.go b/pkg/server/aggregator.go index a325f6e57..e23ee8f10 100644 --- a/pkg/server/aggregator.go +++ b/pkg/server/aggregator.go @@ -7,7 +7,7 @@ import ( "github.com/containous/traefik/v2/pkg/tls" ) -func mergeConfiguration(configurations dynamic.Configurations, entryPoints []string) dynamic.Configuration { +func mergeConfiguration(configurations dynamic.Configurations, defaultEntryPoints []string) dynamic.Configuration { conf := dynamic.Configuration{ HTTP: &dynamic.HTTPConfiguration{ Routers: make(map[string]*dynamic.Router), @@ -37,8 +37,8 @@ func mergeConfiguration(configurations dynamic.Configurations, entryPoints []str if len(router.EntryPoints) == 0 { log.WithoutContext(). WithField(log.RouterName, routerName). - Debugf("No entryPoint defined for this router, using the default one(s) instead: %+v", entryPoints) - router.EntryPoints = entryPoints + Debugf("No entryPoint defined for this router, using the default one(s) instead: %+v", defaultEntryPoints) + router.EntryPoints = defaultEntryPoints } conf.HTTP.Routers[provider.MakeQualifiedName(pvd, routerName)] = router @@ -120,7 +120,9 @@ func applyModel(cfg dynamic.Configuration) dynamic.Configuration { rts := make(map[string]*dynamic.Router) - for name, router := range cfg.HTTP.Routers { + for name, rt := range cfg.HTTP.Routers { + router := rt.DeepCopy() + eps := router.EntryPoints router.EntryPoints = nil diff --git a/pkg/server/configurationwatcher.go b/pkg/server/configurationwatcher.go index 4d457beb5..8bca826cf 100644 --- a/pkg/server/configurationwatcher.go +++ b/pkg/server/configurationwatcher.go @@ -18,7 +18,7 @@ import ( type ConfigurationWatcher struct { provider provider.Provider - entryPoints []string + defaultEntryPoints []string providersThrottleDuration time.Duration @@ -38,7 +38,7 @@ func NewConfigurationWatcher( routinesPool *safe.Pool, pvd provider.Provider, providersThrottleDuration time.Duration, - entryPoints []string, + defaultEntryPoints []string, ) *ConfigurationWatcher { watcher := &ConfigurationWatcher{ provider: pvd, @@ -47,7 +47,7 @@ func NewConfigurationWatcher( providerConfigUpdateMap: make(map[string]chan dynamic.Message), providersThrottleDuration: providersThrottleDuration, routinesPool: routinesPool, - entryPoints: entryPoints, + defaultEntryPoints: defaultEntryPoints, } currentConfigurations := make(dynamic.Configurations) @@ -143,7 +143,7 @@ func (c *ConfigurationWatcher) loadMessage(configMsg dynamic.Message) { c.currentConfigurations.Set(newConfigurations) - conf := mergeConfiguration(newConfigurations, c.entryPoints) + conf := mergeConfiguration(newConfigurations, c.defaultEntryPoints) conf = applyModel(conf) for _, listener := range c.configurationListeners {