kubernetes集群组件图
kube-proxy官方文档
什么是 IPVS
IPVS(IP 虚拟服务器)实现传输层负载平衡,通常称为第 4 层 LAN 交换,作为 Linux 内核的一部分。
IPVS 在主机上运行并充当真实服务器集群前面的负载平衡器。IPVS 可以将基于 TCP 和 UDP 的服务的请求定向到真实服务器,并使真实服务器的服务在单个 IP 地址上表现为虚拟服务。
IPVS 与 IPTABLES的区别
IPVS 模式在 Kubernetes v1.8 中引入,在 v1.9 中进入测试版,在 v1.11 中进入 GA。在 v1.1 中添加了 IPTABLES 模式,并从 v1.2 开始成为默认操作模式。IPVS 和 IPTABLES 都基于netfilter(网络过滤器)
IPVS模式和IPTABLES模式的区别如下:
-
IPVS 为大型集群提供了更好的可扩展性和性能。
-
IPVS 支持比 IPTABLES 更复杂的负载平衡算法(最小负载、最少连接、局部性、加权等)。
-
IPVS 支持服务器健康检查和连接重试等。
为什么为 Kubernetes 选择 IPVS ?
随着 Kubernetes 的使用增长,其资源的可扩展性变得越来越重要。特别是,服务的可扩展性对于运行大型工作负载的开发人员/公司采用 Kubernetes 至关重要。
Kube-proxy 是服务路由的构建块,它依赖于经过强化攻击的 iptables 来实现支持核心的服务类型,如 ClusterIP 和 NodePort。 但是,iptables 难以扩展到成千上万的服务,因为它纯粹是为防火墙而设计的,并且基于内核规则列表。
尽管 Kubernetes 在版本v1.6中已经支持5000个节点,但使用 iptables 的 kube-proxy 实际上是将集群扩展到5000个节点的瓶颈。 一个例子是,在5000节点集群中使用 NodePort 服务,如果我们有2000个服务并且每个服务有10个 pod,这将在每个工作节点上至少产生20000个 iptable 记录,这可能使内核非常繁忙。
另一方面,使用基于 IPVS 的集群内服务负载均衡可以为这种情况提供很多帮助。 IPVS 专门用于负载均衡,并使用更高效的数据结构(哈希表)&