更新时间:2024-07-27 GMT+08:00

通过负载均衡配置实现会话保持

概念

会话保持可以确保用户在访问应用时的连续性和一致性。如果在客户端和服务器之间部署了负载均衡设备,很有可能这多个连接会被转发至不同的服务器进行处理。开启会话保持后,负载均衡会把来自同一客户端的访问请求持续分发到同一台后端云服务器上进行处理。

例如在大多数需要用户身份认证的在线系统中,一个用户需要与服务器实现多次交互才能完成一次会话。由于多次交互过程中存在连续性,如果不配置会话保持,负载均衡可能会将部分请求分配至另一个后端服务器,但由于其他后端服务器并未经过用户身份认证,则会出现用户登录失效等交互异常。

因此,在实际的部署环境中,需要根据应用环境的特点,选择适当的会话保持机制。

表1 会话保持类型

类型

说明

支持的会话保持类型

会话保持时间

会话保持失效的场景

四层会话保持

当创建Service时,使用的协议为TCP或UDP,默认为四层会话保持。

源IP地址:基于源IP地址的简单会话保持,将请求的源IP地址作为散列键(HashKey),从静态分配的散列表中找出对应的服务器。即来自同一IP地址的访问请求会被转发到同一台后端服务器上进行处理。

  • 默认时间:20分钟
  • 最长时间:60分钟
  • 取值范围:1-60分钟
  • 客户端的源IP地址发生变化。
  • 客户端访问请求超过会话保持时间。

七层会话保持

当创建Ingress时,使用的协议为HTTP或HTTPS,默认为七层会话保持。

  • 负载均衡器cookie:负载均衡器会根据客户端第一个请求生成一个cookie,后续所有包含这个cookie值的请求都会由同一个后端服务器处理。
  • 应用程序cookie:该选项依赖于后端应用。后端应用生成一个cookie值,后续所有包含这个cookie值的请求都会由同一个后端服务器处理。
  • 默认时间:20分钟
  • 最长时间:1440分钟
  • 取值范围:1-1440分钟
  • 如果客户端发送请求未附带cookie,则会话保持无法生效。
  • 客户端访问请求超过会话保持时间。

在创建负载均衡时,分配策略选择“加权轮询算法”(即kubernetes.io/elb.lb-algorithm参数为ROUND_ROBIN)或“加权最少连接”(即kubernetes.io/elb.lb-algorithm参数为LEAST_CONNECTIONS)可配置会话保持;选择“源IP算法”(即kubernetes.io/elb.lb-algorithm参数为SOURCE_IP)时已支持基于源IP地址的会话保持,无需重复配置会话保持。

四层会话保持(Service)

四层的模式下可以开启基于源IP的会话保持(基于客户端的IP进行hash路由)。

七层会话保持(Ingress)

七层的模式下可以开启基于http cookie和app cookie的会话保持 。