浅谈Kubernetes Service负载均衡实现机制

本文探讨Kubernetes Service的工作原理,包括kube-proxy如何实现负载均衡。介绍了Service的ClusterIP、NodePort、LoadBalancer和Ingress四种类型及其应用场景。重点阐述了kube-proxy基于Iptables和IPVS的负载均衡实现,对比了两者性能和优缺点,指出IPVS在大规模服务场景下的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

女主宣言

Kubernetes Serivce是一组具有相同label Pod集合的抽象(可以简单的理解为集群内的LB),集群内外的各个服务可以通过Service进行互相通信。但是Service的类型有多种,每种类型的Service适合怎样的场景以及kube-proxy是如何实现Service负载均衡的将是本文讨论的重点。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

Service和kube-proxy在kubernetes集群中的工作原理

在介绍Service和kube-proxy之前,先绍下它们在Kubernetes集群中所起到的作用。

640?wx_fmt=png

让我们分析下上面这张图:

1. 运行在每个Node节点的kube-proxy会实时的watch Services和 Endpoints对象。

当用户在kubernetes集群中创建了含有label的Service之后,同时会在集群中创建出一个同名的Endpoints对象,用于存储该Service下的Pod IP. 它们的关系如下图所示:

640?wx_fmt=png

2.每个运行在Node节点的kube-proxy感知到Services和Endpoints的变化之后,会在各自的Node节点设置相关的iptables或IPVS规则,用于之后用户通过Service的ClusterIP去访问该Service下的服务。

3.当kube-proxy把需要的规则设置完成之后,用户便可以在集群内的Node或客户端Pod上通过ClusterIP经过iptables或IPVS设置的规则进行路由和转发,最终将客户端请求发送到真实的后端Pod。

对于kube-proxy如何设置Iptables和IPVS策略后续会讲。接下来先介绍下每种不同类型的Service的使用场景。

2

Service 类型

当前Kubernetes Service支持如下几种类型,并在介绍类型的同时便可以了解每种类型的Service的具体使用场景。

ClusterIP

ClusterIP类型的Service是Kubernetes集群默认的Service, 它只能用于集群内部通信。不能用于外部通信。

ClusterIP Service类型的结构如下图所示:

640?wx_fmt=png

NodePort

如果你想要在集群外访问集群内部的服务,你可以使用这种类型的Service。NodePort类型的Service会在集群内部的所有Node节点打开一个指定的端口。之后所有的流量直接发送到这个端口之后,就会转发的Service去对真实的服务进行访问。

NodePort Service类型的结构如下图所示:

640?wx_fmt=png

LoadBalance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值