Fix sticky sessions Docker/Marathon labels

This commit is contained in:
Emile Vauge 2016-09-28 13:28:20 +02:00
parent df225d9170
commit 291c3b6dbc
No known key found for this signature in database
GPG key ID: D808B4C167352E59
5 changed files with 64 additions and 72 deletions

100
glide.lock generated
View file

@ -1,3 +1,4 @@
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
hash: c0ac205a859d78847e21d3cd63f427ffba985755c6ae84373e4a20364ba39b05
updated: 2016-09-28T16:50:04.352639437+01:00
@ -10,15 +11,15 @@ hash: f7ade4acdfd43efe6a0c1a1444776dd02d556e40bf122a495ca2fc226c880d0b
updated: 2016-08-10T11:55:40.961089942-04:00
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
hash: b82175c1aafff6c4e98c8ac4baea3832895c9600beac445c10af4c004982ef05
updated: 2016-09-28T13:05:02.84360542+02:00
>>>>>>> Fix sticky sessions Docker/Marathon labels
imports:
- name: github.com/abbot/go-http-auth
version: cb4372376e1e00e9f6ab9ec142e029302c9e7140
- name: github.com/boltdb/bolt
<<<<<<< HEAD
version: fff57c100f4dea1905678da7e90d92429dff2904
=======
version: 94c8db596809690a3f7046fa83c7b0dda13a3222
>>>>>>> 2848e10... glide up
- name: github.com/BurntSushi/toml
version: 99064174e013895bbd9b025c31100bd1d9b590ca
- name: github.com/BurntSushi/ty
@ -32,34 +33,13 @@ imports:
- name: github.com/codegangsta/cli
version: 1efa31f08b9333f1bd4882d61f9d668a70cd902e
- name: github.com/codegangsta/negroni
<<<<<<< HEAD
version: 3f7ce7b928e14ff890b067e5bbbc80af73690a9c
=======
version: 6edff56736fa7bd546812f149e8cdaae61e5a38f
>>>>>>> 2848e10... glide up
- name: github.com/containous/flaeg
version: a731c034dda967333efce5f8d276aeff11f8ff87
- name: github.com/containous/mux
version: a819b77bba13f0c0cbe36e437bc2e948411b3996
- name: github.com/containous/staert
<<<<<<< HEAD
version: 044bdfee6c8f5e8fb71f70d5ba1cf4cb11a94e97
=======
version: 21164fe201578bea96317a87752953ea5d9dc6d1
- name: github.com/containous/traefik
version: 4cd08e88f6baf56f33163077c1e226691d56bfa9
subpackages:
- acme
- autogen
- middlewares
- provider
- safe
- types
- version
- provider/k8s
- integration/utils
- mocks
>>>>>>> 2848e10... glide up
- name: github.com/coreos/etcd
version: 1c9e0a0e33051fed6c05c141e6fcbfe5c7f2a899
subpackages:
@ -67,10 +47,11 @@ imports:
- pkg/pathutil
- pkg/types
- name: github.com/davecgh/go-spew
version: 6d212800a42e8ab5c146b8ace3490ee17e5225f9
version: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d
subpackages:
- spew
- name: github.com/docker/distribution
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
version: 99cb7c0946d2f5a38015443e515dc916295064d7
=======
@ -80,6 +61,9 @@ imports:
version: 9000745401d186602c2ae63ffca12ed4233a968b
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
version: 9000745401d186602c2ae63ffca12ed4233a968b
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- context
- digest
@ -159,21 +143,13 @@ imports:
- types/time
- types/versions
- name: github.com/docker/go-connections
<<<<<<< HEAD
version: 988efe982fdecb46f01d53465878ff1f2ff411ce
=======
version: 0bad1a3951398f88ef4dd75fdb42af374430be89
>>>>>>> 2848e10... glide up
subpackages:
- nat
- sockets
- tlsconfig
- name: github.com/docker/go-units
<<<<<<< HEAD
version: f2145db703495b2e525c59662db69a7344b00bb8
=======
version: eb879ae3e2b84e2a142af415b679ddeda47ec71c
>>>>>>> 2848e10... glide up
- name: github.com/docker/libcompose
version: d1876c1d68527a49c0aac22a0b161acc7296b740
subpackages:
@ -192,7 +168,7 @@ imports:
- version
- yaml
- name: github.com/docker/libkv
version: 3fce6a0f26e07da3eac45796a8e255547a47a750
version: aabc039ad04deb721e234f99cd1b4aa28ac71a40
subpackages:
- store
- store/boltdb
@ -202,16 +178,13 @@ imports:
- name: github.com/donovanhide/eventsource
version: fd1de70867126402be23c306e1ce32828455d85b
- name: github.com/elazarl/go-bindata-assetfs
<<<<<<< HEAD
version: 9a6736ed45b44bf3835afeebb3034b57ed329f3e
=======
version: e1a2a7ec64b07d04ac9ebb072404fe8b7b60de1b
>>>>>>> 2848e10... glide up
- name: github.com/gambol99/go-marathon
version: a558128c87724cd7430060ef5aedf39f83937f55
- name: github.com/go-check/check
version: 11d3bc7aa68e238947792f30573146a3231fc0f1
- name: github.com/gogo/protobuf
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
version: 89f1976ff373a3e549675d2f212c10f98b6c6316
=======
@ -221,6 +194,9 @@ imports:
version: a4cceea7a401a73fefafd1a21fedbd4694124a82
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
version: a4cceea7a401a73fefafd1a21fedbd4694124a82
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- proto
- name: github.com/golang/glog
@ -230,8 +206,9 @@ imports:
subpackages:
- query
- name: github.com/gorilla/context
version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42
version: aed02d124ae4a0e94fea4541c8effd05bf0c8296
- name: github.com/hashicorp/consul
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
version: d5b7530ec593f1ec2a8f8a7c145bcadafa88b572
=======
@ -241,11 +218,15 @@ imports:
version: d6aa033793a68b509d336b3bac6ebe36ac0ef818
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
version: d6aa033793a68b509d336b3bac6ebe36ac0ef818
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- api
- name: github.com/hashicorp/go-cleanhttp
version: ad28ea4487f05916463e2423a55166280e8254b5
- name: github.com/hashicorp/serf
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
version: b7a120a5fc494f6dd5e858f42fd0fd4022d6320f
=======
@ -255,6 +236,9 @@ imports:
version: a01569795d12afbdb3698739b614e057ee289fa0
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
version: a01569795d12afbdb3698739b614e057ee289fa0
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- coordinate
- name: github.com/jarcoal/httpmock
@ -306,6 +290,7 @@ imports:
- name: github.com/ogier/pflag
version: 45c278ab3607870051a2ea9040bb85fcb8557481
- name: github.com/opencontainers/runc
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
<<<<<<< 3d7c44735a6fe792ad7fc9f074034a260e53bb0d
version: d9fec4c63b089ddfc267194ecb6cda58a13f072c
=======
@ -317,12 +302,13 @@ imports:
- name: github.com/parnurzeal/gorequest
version: 29ced6f360a5ac3823a3675b4e29fbab336cc186
=======
=======
>>>>>>> Fix sticky sessions Docker/Marathon labels
version: 0f764571384a3ff16c6fed25ace5b7c83f0f0379
subpackages:
- libcontainer/user
- name: github.com/parnurzeal/gorequest
version: e213a02fb0082d41e66996deeaab5ae96039d913
>>>>>>> 2848e10... glide up
- name: github.com/pmezard/go-difflib
version: d8ed2627bdf02c080bf22230dbb337003b7aba2d
subpackages:
@ -330,17 +316,13 @@ imports:
- name: github.com/ryanuber/go-glob
version: 572520ed46dbddaed19ea3d9541bdd0494163693
- name: github.com/samuel/go-zookeeper
version: 87e1bca4477a3cc767ca71be023ced183d74e538
version: e64db453f3512cade908163702045e0f31137843
subpackages:
- zk
- name: github.com/Sirupsen/logrus
version: 3ec0642a7fb6488f65b06f9040adc67e3990296a
version: a283a10442df8dc09befd873fab202bf8a253d6a
- name: github.com/streamrail/concurrent-map
<<<<<<< HEAD
version: 8bf1e9bacbf65b10c81d0f4314cf2b1ebef728b5
=======
version: 430cc620f036386dacc40e603921cc607f37366b
>>>>>>> 2848e10... glide up
- name: github.com/stretchr/objx
version: cbeaeb16a013161a98496fad62933b1d21786672
- name: github.com/stretchr/testify
@ -357,11 +339,7 @@ imports:
subpackages:
- codec
- name: github.com/unrolled/render
<<<<<<< HEAD
version: 3f4913244021dede105b62caecfb01f0c1eebeda
=======
version: 7bc415efc1b94ad17b0fc642cb50b3e2465027e7
>>>>>>> 2848e10... glide up
- name: github.com/vdemeester/docker-events
version: be74d4929ec1ad118df54349fda4b0cba60f849b
- name: github.com/vdemeester/shakers
@ -383,7 +361,11 @@ imports:
- name: github.com/vulcand/route
version: cb89d787ddbb1c5849a7ac9f79004c1fd12a4a32
- name: github.com/vulcand/vulcand
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
version: 643ca8acff8386e3b276f6feb8ba9b5893dbc4a2
=======
version: 28a4e5c0892167589737b95ceecbcef00295be50
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- conntracker
- plugin
@ -413,6 +395,7 @@ imports:
- name: gopkg.in/fsnotify.v1
version: a8a77c9133d2d6fd8334f3260d06f60e8d80a5fb
- name: gopkg.in/mgo.v2
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
version: 22287bab4379e1fbf6002fb4eb769888f3fb224c
subpackages:
- bson
@ -426,6 +409,13 @@ imports:
version: a3927f83df1b1516f9e9dec71839c93e6bcf1db0
>>>>>>> 2848e10... glide up
>>>>>>> glide up
=======
version: 29cc868a5ca65f401ff318143f9408d02f4799cc
subpackages:
- bson
- name: gopkg.in/square/go-jose.v1
version: a3927f83df1b1516f9e9dec71839c93e6bcf1db0
>>>>>>> Fix sticky sessions Docker/Marathon labels
subpackages:
- cipher
- json
@ -443,7 +433,11 @@ testImports:
- name: github.com/libkermit/docker-check
version: cbe0ef03b3d23070eac4d00ba8828f2cc7f7e5a3
- name: github.com/spf13/pflag
<<<<<<< df225d9170aa2efb251cb74f0a58b2952315fe2b
version: 08b1a584251b5b62f458943640fc8ebd4d50aaa5
=======
version: 5644820622454e71517561946e3d94b9f9db6842
>>>>>>> Fix sticky sessions Docker/Marathon labels
- name: github.com/vbatts/tar-split
version: bd4c5d64c3e9297f410025a3b1bd0c58f659e721
subpackages:
@ -455,8 +449,4 @@ testImports:
- name: github.com/xeipuuv/gojsonreference
version: e02fc20de94c78484cd5ffb007f8af96be030a45
- name: github.com/xeipuuv/gojsonschema
<<<<<<< HEAD
version: 00f9fafb54d2244d291b86ab63d12c38bd5c3886
=======
version: e4f482d0deea5bfc0522ab4582c5fdbd2edc98ad
>>>>>>> 2848e10... glide up

