kubernetes - 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 之类的东西吗?
解决方案
这也安装在裸机上 - 没有可用的云 L4 负载均衡器,并且 IP 地址池非常有限(假设不足以覆盖所有各种 Minecraft 服务器)。
如果您没有足够的 IP 地址,MetalLB 不会帮助您,因为它只是使用 BGP 来为您提供虚拟主机,但您必须分配虚拟地址。根据你对情况和问题的描述,我敢说你正试图以便宜的方式做到这一点,而且——正如人们所预料的那样——没有资源很难工作。
那说:
据我所知,现代 Minecraft 协议中没有重定向,但有趣的是,在握手期间客户端确实发送了它尝试连接的主机名。这可能是也可能不是BungeeCord 所利用的东西,我没有研究它的源代码。
因此,理论上可以制作一个 Minecraft 特定的虚拟主机代理,因为已经有相当多的协议实现。但是,可能必须研究协议中的所有消息以确保它们包含对实际连接 ID 的引用,否则您将不得不仅使用(client-ip, client-port)
标识元组,从而有效地将您的服务器变成反向 NAT/PAT 实现。这可能没问题,请注意。
推荐阅读
- python - 计算给定 3 个或更多高斯的概率
- swift - 来自 url 的数据不会加载。虽然网址是正确的
- security - Coinbase 区块链和区块链之间有什么区别吗?
- javascript - React - 如果我更改状态,每次新渲染时都会使用占位符和动画的输入字段
- php - 冲突的 Seafile 和 Nextcloud nginx 配置
- c++ - 如何使用 clang-format 格式化地图初始化?
- reactjs - 使用 Axios 请求从服务器加载 Redux Store
- python - TensorFlow png as x 和 html as y
- python - Python - 附加时的错误
- python - Python pynput 不能“理解”希腊字符