Docker swarm阻止节点参与入口网络

时间:2018-03-25 10:43:25

标签: docker dns load-balancing docker-swarm docker-ingress

很可能是一个非常微不足道的问题,但我在文档中找不到有关此类功能的任何内容。正如我们从routing mesh documentation所知道的那样:

  

所有节点都参与入口路由网格。路由网格使群集中的每个节点都能够接受已发布端口上的连接,以便在群集中运行任何服务,即使节点上没有任何任务正在运行。路由网格将所有传入请求路由到可用节点上的已发布端口到活动容器。

但是,我不希望某些节点参与路由网格,但我仍然希望它们参与托管服务。

我想要实现的配置看起来有点像这样:

node-topology

我有一个服务hello-world,有三个实例,每个节点一个。

我希望在此示例中,仅node-1node-2参与外部化ingress网络。但是,当我访问10.0.0.3时,它仍会公开端口80443,因为它仍然必须在其上设置ingress网络才能运行容器{{ 1}},我希望情况不是这样。

从本质上讲,我希望能够为托管端口hello-world的服务运行容器。 80上的443,无需通过在网络浏览器中访问10.0.0.3来访问它。有没有办法配置这个?即使节点上没有运行容器,它仍然会将流量转发到正在运行的容器。

谢谢!

1 个答案:

答案 0 :(得分:2)

对您的具体问题的简短回答是否定的,没有支持的方法来选择性地启用/禁用特定覆盖网络的特定节点上的入口网络。

但根据您要求做的事情,仅使用特定节点传入流量的预期模型是控制哪些节点接收流量,而不是特定节点上的关闭端口......

在典型的6节点群中,您将管理员分离出来,以便在与DMZ不同的子网中进行保护(例如,工作人员背后的子网)。您将使用放置约束来确保您的应用工作负载仅分配给工作节点,并且这些节点是VLAN /安全组/等中的唯一节点。可以从用户/客户端流量访问。

Swarm的大多数产品设计都建议保护您的管理人员(管理容器的编排和调度,存储机密等)来防止外部流量。

为什么不将代理放在客户端可访问的网络中的工作者上,并将这些节点放在DMZ /外部LB中。

请注意,如果您只允许防火墙/ LB访问某些节点(例如只有3名工作人员),那么其他未接收外部传入流量的节点实际上没有使用其入口网络,从而实现了您想要的结果。接收外部连接的节点使用其VIP将流量直接路由到运行已发布容器端口的节点。