View file

@ -261,26 +261,20 @@ func (provider *Docker) loadDockerConfig(containersInspected []dockerData) *type
return provider.containerFilter(container)
}, containersInspected).([]dockerData)
// sticky backends
stickycontainers := map[string][]dockerData{}
frontends := map[string][]dockerData{}
for _, container := range filteredContainers {
frontendName := provider.getFrontendName(container)
frontends[frontendName] = append(frontends[frontendName], container)
frontends[frontendName] = append(frontends[frontendName], container)
stickycontainers[provider.getBackend(container)] = container
}
templateObjects := struct {
Containers []dockerData
Frontends map[string][]dockerData
StickyContainers map[string][]dockerData
Domain string
Containers []dockerData
Frontends map[string][]dockerData
Domain string
}{
filteredContainers,
frontends,
stickycontainers,
provider.Domain,
}
@ -299,7 +293,9 @@ func (provider *Docker) hasCircuitBreakerLabel(container dockerData) bool {
}
func (provider *Docker) hasLoadBalancerLabel(container dockerData) bool {
if _, err := getLabel(container, "traefik.backend.loadbalancer.method"); err != nil {
_, errMethod := getLabel(container, "traefik.backend.loadbalancer.method")
_, errSticky := getLabel(container, "traefik.backend.loadbalancer.sticky")
if errMethod != nil && errSticky != nil {
return false
}
return true
@ -447,8 +443,8 @@ func (provider *Docker) getWeight(container dockerData) string {
return "1"
}
func (provider *Docker) getSticky(container dockertypes.ContainerJSON) string {
if _, err := getLabel(container, "traefik.stickysession"); err == nil {
func (provider *Docker) getSticky(container dockerData) string {
if _, err := getLabel(container, "traefik.backend.loadbalancer.sticky"); err == nil {
return "true"
}
return "false"

View file

@ -349,7 +349,7 @@ func (provider *Marathon) getProtocol(task marathon.Task, applications []maratho
}
func (provider *Marathon) getSticky(application marathon.Application) string {
if sticky, err := provider.getLabel(application, "traefik.backend.sticky"); err == nil {
if sticky, err := provider.getLabel(application, "traefik.backend.loadbalancer.sticky"); err == nil {
return sticky
}
return "false"
@ -419,7 +419,9 @@ func (provider *Marathon) hasCircuitBreakerLabels(application marathon.Applicati
}
func (provider *Marathon) hasLoadBalancerLabels(application marathon.Application) bool {
if _, err := provider.getLabel(application, "traefik.backend.loadbalancer.method"); err != nil {
_, errMethod := provider.getLabel(application, "traefik.backend.loadbalancer.method")
_, errSticky := provider.getLabel(application, "traefik.backend.loadbalancer.sticky")
if errMethod != nil && errSticky != nil {
return false
}
return true

View file

@ -559,7 +559,7 @@ func (server *Server) loadConfig(configurations configs, globalConfiguration Glo
log.Debugf("Creating load-balancer drr")
rebalancer, _ := roundrobin.NewRebalancer(rr, roundrobin.RebalancerLogger(oxyLogger))
if stickysession {
log.Debugf("... setting to sticky session with cookie named %v", cookiename)
log.Debugf("Sticky session with cookie %v", cookiename)
rebalancer, _ = roundrobin.NewRebalancer(rr, roundrobin.RebalancerLogger(oxyLogger), roundrobin.RebalancerStickySession(sticky))
}
lb = rebalancer
@ -581,7 +581,7 @@ func (server *Server) loadConfig(configurations configs, globalConfiguration Glo
case types.Wrr:
log.Debugf("Creating load-balancer wrr")
if stickysession {
log.Debugf("... setting to sticky session with cookie named %v", cookiename)
log.Debugf("Sticky session with cookie %v", cookiename)
rr, _ = roundrobin.New(saveBackend, roundrobin.EnableStickySession(sticky))
}
lb = rr

View file

@ -15,7 +15,11 @@
amount = {{getMaxConnAmount . }}
extractorfunc = "{{getMaxConnExtractorFunc . }}"
{{end}}
[backends.backend-{{getBackend .}}.servers.server-{{.Name | replace "/" "" | replace "." "-"}}]
url = "{{getProtocol .}}://{{getIPAddress .}}:{{getPort .}}"
weight = {{getWeight .}}
{{end}}
[frontends]{{range $frontend, $containers := .Frontends}}
[frontends."frontend-{{$frontend}}"]{{$container := index $containers 0}}