Isolate backend with same name on different provider
This commit is contained in:
parent
d54777236c
commit
45fe218ee2
4 changed files with 63 additions and 4 deletions
|
@ -358,3 +358,31 @@ func (s *SimpleSuite) TestMetricsPrometheusDefaultEntrypoint(c *check.C) {
|
||||||
err = try.GetRequest("http://127.0.0.1:8080/metrics", 1*time.Second, try.StatusCodeIs(http.StatusOK))
|
err = try.GetRequest("http://127.0.0.1:8080/metrics", 1*time.Second, try.StatusCodeIs(http.StatusOK))
|
||||||
c.Assert(err, checker.IsNil)
|
c.Assert(err, checker.IsNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SimpleSuite) TestMultipleProviderSameBackendName(c *check.C) {
|
||||||
|
|
||||||
|
s.createComposeProject(c, "base")
|
||||||
|
s.composeProject.Start(c)
|
||||||
|
ipWhoami01 := s.composeProject.Container(c, "whoami1").NetworkSettings.IPAddress
|
||||||
|
ipWhoami02 := s.composeProject.Container(c, "whoami2").NetworkSettings.IPAddress
|
||||||
|
file := s.adaptFile(c, "fixtures/multiple_provider.toml", struct{ IP string }{
|
||||||
|
IP: ipWhoami02,
|
||||||
|
})
|
||||||
|
defer os.Remove(file)
|
||||||
|
cmd, output := s.traefikCmd(withConfigFile(file))
|
||||||
|
defer output(c)
|
||||||
|
|
||||||
|
err := cmd.Start()
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
defer cmd.Process.Kill()
|
||||||
|
|
||||||
|
err = try.GetRequest("http://127.0.0.1:8080/api/providers", 1*time.Second, try.BodyContains("PathPrefix"))
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
|
||||||
|
err = try.GetRequest("http://127.0.0.1:8000/whoami", 1*time.Second, try.BodyContains(ipWhoami01))
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
|
||||||
|
err = try.GetRequest("http://127.0.0.1:8000/file", 1*time.Second, try.BodyContains(ipWhoami02))
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
25
integration/fixtures/multiple_provider.toml
Normal file
25
integration/fixtures/multiple_provider.toml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
defaultEntryPoints = ["http"]
|
||||||
|
|
||||||
|
debug=true
|
||||||
|
|
||||||
|
[entryPoints]
|
||||||
|
[entryPoints.http]
|
||||||
|
address = ":8000"
|
||||||
|
|
||||||
|
[api]
|
||||||
|
|
||||||
|
[docker]
|
||||||
|
endpoint = "unix:///var/run/docker.sock"
|
||||||
|
watch = true
|
||||||
|
exposedbydefault = false
|
||||||
|
|
||||||
|
[file]
|
||||||
|
[frontends]
|
||||||
|
[frontends.frontend-1]
|
||||||
|
backend = "backend-test"
|
||||||
|
[frontends.frontend-1.routes.test_1]
|
||||||
|
rule = "PathPrefix:/file"
|
||||||
|
[backends]
|
||||||
|
[backends.backend-test]
|
||||||
|
[backends.backend-test.servers.website]
|
||||||
|
url = "http://{{ .IP }}"
|
|
@ -3,3 +3,9 @@ whoami1:
|
||||||
labels:
|
labels:
|
||||||
- traefik.enable=true
|
- traefik.enable=true
|
||||||
- traefik.frontend.rule=PathPrefix:/whoami
|
- traefik.frontend.rule=PathPrefix:/whoami
|
||||||
|
- traefik.backend="test"
|
||||||
|
|
||||||
|
whoami2:
|
||||||
|
image: emilevauge/whoami
|
||||||
|
labels:
|
||||||
|
- traefik.enable=false
|
|
@ -913,7 +913,7 @@ func (s *Server) loadConfig(configurations types.Configurations, globalConfigura
|
||||||
backendsHealthCheck := map[string]*healthcheck.BackendHealthCheck{}
|
backendsHealthCheck := map[string]*healthcheck.BackendHealthCheck{}
|
||||||
errorHandler := NewRecordingErrorHandler(middlewares.DefaultNetErrorRecorder{})
|
errorHandler := NewRecordingErrorHandler(middlewares.DefaultNetErrorRecorder{})
|
||||||
|
|
||||||
for _, config := range configurations {
|
for providerName, config := range configurations {
|
||||||
frontendNames := sortedFrontendNamesForConfig(config)
|
frontendNames := sortedFrontendNamesForConfig(config)
|
||||||
frontend:
|
frontend:
|
||||||
for _, frontendName := range frontendNames {
|
for _, frontendName := range frontendNames {
|
||||||
|
@ -970,7 +970,7 @@ func (s *Server) loadConfig(configurations types.Configurations, globalConfigura
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if backends[entryPointName+frontend.Backend] == nil {
|
if backends[entryPointName+providerName+frontend.Backend] == nil {
|
||||||
log.Debugf("Creating backend %s", frontend.Backend)
|
log.Debugf("Creating backend %s", frontend.Backend)
|
||||||
|
|
||||||
roundTripper, err := s.getRoundTripper(entryPointName, globalConfiguration, frontend.PassTLSCert, entryPoint.TLS)
|
roundTripper, err := s.getRoundTripper(entryPointName, globalConfiguration, frontend.PassTLSCert, entryPoint.TLS)
|
||||||
|
@ -1191,14 +1191,14 @@ func (s *Server) loadConfig(configurations types.Configurations, globalConfigura
|
||||||
} else {
|
} else {
|
||||||
n.UseHandler(lb)
|
n.UseHandler(lb)
|
||||||
}
|
}
|
||||||
backends[entryPointName+frontend.Backend] = n
|
backends[entryPointName+providerName+frontend.Backend] = n
|
||||||
} else {
|
} else {
|
||||||
log.Debugf("Reusing backend %s", frontend.Backend)
|
log.Debugf("Reusing backend %s", frontend.Backend)
|
||||||
}
|
}
|
||||||
if frontend.Priority > 0 {
|
if frontend.Priority > 0 {
|
||||||
newServerRoute.route.Priority(frontend.Priority)
|
newServerRoute.route.Priority(frontend.Priority)
|
||||||
}
|
}
|
||||||
s.wireFrontendBackend(newServerRoute, backends[entryPointName+frontend.Backend])
|
s.wireFrontendBackend(newServerRoute, backends[entryPointName+providerName+frontend.Backend])
|
||||||
|
|
||||||
err := newServerRoute.route.GetError()
|
err := newServerRoute.route.GetError()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue