测试总纲:
k8s中的service常用的ClusterIP模式自带的clientip模式,也叫亲节点模式,就是通过svc的ClusterIP模式的请求,如果IP相同,会转发到一台pod上,如果是web服务器,就可以实现 会话相同,达到会话保持的状态。
实验目的:
通过访问clusterip访问,获取转发的情况。
准备环境:
k8s集群,创建三台web服务器节点绑定一个svc实现实验环境,如下图:
实验一:
Svc 的 ClusterIP模式的sessionAffinity: ClientIP 模式:
打开三台web服务的实时日志,获取访问情况,验证前端是在访问哪台服务器。
通过不同服务器curl的方法,访问服务器,查看service模式的转发情况。
实验过程:
通过一台服务器,100次访问service服务:
三台web服务器访问情况(通过kubectl主节点获取三个pod实时日志):
kubectl logs -f djangoblog-664b9c97b6-kgflx
kubectl logs -f djangoblog-664b9c97b6-sp59v
kubectl logs -f djangoblog-664b9c97b6-tcjpr
实验结论:
只有一台web不断的刷新日志,其他2个0访问。所以svc的会保持会话,只转发到一台web上。
实验二:
Svc 的 ClusterIP模式的sessionAffinity: ClientIP 模式:
条件如实验一,此时使用三台服务器是访问svc 各100次,看svc的转发情况。
实验过程:
三台访问100次svc:
三台web日志方位情况:
实验结论:
Svc的亲节点模式,会把大量请求转发到一台服务器上,严重造成负载不均,请根据自身情况,选择是否符合自己情况,酌情搭建负载均衡。
实验三:
Svc 的 ClusterIP模式的默认 模式:
实验过程:
通过一台服务器访问svc的ClusterIP。
三台web的日志情况:
实验结论:
默认模式,三台web都会有访问到。但是一般web程序会话信息都存在本地内存中。此时需要开发人员把seession信息保存到 一个共享文件,或者数据库中,实现共享存储,此模式适合做负载均衡,切记需要和开发人员协商seesion共享问题。