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

Docker swarm阻止节点参与入口网络,docker,dns,load-balancing,docker-swarm,docker-ingress,Docker,Dns,Load Balancing,Docker Swarm,Docker Ingress,很可能是一个非常琐碎的问题,但我在文档中找不到任何关于这种特性的信息。正如我们从报告中了解到的: 所有节点都参与入口路由网格。路由网格使群中的每个节点能够接受群中运行的任何服务的已发布端口上的连接,即使节点上没有运行任务。路由网格将所有传入请求路由到可用节点上的已发布端口,再路由到活动容器 但是,我不希望某些节点参与路由网格,但我仍然希望它们参与托管服务 我试图实现的配置看起来有点像这样: 我有一个单独的服务,helloworld,有三个实例,每个节点上一个 在本例中,我只希望node-1和

很可能是一个非常琐碎的问题,但我在文档中找不到任何关于这种特性的信息。正如我们从报告中了解到的:

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

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


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

我有一个单独的服务,
helloworld
,有三个实例,每个节点上一个

在本例中,我只希望
node-1
node-2
参与
入口
网络的外部化。然而,当我访问
10.0.0.3
时,它仍然会暴露端口
80
443
,因为它仍然需要
入口
网络才能运行容器
hello world
,我希望情况不是这样

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


谢谢大家!

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

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

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

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

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


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

非常感谢您的回答,特别是解释swarm的产品设计!我没有充分考虑实现它的最佳方式,所以这真的很有帮助:)我建议阅读这篇博文