Service 与 kube-proxy
Service是Kubernetes抽象出来的网络组件,它对外提供统一的IP,屏蔽后端 Pod 的变化,将请求负载到后端的容器 Pod。
kube-proxy是 Kubernetes 的核心组件之一,负责维护节点上 Service 到 Pod 的网络规则。云容器引擎的 kube-proxy 支持 iptables 和 IPVS 两种模式。
iptables
iptables 是 Linux 用于过滤和处理数据包的内核功能,其原理是通过 Hook 机制挂载的一系列规则对路径上的数据包进行处理。在使用 iptables 模式时,kube-proxy 会为每一个 Service 添加一条 iptables 规则。通过这些规格流向 Service 的数据包将被随机转发到后端的容器 Pod上。适用的场景:
成熟稳定的kube-proxy代理模式,性能一般,适用于Service数量较少(小于3000)的场景
随机平等的负载均衡算法能满足需求的场景
IPVS
IPVS(IP Virtual Server)是构建在传输层上的负载均衡,其原理是将客户端的 TCP 和 UDP 请求根据预设的调度算法分配到后端的真实服务器上,从而实现服务器集群的负载均衡。采用 IPVS 模式时,kube-proxy 会使用 IPVS 提供的高效查找算法将请求转发到后端的容器 Pod上,且处理效率与集群规模无关。适用的场景:
高性能的kube-proxy代理模式,适用于集群规模较大或Service数量较多的场景
有轮询、最短期望延迟、最少连接以及各种哈希方法等负载均衡算法需求的场景