尝试使用 Nginx 和 HA-Proxy,但它们似乎都不能在 SWARM 模式下正常工作。然后我在 Docker Swarm 中使用了 Traefik,它帮了我大忙。唯一的限制是 Traefik 应该在管理节点上运行,因为它需要知道添加或删除的新工作节点。即使您扩大服务、添加节点等,也不需要重新启动。
我已经使用最新的Docker compose 版本 3测试了配置,并使用Docker stack deploy进行了部署。分步说明在这里
首先,您需要创建一个 docker-compose.yml(版本 3)并添加负载均衡器 Traefik Image。这是它的样子
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]
然后是您需要会话粘性的图像
whoami:
image: tutum/hello-world
networks:
- net
ports:
- "80"
deploy:
restart_policy:
condition: any
mode: replicated
replicas: 5
placement:
constraints: [node.role == worker]
update_config:
delay: 2s
labels:
- "traefik.docker.network=test_net"
- "traefik.port=80"
- "traefik.frontend.rule=PathPrefix:/hello;"
- "traefik.backend.loadbalancer.sticky=true"
您可以点击此链接获取详细说明。