Higress × OpenKruiseGame 游戏网关最佳实践
内容提要
OKG是一个开源游戏服务器Kubernetes工作负载,提供热更新和原地升级等常见游戏服务器管理功能。Higress是基于Envoy和Istio的下一代云原生网关,可以显著降低网关的部署和运维成本。本文演示了Higress如何与OKG游戏服务器无缝集成,并带来出色的功能。
延伸解读
游戏网关选型:热更新能力是关键
文章通过对比测试表明,Nginx Ingress 在配置变更时触发 reload,会导致玩家连接断开约 5 秒,影响体验并可能引发重连风暴。而 Higress 基于 Envoy 的精确配置变更管理,实现路由、证书等独立热更新,不断开现有连接。对于需要频繁扩缩容的游戏服场景,网关是否具备真正的热更新能力应作为选型的核心考量。
OKG 与 Higress 集成:自动化网络管理
OKG 的 GameServerSet 可自动为每个游戏服创建 Ingress 资源,并生成与游戏服 ID 相关的访问域名(如 game0.postio.example.com)。通过指定 IngressClassName 为 higress,Higress 能无缝接入,并基于 Annotation 实现高阶流量治理。这种集成降低了运维手动配置的负担和故障概率,提升了开服效率。
大规模场景下的性能差异
在 1k 级别游戏服规模下,Nginx Ingress 新增一个游戏服需要分钟级生效,而 Higress 可在秒级完成。这一差异源于 Higress 基于 Envoy 的动态配置更新机制,避免了全量 reload。对于快速扩缩容的游戏业务,Higress 的秒级生效能力能更好地支撑弹性需求,减少玩家等待时间。
Nginx 参数调优的两难困境
Nginx 的 worker-shutdown-timeout 参数用于优雅下线,但配置过小会导致活跃连接瞬间断开,过大则会使 websocket 长连接维持老 worker 进程,频繁 reload 时产生大量 shutting down 进程,占用内存无法释放,可能引发 OOM。文章指出这是一个很难权衡的配置,侧面反映了 Nginx 在长连接场景下的固有局限。
Q&A
Higress 和 OpenKruiseGame 分别是什么?
Higress 是基于 Envoy 和 Istio 的下一代云原生网关,实现了安全防护、流量、微服务三层网关合一,可降低部署和运维成本。OpenKruiseGame(OKG)是面向多云的开源游戏服 Kubernetes 工作负载,提供热更新、原地升级、定向管理等游戏服管理功能。
为什么游戏服务器需要独立的访问地址?OKG 如何解决?
游戏服中玩家战斗的网络流量不允许被负载均衡,因此每个游戏服需要独立的访问地址。使用原生工作负载时需手动为每个游戏服配置接入网络,效率低且易出错。OKG 通过 GameServerSet 工作负载自动化管理游戏服的接入网络,大幅降低运维负担。
Nginx Ingress 在游戏服扩容时有什么问题?
Nginx 配置变更会触发 reload,导致上下游连接断开并重连。在游戏服扩容时,Nginx-ingress-controller 监听到 Ingress 变更后 reload,会断开现有 Socket 连接,玩家体验出现卡顿。测试中,断连持续约 5 秒。此外,高并发下大量重连可能导致 Nginx CPU 飙升,甚至打垮后端引发雪崩。
Higress 如何实现配置热更新,保障玩家连接稳定?
Higress 基于 Envoy 的精确配置变更管理,实现真正的动态热更新。Envoy 中 downstream 对应 listener 配置(LDS),upstream 对应 cluster 配置(CDS),两者可独立变更互不影响。listener 下的证书、过滤器插件、路由也可独立变更,因此配置变更不会引起 downstream 连接断开。
Higress 在大规模游戏服场景下的性能表现如何?
在大规模游戏服场景下,每个游戏服对应一个独立 Ingress,当达到 1k 级别规模时,Nginx Ingress 新扩一个游戏服需要分钟级生效,而 Higress 可以在秒级生效。
如何将 Higress 接入 OKG 游戏服?
在 GameServerSet 的 network 配置中指定 networkType 为 Kubernetes-Ingress,并设置 IngressClassName 为 "higress",同时配置 Port、Path、PathType、Host 等参数。Host 可使用 game<id>.postio.example.com 格式,使每个游戏服有独立域名。Higress 通过 Annotation 支持高阶流量治理功能。