如何托管超过 65536 个服务,每个服务都需要一个不同的端口?

How to host more than 65536 services, each requiring a distinct port?

我想托管网络服务(比如说一个简单的 nodejs api 服务)

我可以在单个主机上托管的服务数量有限制,因为主机上可用的端口数只有 65536 个。

我可以想到有一个仅在主机内可见的 virtual sub-network,然后有一个位于主机上并将 API 路由到适当的网络服务的 proxy server

是否可以使用 docker 来做到这一点 - 每个服务都部署在一个容器中,代理服务器将 API 路由到适当的容器?

是否有现成的解决方案(最好是免费的)。

首先,我怀疑每个主机 运行 65536 个进程,除非它很大。无论如何,由于可用性和性能,我不推荐这样做。太多的进程将竞争相同的资源,导致大量的上下文切换。也就是说,这是可行的。

如果您的服务是 HTTP,您可以使用反向代理,如 nginx 或 traefik. If not, you can use HAProxy 用于 TCP 服务。 Traefik 是一个更好的选择,因为它执行服务发现,因此您不需要手动配置端点。

在此设置中,网络应为 bridge,这是 Docker 中的默认设置。每个容器都有自己的IP地址,所以你不会有端口耗尽的问题。