Docker1.12 swarm集群的LB方案和应用原本的LB方案的取舍?


Docker1.12的swarm中自带有基于IPVS的负载均衡模块,基于顺序的LB
假定应用是基于Dubbo的应用,在client端带有丰富的LB策略

那此时有如下疑问?
1. 在swarm模式下,怎么采用应用原本自有的LB策略?
2. 其实要解决问题1,是否应该从服务发现入手,绕过swarm的服务发现,才可达到自主的LB策略应用,而此是swarm自带的overlay网络下,dubbo应用的对外暴露,或是网络设置应是怎样的?

图: swarm overlay网络下,dubbo应用的对外暴露的地址,外部不可见问题
docker service create --name lv --replicas 3 lv


QQ截图20161104104319.png

docker service create --name lv -p 20880:20880 --replicas 3 lv


22221.png
已邀请:

babywaiting

赞同来自:


谈一下个人浅见,因为我对swarm和dubbo还不怎么了解。
关键点是要解决容器集群外的应用能够访问到容器集群内的应用。
如果将基于dubbo的A应用部署到swarm中,同时要保证其他传统部署(部署到x86服务器或者vm上)的B应用,还有已经容器化的基于dubbo的C应用都能够正常访问到A,只能使用dubbo的服务发现和LB。
解决方法是解决部署到swarm中应用容器,在注册的时候,注册一个容器集群外部可以直接访问到的IP。
这在dcos中比较好解决,因为marathon可以把容器所在的宿主机的ip和nat端口通过环境变量的方式传递给容器。在swarm和k8s中处理起来可能就比较麻烦。
在网络上,放弃overlay,采用MACvlan可能也是个解决方法。

要回复问题请先登录注册