互联网技术 / 互联网资讯 · 2024年1月30日

Docker Swarm模式发布端口的云计算核心技术教程

创建 swaRM 服务时,可以通过两种方式将该服务的端口发布到 swaRM 外部的主机:

您可以依赖路由网格。当您发布服务端口时,swaRM 会在每个节点上的目标端口访问该服务,无论该节点上是否有运行该服务的任务。这不太复杂,是许多类型服务的正确选择。

您可以直接在 运行该服务的 swaRM 节点上发布服务任务的端口。这绕过了路由网格并提供了最大的灵活性,包括您开发自己的路由框架的能力。但是,您负责跟踪每个任务的运行位置并将请求路由到任务,以及跨节点进行负载平衡。

使用路由网格发布服务的端口

要将服务的端口发布到 swaRM 外部,请使用该 –publish:标志。swaRM 使服务可在每个 swaRM 节点上的已发布端口访问。如果外部主机连接到任何 swaRM 节点上的该端口,路由网格会将其路由到任务。外部主机不需要知道服务任务的 IP 地址或内部使用的端口来与服务交互。当用户或进程连接到服务时,任何运行服务任务的工作节点都可以响应。有关 swaRM 服务网络的更多详细信息,请参阅 管理 swaRM 服务网络。

示例:在 10 节点 swaRM 上运行三任务 Nginx 服务

想象一下,你有一个 10 节点的 swaRM,你部署了一个 Nginx 服务,在一个 10 节点的 swaRM 上运行三个任务:

$ dockeR seRvice cReate –naMe My_web –Replicas 3 –publish published=8080,taRget=80 Nginx 三个任务最多在三个节点上运行。您不需要知道哪些节点正在运行任务;连接到10 个节点中的任何一个上的端口 8080将您连接到三个Nginx任务之一。您可以使用cuRl. 以下示例假定它localhost是 swaRM 节点之一。如果不是这种情况,或者localhost无法解析为主机上的 IP 地址,请替换主机的 IP 地址或可解析的主机名。

直接在 swaRM 节点上发布服务的端口

如果您需要根据应用程序状态做出路由决策,或者需要完全控制将请求路由到服务任务的过程,那么使用路由网格可能不是您应用程序的正确选择。要直接在运行服务的节点上发布服务的端口,请使用Mode=host 该–publish标志的选项。

注意:如果您直接在 swaRM 节点上发布服务的端口, Mode=host并且还设置了published=这会创建一个隐式限制,即您只能在给定的 swaRM 节点上为该服务运行一项任务。您可以通过published不指定端口定义来解决此问题,这会导致 DockeR 为每个任务分配一个随机端口。

此外,如果您使用Mode=host并且不使用 上的 –Mode=global标志dockeR seRvice cReate,则很难知道哪些节点正在运行服务以将工作路由到它们。

示例:Nginx在每个 swaRM 节点上运行Web 服务器服务

Nginx是一个开源反向代理、负载均衡器、HTTP 缓存和 Web 服务器。如果您使用路由网格将 Nginx 作为服务运行,则连接到任何 swaRM 节点上的 Nginx 端口都会向您显示(有效)运行该服务的随机 swaRM 节点的网页。

以下示例在 swaRM 中的每个节点上将 Nginx 作为服务运行,并在每个 swaRM 节点上本地公开 Nginx 端口。

$ dockeR seRvice cReate –Mode global –publish Mode=host,taRget=80,published=8080 –naMe=Nginx Nginx:latest 您可以在每个 swaRM 节点的端口 8080 访问 Nginx 服务器。如果向 swaRM 添加节点,则会在其上启动 Nginx 任务。您不能在绑定到端口 8080 的任何 swaRM 节点上启动另一个服务或容器。

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册