5.7.4. 粘性会话
实施粘性会话取决于底层路由器配置。默认 HAProxy 模板使用 balance source
指令实施粘性会话,该指令根据源 IP 平衡。另外,模板路由器插件为底层实施提供服务名称和命名空间。这可用于更高级的配置,例如实施在同级服务器集合之间同步的记忆程序。
粘性会话可确保来自用户会话的所有流量都进入同一 pod,从而创建更好的用户体验。虽然满足用户的请求,但 pod 会缓存数据,它们可用于后续请求。例如,对于具有五个后端 pod 和两个负载均衡的路由器的集群,您可以确保同一 pod 从同一 Web 浏览器接收 Web 流量,而不考虑处理它的路由器。
虽然需要将路由流量返回到同一 pod,但无法保证它。但是,您可以使用 HTTP 标头设置 Cookie 来确定上一次连接中使用的 pod。当用户向应用发送另一请求时,浏览器会重新发送 Cookie 和路由器知道将流量发送到何处。
集群管理员可以关闭 passthrough 路由与其他连接分开的粘性,或者完全关闭粘性。
默认情况下,直通路由的粘性会话使用 source
负载均衡策略来实施。可以修改所有透传路由的默认,使用 ROUTER_TCP_BALANCE_SCHEME
环境变量,对于独立的路由,使用 haproxy.router.openshift.io/balance
特定于路由的注解。
其他类型的路由默认使用 leastconn
负载均衡策略,可以使用 ROUTER_LOAD_BALANCE_ALGORITHM
环境变量 进行修改。可以使用 haproxy.router.openshift.io/balance
特定于路由的注解,可以修改单个路由。
无法在 passthrough 路由上设置 Cookie,因为无法看到 HTTP 流量。相反,数字根据源 IP 地址计算,它决定后端。
如果后端有变化,则流量可能会头向错误的服务器,使其更小,而且当您使用负载均衡器(这会隐藏源 IP)时,则会为所有连接和流量发送到同一 pod 设置相同的数字。
另外,模板路由器插件为底层实施提供服务名称和命名空间。这可用于更高级的配置,例如实施在同级服务器集合之间同步的粘性程序。
此路由器实施的具体配置存储在路由器容器的 /var/lib/haproxy/conf 目录中的 haproxy-config.template 文件中。文件 可以自定义。
源
负载平衡策略 不区分外部客户端 IP 地址;因为 NAT 配置,原始 IP 地址(HAProxy 远程)是相同的。除非 HAProxy 路由器以 hostNetwork: true
运行,否则所有外部客户端都将路由到单个 pod。