在阅读 k8s 中的入口和入口 Controller 时,有记录表明入口 Controller 中有一个负载均衡器。
根据我的理解,入口 Controller 只接受外部请求并将其转发到目标服务(Pod 之间的负载均衡实际上发生在这里),因此不需要在入口 Controller 级别进行负载均衡!
谁能澄清正确的场景吗?
最佳答案
您对 ingress 的实现有正确的思维模型,尽管实际情况并非如此:
Ingress -> Service -> 1..n Endpoints (Pods)
但在实践中,这可能会导致问题:如果您想影响实际的负载平衡并使用附加信息(例如用于粘性 session 的 cookie),Ingress 必须自行做出决定,而不能将其委托(delegate)给服务。
因此,Ingress 通常会查询服务的端点并自行处理 http 请求平衡。
您实际上可以观察到这一点:创建一个与主机名(pod 名称)相呼应的小应用程序,例如使用 PHP 和允许 http keepalive 的网络服务器。当通过 LoadBalancer 或 NodePort 公开时,您会注意到在浏览器中重新加载不会更改每个请求的 pod。 cURL 将针对每个请求显示不同的 pod 名称。这是由于重新使用了 TCP 连接,因此服务不会重新平衡。
如果您使用 Ingress,您会注意到请求在 Pod 之间进行负载平衡。
关于kubernetes - 为什么入口 Controller 中有负载均衡器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73182963/