更新镜像后部署到docker swarm集群,新容器成功启动,旧容器关闭,但访问时请求一会被路由到新容器,一会被路由到旧容器,而神奇的是已处于Shutdown状态的旧容器依然可以正常访问。。。
docker版本是 Docker version 17.12.0-ce, build c97c6d6
,路由用的是 docker flow proxy
原来是dudu大大的, 都不敢回答了, 据说一般不建议用最新的docker版本, 另外想请教下dudu docker flow proxy你们是用在swarm环境还是k8s环境?
用在 swarm 环境
@dudu: 我看docker flow proxy里面用的是haproxy, 当用docker service scale xxx=x扩容的时候,新的container能自动注册到haproxy的backend里面?
@dudu: 因为这里面涉及到监控docker swarm 的事件,需要监听整个集群的事件,但是我看到配置里面写的是unix.socket地址,这个据我了解只能监听到当前node的事件, 所以才有了这样的疑问.
@DukeCheng: 能
@dudu: OK, 我也试试,我现在Nginx反向代理跟Haproxy方向代理都测试了,性能可以达到基本一致,不相上下.
@dudu: 你们在使用docker flow proxy的时候,前端请求的真实IP怎么获取到? 我分析了docker flow proxy中的haproxy 有配置X-Forward-For, 但是这个IP依旧是Docker的内部IP, 而不是用户请求的真实IP.
@DukeCheng: 是 X-Forwarded-For
@dudu: 是这个,但是是Docker的内部10.*的IP, 这个IP理论上应该是我外部请求的客户端的IP
@DukeCheng: 我们用了阿里云负载均衡,X-Forwarded-For
请求头是负载均衡设置的
@dudu: 一个请求处理就是从阿里的LB=>DF Proxy=>Docker Swarm集群的LB ?
@DukeCheng: 是的,但现在我们已经不用docker flow proxy,改用nginx
@dudu:
1. 是什么原因放弃了df proxy?
2. 另外nginx是放在docker swarm内部还是外部?
@DukeCheng:
@dudu: 是否有发布相关分享的文章,可以参考的?
@DukeCheng: 见 优化自建 docker swarm 集群的部署