kubernetes - 为什么入口 Controller 中有负载均衡器?

标签 kubernetes load-balancing kubernetes-ingress

在阅读 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/

相关文章:

kubernetes - 在 Kubernetes 集群上刷新 CoreDNS 缓存

docker - GO - Docker 在 K8S 容器上询问证书

Kubernetes/Minikube : After mounting volume, pod 挂载目录为空

kubernetes - nginx 入口重写目标重定向问题

wcf - 如何模拟 WCF 服务的负载平衡环境?

Jenkins 多个大师

url - www和www1,www2,www3等之间有什么区别

kubernetes - 为什么 AKS 创建的 Azure 负载均衡器设置为将流量定向到节点上的端口 80 和 443,而不是服务打开的节点端口?

ruby-on-rails - Sidekiq UI在基于Kubernetes路径的路由中加载错误的 Assets 路径

nginx - Kubernetes入口 Controller