如何仅处理具有公开该端口服务的Docker Swarm节点的端口流量?

时间:2019-04-02 13:58:02

标签: docker docker-swarm

如果我们想象Docker Swarm由节点A,B和C组成。 如果我们假设我们运行一个服务的Docker Stack(出于示例目的),该服务将扩展到2个实例,并且该服务公开了主机的端口80。

如何确保点击量达到

http://A:80
http://B:80
http://C:80

始终在实时Docker实例上运行。

鉴于该服务有2个实例,总共有3个节点,因此总会有至少一个不具有该服务的节点,因此它不会暴露端口80(我认为)。

1 个答案:

答案 0 :(得分:1)

将编排与群模式是您现在不得在群中有关单个节点。相反,Swarm在services上的节点->上的抽象级别更高。

因此,您可以告诉swarm由哪些节点组成,拥有哪些服务以及要为每个服务在swarm中运行多少个容器实例。配置完后,决定/知道哪个容器在哪个节点上运行是swarm的工作。再说一次:您不在乎单个节点。

所以问题不在于如何制作

http://A:80
http://B:80
http://C:80

(重新)路由到正确/有效的节点(使用暴露的端口运行相应的容器)

因为您唯一需要知道的就是服务的名称。所以你只会打电话

http://myservice:80

然后群模式将决定将请求转发到哪个节点(http://A:80http://B:80http://C:80)。如果您有3个节点,则1个服务和该服务群的2个副本将确保不会将任何请求转发到没有容器运行的节点,因为它知道只有2个副本,并且知道这些实例在哪些节点上运行。