IPVS在k8s中的使用
一、IPVS在k8s中的使用二、IPVS的优点1、底层hash算法,查找复杂度为O(1)事先将所有路由存储到hash表,不像iptables底层O(0)的复杂度,需要一条条规则从上到下匹配,这样随着service的增多(nat规则增多),内核越来越忙,集群性能越来越差。2、支持多种负载均衡策略加权、最少连接、最小负载等3、支持健康检查和重试(后端pod异常重试去访问另一个后端pod)...
一、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绑定到宿主机的虚拟网卡。
更多推荐
所有评论(0)