网络负载均衡器如何与 Kubernetes 中的入口控制器一起工作 (AWS/EKS)?

How does a Network Load Balancer work with an Ingress Controller in Kubernetes (AWS/EKS)?

我对以下工作流程的理解是否正确:

  1. 当一个请求到达负载均衡器时,它也会通过 Ingress 对象(本质上是一个关于如何处理传入请求的映射)。

  2. 然后将此请求转发到 Ingress Controller 以实现(请求最终发送到适当的 Pod/Service)。

但是当只有一个 Ingress Controller 时会发生什么?在我看来,负载均衡器的目的将被打败,因为所有请求都将转到 EKS Worker Node - 1?

此外,假设 EKS Worker Node - 1 中的 Pod APod B 是 occupied/down,Ingress 控制器会将该请求转发给 EKS Worker Node - 2 吗?

我的假设是否正确?您是否应该始终在不同节点上拥有多个入口控制器?

我很困惑,因为我不明白这两个组件是如何协同工作的?哪个组件实际上在平衡负载?

对于您的主要问题,在节点故障的情况下拥有多个入口控制器副本以实现冗余是很常见的,并且在任何生产设置中都可能是一件好事。

至于它是如何工作的:根据“外部流量策略”,负载均衡器服务有两种模式。在默认模式下,NLB 不直接与 Nginx 对话,它与每个节点上的 kube-proxy 网格对话,然后根据需要路由 Nginx pods,即使它们在不同的节点上。使用“本地”流量策略,NLB 将绕过 kube-proxy 网格,只与至少有 1 个 Nginx pod 的节点通信,因此在您的示例中,NLB 根本不会与节点 2 通信。

默认模式下的额外跃点提高了弹性并实现了更平滑的平衡,但以隐藏客户端 IP 为代价(这里没有实际意义,因为 NLB 无论如何都会这样做)并从额外的数据包跃点中引入一点延迟,通常只有几毫秒。