文章目录
sessionAffinity简介
什么是sessionAffinity
简单理解
确保把来自同一客户的一个完整会话的请求转发至后台同一台服务器进行处理。
详细解释
在Kubernetes中,sessionAffinity是指Service的一种设置,用于控制外部流量如何在后端Pod之间分发。具体来说,sessionAffinity可以配置为"None"、“ClientIP"或者"ClientIP”。这些设置决定了负载均衡器如何将来自相同客户端的请求路由到后端的Pods上。
模式介绍
None
这是sessionAffinity的默认设置。当设置为"None"时,负载均衡器会根据负载均衡算法(如轮询、最少连接数等)将每个新的请求独立地分发到后端的Pods上,与之前的请求无关。
ClientIP
当设置为"ClientIP"时,负载均衡器会根据客户端的IP地址来将来自同一个客户端的请求路由到同一个后端的Pod上。这样可以确保来自同一个客户端的多次请求都被发送到同一个后端Pod上,用于保持会话一致性。
ClientIP模式的会话粘滞
这种方式通常用于需要保持会话状态的应用程序,如基于HTTP的应用程序,以确保用户在整个会话期间都能被路由到同一个后端Pod上。
应用场景
简单理解
举个大家每天都会遇到的例子,大家在淘宝或者京东上购物时,从完成用户身份认证到浏览店铺,选择心仪商品加入购物车,一直到最后下单完成支付,需要经过很多次和服务器的交互过程才能完成整个交易。由于这几次交互过程从顺序上和逻辑上是密切相关的,服务器在进行这些交互过程的某一个交互步骤时需要一个上下文(Context),即上一次交互过程的输出,因此要求这些相关的交互过程都由一台服务器完成。
在这种情况下,假设负载均衡器仍然把这些相关交互session分散到不同的服务器实例上,就会带来很糟糕的用户体验,比如客户在浏览器上每点击一次,都会弹出登录页面。或者即使用户输入了正确的验证码,却仍然提示验证码错误。由于服务器处理实例不一样