我创建了一个 AWS EKS 集群,并在其中部署了由网络负载均衡器 (NLB) 支持的 HAPRoxy 入口控制器,该网络负载均衡器 (NLB) 部署在集群区域的 3 个可用区中。
为了确保集群区域中多个可用区的高可用性,我希望每个 AZ 至少部署一个 HAProxy pod。
我的应用程序的另一个要求是让我在 HAPRoxy 上使用棍子表。但是,并非所有 HAPRoxy pod 之间共享棒表数据。使棒表数据在所有 HAProxy pod 之间传播的唯一解决方案是手动将 HAProxy 服务器的 IP 和端口添加到对等列表中,然后将其添加到棒表配置中。但是由于我们的环境是高度动态的并且 IP 不是静态的,我们将无法实现这一点。因此,在没有棒表数据传播的情况下,我们认为正在发生的是客户端连接到 NLB 实例,然后连接到 HAPRoxy pod 之一。然后将一个条目添加到该特定 pod 上的 HAPRoxy 棒表中。稍后,当用户继续在应用程序上工作时,来自 NLB 的连接可能会转到另一个 HAPRoxy pod,它不包含输入到第一个棒表中的会话详细信息。因此,应用程序将错误地指出该服务器上不存在会话。
因此,我们可以考虑的唯一可能的解决方案是保持来自客户端的连接 -> NLB -> 一个 HAProxy pod,以便粘性数据不断地访问同一个棒表。
我们已经研究过在 NLB 目标上启用粘性,但没有奏效,我们得到了相同的结果。https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#sticky-sessions
或者可能是用户正在连接到不同的 NLB 实例(在不同的 AZ)?
还有其他方法吗?还是我们误解了某些概念?