K8S负载均衡详解(图文全面总结)

K8S负载均衡

Kubernetes(K8S)作为一款现代化的容器编排平台,不仅能够实现容器的自动化部署、扩展和管理,还能提供强大的负载均衡功能。

K8S负载均衡详解(图文全面总结)-mikechen

Kubernetes 提供了强大的负载均衡能力,能够确保容器化应用在多实例、高负载情况下的稳定运行。

通过 Service 和 Ingress,K8S 可以高效地分发流量,支持多种负载均衡策略,适应不同的应用需求。

 

K8S负载均衡原理

在 Kubernetes 中,负载均衡分为两类:服务内部负载均衡、和服务外部负载均衡。

K8S负载均衡详解(图文全面总结)-mikechen

内部负载均衡的目标:是在 Kubernetes 集群内部,将流量分发到后端的多个 Pod 实例。

这是通过 Kubernetes Service 抽象、和 kube-proxy 组件来实现的。

工作原理:

Kubernetes Service Service 定义了一种访问一组 Pod 的抽象方式。

它为这些 Pod 提供了一个稳定的 IP 地址(Cluster IP)和可选的 DNS 名称。

客户端可以通过这个稳定的地址访问后端的 Pod,而无需关心 Pod 的实际 IP 地址,因为 Pod 是动态的。

kube-proxy

K8S负载均衡详解(图文全面总结)-mikechen

kube-proxy: kube-proxy 是运行在每个 Kubernetes 节点上的网络代理。

它监听 Kubernetes API Server 中 Service 和 Endpoint(代表 Pod 的 IP 地址和端口)的变化。

根据 Service 的类型和配置,kube-proxy 会在节点上设置相应的网络规则,将发送到 Service 的 Cluster IP 和端口的流量转发到后端的 Pod。

kube-proxy 配置 Linux 内核的 IPVS (IP Virtual Server) 来实现负载均衡。

IPVS 是一种更高效的内核级负载均衡器,支持更多高级的负载均衡算法(如轮询、最少连接…等)。

 

服务外部负载均衡

服务外部负载均衡的目标:是将集群外部的流量引入到 Kubernetes 集群内部运行的服务。

这通常涉及到:将 Service 暴露在集群外部可访问的 IP 地址上。

外部负载均衡主要通过:云提供商的负载均衡器或第三方负载均衡器来实现。

比如:Cloud Load Balancer

 在云环境中,使用云提供商的负载均衡器,如AWS的Elastic Load Balancer…等等。

 Kubernetes通过Service的LoadBalancer类型自动创建外部负载均衡器,将流量分配到集群中的容器中。

 

K8S 负载均衡策略

Kubernetes 的负载均衡策略,可以支持不同的负载均衡算法和流量路由策略。

1. 轮询(Round Robin)

K8S 中常用的负载均衡策略之一。

K8S负载均衡详解(图文全面总结)-mikechen

轮询将流量依次分发到每个 Pod,确保每个 Pod 收到的请求数量基本相同。它适用于服务负载较为均衡的场景。

2. 加权轮询(Weighted Round Robin)

在一些负载较高的情况下,可以通过加权轮询来控制流量的分配。

K8S负载均衡详解(图文全面总结)-mikechen

例如,可以为不同的 Pod 设置不同的权重,以便将更多的流量引导到性能更高的实例。

3. 最少连接(Least Connections)

此策略会将流量优先分发到当前连接数最少的 Pod。

K8S负载均衡详解(图文全面总结)-mikechen

它适用于处理持续连接的应用(如数据库或缓存服务)。

4. IP 哈希(IP Hash)

该策略基于客户端的 IP 地址计算哈希值,并将请求固定路由到某个 Pod,适用于需要会话保持的应用场景。

5. 一致性哈希(Consistent Hashing)

K8S负载均衡详解(图文全面总结)-mikechen

一致性哈希确保相同的请求总是发送到相同的 Pod,适合于需要会话粘性或者缓存的场景。

总之,Kubernetes 提供了强大的负载均衡能力,能够确保容器化应用在多实例、高负载情况下的稳定运行。

通过 Service 和 Ingress,K8S 可以高效地分发流量,支持多种负载均衡策略,适应不同的应用需求。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法