image.png

    客户端IP请求时到达内核空间时,根据ipvs的规则直接分发到各pod上,kube-proxy会监视Kubernetes Service对象和Endpoints,调用netlink接口以相应地创建ipvs规则并定期与Kubernetes Service对象和Endpoints对象同步ipvs规则,以确保ipvs状态与期望一致,访问服务时,流量将被重定向到其中一个后端Pod

    与iptables类似,ipvs基于netfilter 的 hook 功能,但使用哈希表作为底层数据结构并在内核空间中工作,这意味着ipvs可以更快地重定向流量,并且在同步代理规则时具有更好的性能,此外,ipvs为负载均衡算法提供了更多选项,例如:

    1. rr:轮询调度
    2. lc:最小连接数
    3. dh:目标哈希
    4. sh:源哈希
    5. sed:最短期望延迟
    6. nq:不排队调度

    注意: ipvs模式假定在运行kube-proxy之前在节点上都已经安装了IPVS内核模块,当kube-proxy以ipvs代理模式启动时,kube-proxy将验证节点上是否安装了IPVS模块,如果未安装,则kube-proxy将回退到iptables代理模式

    image.png

    如果某个服务后端pod发生变化,标签选择器适应的pod有多一个,适应的信息会立即反映到apiserver上,而kube-proxy一定可以watch到etc中的信息变化,而将它立即转为ipvs或者iptables中的规则,这一切都是动态和实时的,删除一个pod也是同样的原理

    相关文档:https://blog.csdn.net/kenkao/article/details/87375435
    相关文档:https://www.cnblogs.com/wlbl/p/10694316.html