我已经阅读了this question,这是非常类似于我所问的,但仍然想写一个新的问题,因为那里接受的答案似乎非常不完整,也可能是错误的。
基本上,在常规Kubernetes服务的内置负载平衡方面,似乎存在一些缺失或矛盾的信息(我说的不是LoadBalancer服务)。例如,官方的Cilium documentation声明“Kubernetes不附带负载平衡的实现”。此外,我在Kubernetes的官方文档中找不到任何关于内部服务负载平衡的信息(只有一个部分在入口下讨论这个问题)。
因此,我的问题是:当我们从Kubernetes集群向Kubernetes服务的内部地址发出请求时,负载平衡或请求分配是如何工作的?
我知道在每个节点上都有一个Kubernetes代理为这些服务创建DNS记录,但是对于跨多个单元和节点的服务呢?必须有某种形式的请求分配或负载平衡,否则这根本就不起作用,不是吗?
1条答案
按热度按时间jm81lzqq1#
标准的Kubernetes Service提供基本的负载平衡。即使是ClusterIP类型的服务,该服务也有自己的集群内部IP地址和DNS名称,并将请求转发到其
selector:
指定的Pod集合。在正常使用中,创建一个多副本部署,将一个服务设置为指向其Pod,并仅向该服务发送请求就足够了。
该文档讨论了内部负载平衡的实现,比应用程序开发人员通常需要的更详细。除非您的集群管理员进行了额外的设置,否则您可能会得到循环请求路由-第一个Pod将接收第一个请求,第二个Pod将接收第二个请求,依此类推。
......西利乌姆的官方文件上说......
作为集群管理员(而不是程序员),“普通”Kubernetes安装不包括外部负载平衡器实现,LoadBalancer类型的服务与NodePort类型的服务的行为完全相同。
循环调度有明显的缺陷,最明显的是,如果您最终有需要花费很长时间和大量资源来服务的单个网络请求,作为应用程序开发人员,解决这个问题的最佳方法是使这些运行时间很长的请求异步运行;返回类似于HTTP 201 Created的状态,每个作业都有一个唯一的URL,并在单独的队列支持的工作线程中执行实际的工作。