2

很可能是一个非常微不足道的问题,但我在文档中找不到有关此类功能的任何内容。从路由网格文档中我们知道:

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

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


我试图实现的配置看起来有点像这样:

节点拓扑

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

在这个例子中,我只想node-1node-2参与外部化ingress网络。但是,当我访问时10.0.0.3,它仍然会暴露端口80443因为它仍然必须有ingress网络才能运行容器hello-world,我不希望这种情况发生。

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

谢谢!

4

1 回答 1

2

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

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

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

Swarm 的大多数产品设计都建议保护您的管理器(管理容器的编排和调度、存储机密等)免受外部流量的影响。

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

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

于 2018-03-25T22:39:40.843 回答