作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们想象Docker Swarm由节点A、B、C组成。如果我们想象我们运行一个单一服务的 Docker Stack(为了示例),扩展到 2 个实例并且该服务公开主机的端口 80。
我如何确保命中的所有流量:
http://A:80
http://B:80
http://C:80
始终登陆实时 Docker 实例。
假设有 2 个服务实例和总共 3 个节点,总会有至少一个节点没有服务,因此它不会暴露端口 80(我假设)。
最佳答案
使用编排的一个好处,例如群模式是你现在不能在你的群中做任何关于单个节点的事情。相反,swarm 在比节点更高的抽象级别上工作 --> 在 services
上。
因此,您告诉 swarm 它由哪些节点组成、您拥有哪些服务以及您希望在 swarm 中为每个服务运行多少个容器实例。配置后,swarm 的工作是决定/知道哪个容器在哪个节点上运行。同样:您不关心单个节点。
所以问题不是如何制作
http://A:80
http://B:80
http://C:80
(重新)路由到正确/有效的节点(运行具有公开端口的相应容器)
因为您唯一需要知道的就是您的服务名称。所以你只会打电话
http://myservice:80
然后 swarm 模式将决定将请求转发到哪个节点(http://A:80
或 http://B:80
或 http://C:80
)。如果你有 3 个节点,该服务群的 1 个服务和 2 个副本将确保没有请求被转发到没有容器运行的节点,因为它知道只有 2 个副本并且它知道这些实例在哪些节点上跑。
关于docker - 如何仅处理到具有公开该端口的服务的 Docker Swarm 节点的端口流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476658/
我是一名优秀的程序员,十分优秀!