swarm 集群环境下如何实现服务间调用


在swarm 中假设有2个服务,服务A,服务B,每个服务都有3个实例。

docker service create --name A--replicas 3 -p 8080:8080 image。。
此时访只要访问宿主机的8080 端口,就可以负载均衡到A的三个实例中

如果A服务需要访问B 服务协调工作,那么如何访问?如果是单实例就好办,但是现在A和B 都有三个实例。
有没有什么办法将服务B的三个实例抽象为一个固定的地址(服务A 的三个实例就抽象为了一个固定地址,即宿主机的IP:8080)

我有两个想法
1 启动一个nginx 做负载均衡,将服务B 的三个地址配置到nginx里,服务A 访问nginx 再负载均衡到服务B的三个实例

2 模仿服务A,将服务B 的端口也映射到宿主机,然后服务A 去访问宿主机的端口然后负载均衡到B的三个实例

想法1 当B的实例挂了重启,那配置就没用了
想法2 配置貌似也挺麻烦的,容器还要访问宿主机然后再从宿主机路由到容器,,,

如果是用Kubernetes 定义一个service ,访问service ip 就可以负载均衡给三个实例

那么swarm 有类似的什么方案嘛?

求大牛支招!
已邀请:

田浩浩 - wizmacau developer

赞同来自: justinmjc


放在同一个network里面, 实例间用 service name 访问 (已测试 可以ping到)

要回复问题请先登录注册