你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于容器的应用程序网关会话亲和性概述

会话亲和性(也称为会话暂留粘性会话)是一种在负载均衡中使用的技术,可确保客户端的请求始终发送到同一服务器。 对于将用户数据存储在特定服务器上的会话变量或本地缓存中的应用程序(通常称为有状态应用程序),这一点很重要。

使用会话亲和性时,适用于容器的应用程序网关会在第一个响应的 Set-Cookie 标头中显示 Cookie。 如果客户端在将来的请求中显示 Cookie,则适用于容器的应用程序网关可识别该 Cookie 并将流量转发到同一后端目标。 请参阅以下示例场景:

描述适用于容器的应用程序网关会话亲和性的关系图。

上图中描述了以下步骤:

  1. 客户端向适用于容器的应用程序网关前端发起请求。
  2. 适用于容器的应用程序网关从众多可用的 Pod 中选择一个来对请求进行负载平衡。 在此示例中,我们假设从四个可用的 Pod 中选择了 Pod C。
  3. Pod C 返回对适用于容器的应用程序网关的响应。
  4. 除了来自 Pod C 的后端响应外,适用于容器的应用程序网关还添加了一个 Set-Cookie 标头,其中包含用于路由的唯一的生成的哈希。
  5. 客户端向适用于容器的应用程序网关发送另一个请求,以及在上一步中设置的会话亲和性 Cookie。
  6. 适用于容器的应用程序网关会检测到该 Cookie,并选择 Pod C 来提供请求。
  7. Pod C 会返回对适用于容器的应用程序网关的响应。
  8. 适用于容器的应用程序网关会返回对客户端的响应

使用情况详细信息

会话亲和性由以下属性和特征定义:

名称 描述
affinityType 有效值为 application-cookie 或 managed-cookie。
cookieName 如果 affinityType 是 application-cookie,则为必填项。 这是 Cookie 的名称。
cookieDuration 如果 affinityType 是 application-cookie,则为必填项。 这是 Cookie 的持续时间(生存期),以秒为单位。

在托管 Cookie 相关性类型中,Azure 应用程序网关在向客户端提供 Cookie 时使用预定义值。

  • Cookie 的名称为:AGCAffinity
  • Cookie 的持续时间(生存期)为 86,400 秒(1 天)。
  • cookieNamecookieDuration 属性和值将被丢弃。

在应用程序相关性类型中,必须显式定义 Cookie 名称和持续时间(生存期)。

如何配置会话亲和性

会话亲和性可以在面向定义的 HTTPRoute 的 RoutePolicy 资源中定义。 必须指定其 affinityTypeapplication-cookiemanaged-cookiesessionAffinity。 在此示例中,我们使用 application-cookie 作为 affinityType,并显式定义 Cookie 名称和生存期。

使用名为 nomnom 且生存期为 3,600 秒(1 小时)的已定义 Cookie 来创建新 RoutePolicy 的示例命令。

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: RoutePolicy
metadata:
  name: session-affinity-route-policy
spec:
  targetRef:
    kind: HTTPRoute
    name: http-route
    namespace: test-infra
    group: ""
  default:
    sessionAffinity: 
      affinityType: "application-cookie"
      cookieName: "nomnom"
      cookieDuration: 3600
EOF