测试总纲:
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共享问题。
本文通过一系列实验,详细探讨了Kubernetes (K8s) 中Service的ClusterIP模式,特别是sessionAffinity: ClientIP模式下如何实现会话保持。实验结果显示,ClientIP模式会导致请求主要集中于一台Pod,可能导致负载不均。而在默认模式下,请求会分散到所有Pod,但需注意session共享问题以确保正确运行负载均衡。建议开发者根据实际情况调整策略。
1418

被折叠的 条评论
为什么被折叠?



