首页 > 解决方案 > Kubernetes L7 入口能否用于非 HTTP 端口流量?

问题描述

我有两个不同的 Minecraft 服务器容器正在运行,都设置为使用默认的 TCP 端口 25565。为了让外行可以简单地连接,我希望有一个专用于每个服务器的子域,比如 mc1.example.com 和 mc2.example .com,这样他们只输入地址并连接客户端。

对于 HTTP(s) 服务,NGINX L7 入口工作正常,但它似乎不适用于 Minecraft。NodePort 运行良好,但是每个服务器都需要不同的端口。

这也安装在裸机上 - 没有可用的云 L4 负载均衡器,并且 IP 地址池非常有限(假设不足以覆盖所有各种 Minecraft 服务器)。

是否可以修改 L7 入口以将 mc1.example.com 重定向到正确容器的端口 25565?我需要使用MetalLB 之类的东西吗?

标签: kuberneteskubernetes-ingressnginx-ingress

解决方案


这也安装在裸机上 - 没有可用的云 L4 负载均衡器,并且 IP 地址池非常有限(假设不足以覆盖所有各种 Minecraft 服务器)。

如果您没有足够的 IP 地址,MetalLB 不会帮助您,因为它只是使用 BGP 来为您提供虚拟主机,但您必须分配虚拟地址。根据你对情况和问题的描述,我敢说你正试图以便宜的方式做到这一点,而且——正如人们所预料的那样——没有资源很难工作。

那说:

据我所知,现代 Minecraft 协议中没有重定向,但有趣的是,在握手期间客户端确实发送了它尝试连接的主机名。这可能是也可能不是BungeeCord 所利用的东西,我没有研究它的源代码。

因此,理论上可以制作一个 Minecraft 特定的虚拟主机代理,因为已经有相当多的协议实现。但是,可能必须研究协议中的所有消息以确保它们包含对实际连接 ID 的引用,否则您将不得不仅使用(client-ip, client-port)标识元组,从而有效地将您的服务器变成反向 NAT/PAT 实现。这可能没问题,请注意。


推荐阅读