k8s负载均衡
因为有客户在搭建集群过程中,问了一下这个k8s流量负载均衡的问题,之前也没有这样深入的了解过这个原理,刚好在b站学习的时候,刚好老师讲到这个知识点,因此学习记录敲一下。环境信息:访问nginx-svc,映射到后端pod的流量基本上均分示例图如下:这里我们就理解一下这个百分之五十是怎么来的?这里我们重点关注一个组件 kube-proxy以下来自官方解释:service是一组pod的服务抽象,相当于一
因为有客户在搭建集群过程中,问了一下这个k8s流量负载均衡的问题,之前也没有这样深入的了解过这个原理,刚好在b站学习的时候,刚好老师讲到这个知识点,因此学习记录敲一下,这里仅从iptables的数据转发规则来看哈。
环境信息:
访问nginx-svc,映射到后端pod的流量基本上均分
示例图如下:
这里我们就理解一下这个百分之五十是怎么来的?
这里我们重点关注一个组件 kube-proxy
以下来自官方解释:
service是一组pod的服务抽象,相当于一组pod的LB,负责将请求分发给对应的pod。service会为这个LB提供一个IP,一般称为cluster IP。
kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部的从node port向service的访问。
举个例子,现在有podA,podB,podC和serviceAB。serviceAB是podA,podB的服务抽象(service)。
那么kube-proxy的作用就是可以将pod(不管是podA,podB或者podC)向serviceAB的请求,进行转发到service所代表的一个具体pod(podA或者podB)上。
请求的分配方法一般分配是采用轮询方法进行分配。
是的,当然我们kube-proxy的主要功能就是维护集群中iptables规则来保证上述的实现,现在我们来追一下这个负载均衡的规则。
首先查看本地关于目标ip地址的规则,即如果目的地址是10.1.201.93,则进入到以下链
[root@master1 svc]# iptables-save |grep 10.1.201.93
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.1.201.93/32 -p tcp -m comment --comment "default/nginx-svc:http cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.1.201.93/32 -p tcp -m comment --comment "default/nginx-svc:http cluster IP" -m tcp --dport 80 -j KUBE-SVC-ELCM5PCEQWBTUJ2I
KUBE-MARK-MASQ像这种带MARK的意义不是特别大,相当于只是一个标记的作用。
我比较习惯这样看
[root@master1 svc]# iptables -nvL -t nat |grep 10.1.201.93
pkts bytes target prot opt in out source destination
0 0 KUBE-MARK-MASQ tcp -- * * !10.244.0.0/16 10.1.201.93 /* default/nginx-svc:http cluster IP */ tcp dpt:80
0 0 KUBE-SVC-ELCM5PCEQWBTUJ2I tcp -- * * 0.0.0.0/0 10.1.201.93 /* default/nginx-svc:http cluster IP */ tcp dpt:80
[root@master1 svc]#
然后继续跳转到KUBE-SVC-ELCM5PCEQWBTUJ2I这条链,这里开始区分流量往哪里走了
关于iptables的负载均衡资料如下:
在Linux中使用iptables完成tcp的负载均衡有两种模式:随机、轮询
The statistic module support two different modes:
random:(随机)
the rule is skipped based on a probability
nth:(轮询)
the rule is skipped based on a round robin algorithm
这里的模式是random随机模式,因为规则中指定 --probability 0.5,所以表示有百分之五十的概率会进入到KUBE-SEP-KHPHCKBDJSOBPFFD链中
这里有个目的地址的转换的规则,10.244.0.53:80是我们deply-1的pod的IP地址。即流量有百分之五十的概率访问的是10.244.0.53:80这个地址+端口。
若上面的都不符合,那么就剩下0.5的概率跳转到KUBE-SEP-3ZZCLQK2JUJX66TW这条链中
我们查看一下这个链
10.244.0.54:80是我们的deploy-2的IP地址+端口。
更多推荐
所有评论(0)