跳到主要内容

ipvs规则知识点

查看当前集群使用的代理模式

$ k -n kube-system get cm kube-proxy-master -o yaml|grep -w mode
mode: ipvs

svc与后端pod的ipvs规则

kube-proxy 是以ds的方式部署的,因此每个node节点上都有相关的ipvs规则

以一个pod为例,vpaas-demo pod调度在了 cn-beijing.10.245.96.43 这个节点

k get pod -A -o wide|grep vpaas-demo
ratel vpaas-demo.prod.ali.ratel-pod-deploy-295986-656758fc8d-dgzsm 1/1 Running 0 28d 10.245.112.32 cn-beijing.10.245.96.43 <none> <none>

vpaas-demo 对应的svc地址是 172.31.42.227

$ k get svc -A -o wide|grep vpaas-demo
ratel vpaas-demo-prod LoadBalancer 172.31.42.227 10.245.11.252 80:32380/TCP,50091:31502/TCP 505d app=vpaas-demo,build_id=295986,runenv=prod

登录 vpaas-demo 所调度的 cn-beijing.10.245.96.43 node节点查看ipvs规则,这里主要查看8080端口的规则

$ ipvsadm -Ln | grep -A 5 172.31.42.227
TCP 172.31.42.227:80 rr
-> 10.245.112.32:8080 Masq 1 0 0
TCP 172.31.42.227:50091 rr
-> 10.245.112.32:50091 Masq 1 0 0
字段含义
TCP协议类型,表示使用 TCP 协议
172.31.42.227:80ClusterIP(虚拟 IP)和端口(服务的入口),这里是服务的 IP 和端口,表示客户端通过此 IP 和端口访问服务
rr负载均衡算法rr 表示 轮询(Round Robin),即流量按顺序轮流分配到后端 Pod
->表示流量被转发的目标(即后端 Pod)
10.245.112.32:8080目标后端 Pod 的 IP端口,这里表示流量会被转发到该 Pod(10.245.112.32)上的 8080 端口
MasqNAT(网络地址转换),流量转发时,源 IP 会被修改成目标的外部 IP,通常是为了与外部通信
1目标的 权重,表示流量分配的比例,默认情况下每个目标权重为 1
0目标的 连接数,当前指向该 Pod 的流量连接数
0目标的 传输字节数,表示流量传输的字节数
Right Bottom Gif
Right Top GIF