K8s-Service的负载均衡机制
K8s-Service的负载均衡机制
Service对象通过关联转发到PodI实现负载均衡,每个Node的kube-proxy负责实现。
kube-proxy的代理模式
通过启动参数–proxy-mode设 置
userspace模式(x)
用户空间模式,由kube-proxy完成的代理模式,效率低,不再推荐
iptables模式
kube-proxy通过设置Linux Kernel的iptables规则, 实现从Service到后端Endpoint列表的负载分发规则,效率很高。但是, 如果某个后端Endpoint在转发时不可用,此次客户端请求就会得到失败 的响应,相对于userspace模式来说更不可靠。
此时应该通过为Pod设置 readinessprobe(服务可用性健康检查)来保证只有达到ready状态的 Endpoint才会被设置为Service的后端Endpoint。
ipvs模式
在Kubernetes 1.11版本中达到Stable阶段,kubeproxy通过设置Linux Kernel的netlink接口设置IPVS规则,转发效率和支 持的吞吐率都是最高的。ipvs模式要求Linux Kernel启用IPVS模块,如果 操作系统未启用IPVS内核模块,kube-proxy则会自动切换至iptables模 式。
支持更多负载均衡策略:
- rr:round-robin,轮询
- lc:least connection,最小连接数
- dh:destination hashing,目的地址哈希
- sh:source hashing,源地址哈希。
- sed:shortest expected delay,最短期望延时
- nq:never queue,永不排队
kernelspace模式
Windows Server上的代理模式。
会话保持机制
Service支持通过设置sessionAffinity实现基于客户端IP的会话保持机制,即首次将某个客户端来源IP发起的请求转发到后端的某个Pod上, 之后从相同的客户端IP发起的请求都将被转发到相同的后端Pod上,配 置参数为service.spec.sessionAffinity
apiVersion: v1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论