我尝试使用 traefik 在 dockers-swarm 上实现粘性 session ,但无法在同一台计算机上的两个副本上实现 session 持久性。 在我的 docker-compose.yml 中,我添加了 traefik 标签并添加了负载均衡器。下面是我的 docker-compose.yml,(虽然这里的缩进可能看起来不正确,但在实际项目中是正确的)
version: '3'
services:
web:
image: php:7.2.11-apache-stretch
ports:
- "8080:80"
volumes:
- ./code/:/var/www/html/hello/
stdin_open: true
tty: true
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: any
update_config:
delay: 2s
labels:
- "traefik.docker.network=docker-test_privnet"
- "traefik.port=80"
- "traefik.backend.loadbalancer.sticky=true"
- "traefik.frontend.rule=PathPrefix:/hello"
networks:
- privnet
loadbalancer:
image: traefik
command:
--docker \
--docker.swarmmode \
--docker.watch \
--web \
--loglevel=DEBUG
ports:
- 80:80
- 9090:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
restart_policy:
condition: any
mode: replicated
replicas: 1
update_config:
delay: 2s
placement:
constraints: [node.role == manager]
networks:
- privnet
networks:
privnet:
external: true
我错过了什么吗?
最佳答案
一些事情。
.sticky
是 deprecated支持traefik.backend.loadbalancer.stickiness=true
- 当您只有一个网络连接到该服务时,我认为您不需要使用
traefik.docker.network
设置网络。 - 确保您使用使用 Cookie 的工具进行测试,这就是粘性 session 保持粘性的方式。如果使用curl,请务必使用
-c
和-b
,如this example 中所示。 . - 我使用了我的 test Swarm setup 中的投票应用程序示例并向“投票”服务添加了粘性 session ,它在单个节点上对我有用。如果使用多节点集群,您需要在多个集群节点前面设置负载均衡才能启用粘性。
关于docker - 在 Docker Swarm 副本上使用 Traefik 进行 session 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230548/