一、IPVS的优点

1、底层hash算法,查找复杂度为O(1)

事先将所有路由存储到hash表,不像iptables底层O(0)的复杂度,需要一条条规则从上到下匹配,这样随着service的增多(nat规则增多),内核越来越忙,集群性能越来越差。

2、支持多种负载均衡策略

加权、最少连接、最小负载等

3、支持健康检查和重试(后端pod异常重试去访问另一个后端pod)

二、工作原理

   

请求包——内核空间——prerouting——内核发现目的地址是本机网卡地址——input——ipvs工作在input链(内核空间)利用ipvsadm(用户空间)定义的转发规则对数据包进行检查——如果数据包目的地址和端口不在规则里继续发往用户空间进程处理——如果在规则里则ipvs根据规则修改数据包的目的地址为后端real server,借由postrouting链转发到后端服务器

 

请求包——内核空间——prerouting——内核发现目的地址是本机网卡地址——input——ipvs工作在input链(内核空间)利用ipvsadm(用户空间)定义的转发规则对数据包进行检查——如果数据包目的地址和端口不在规则里继续发往用户空间进程处理——如果在规则里则ipvs根据规则修改数据包的目的地址为后端real server,借由nat postrouting路由表转发到后端服务器。

多了下面一步:

real server(rip网关必须指向dip)收到报文,回报文会经过ds,ds再将源ip:rip改为vip,回包给客户端

NAT只是对地址进行转换。对端不需要支持NAT。
如果是家用路由器共享的话
比如你发送的报文是src: 192.168.1.100:5000, dst: 100.100.100.100:80
你的路由其的WAN IP是101.101.101.101

你的报文到了路由器这一侧,会找一个没有使用的源端口,比如10000
然后把报文转成src: 101.101.101.101:10000, dst: 100.100.100.100:80, 并且建立192.168.1.100:5000 -> 101.101.101.101:10000的映射表。
然后100.100.100.100:80收到报文,他只知道源是101.101.101.101:10000, 所以回复报文的目的地址是101.101.101.101:1000
路由器收到报文查找映射表,把目的地址再转换成192.168.1.100:5000。

三、ipvsadm常用管理命令

ipvsadm   -Ln   #查看

 

二、IPVS在k8s中的使用

默认使用IPVS的nat模式

由于ipvs的流量通过cluster-ip,dnat到pod,需要进入本机,因此会经过input链,因此需要将cluster-ip绑定到宿主机的虚拟网卡。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