Docker Swarm Routing Mesh 双节点集群服务访问与端口问题咨询
Docker Swarm集群问题解答
问题1:通过Node1访问app1服务,请求是否会被路由到Node2上运行的app1容器?
会。Docker Swarm默认启用ingress路由网格,当你访问集群任意节点的已发布服务端口时,请求会自动负载均衡到所有正常运行的服务实例上,和实例所在的节点无关。
你配置的app1部署模式为global,所以Node1和Node2上都会运行app1的实例,因此从Node1访问8080端口时,请求有概率被路由到Node2上的app1容器。如果需要固定请求的调度节点,可以配置会话亲和性策略调整路由规则。
问题2:app2仅部署在Node1节点上,通过Node2的9080端口发起访问,能否正常访问到app2服务?
可以正常访问。ingress路由网格会让集群所有节点都监听服务发布的端口,就算当前被访问的节点上没有运行对应的服务实例,也会自动将请求转发到有对应实例的节点上。只要你提到的Swarm集群默认通信端口正常开放,这个访问链路就是通的。
问题3:除官方标注的集群端口外,是否还有其他端口需要开放?例如app1需要调用app2的场景
分两种场景判断:
- 如果app1和app2加入了同一个Swarm overlay网络,不需要额外开放业务端口。同一个overlay网络内的服务可以直接互相通信,跨节点的流量会通过封装的overlay网络传输,走默认开放的UDP 4789端口即可,无需将业务端口暴露到宿主机网络层面。
- 如果app1通过宿主机IP+端口的形式调用app2,或者有集群外的客户端需要访问这两个业务服务,就需要在对应节点的防火墙中开放8080、9080这类业务端口。
内容的提问来源于stack exchange,提问作者Christopher Liu
相关产品推荐
相关产品推荐

