设置会话亲缘关系

加载网站通常需要从网络服务器获取多个资源。CIS 会话亲和性通过自动将来自同一客户端的请求定向至同一源网络服务器,从而最大限度地减少冗余网络请求。

CIS 在客户机的初始响应上设置 cookie。 在后续客户机请求中使用 cookie 可确保将这些请求发送到同一源,除非源不可用。

启用后,CIS 会话亲缘关系将执行以下操作:

  • 当客户机发出第一个请求时,CIS 会在客户机上设置 CFLib cookie。 Cookie 对请求转发到的源进行编码。
  • 在 cookie 持续时间内,只要源服务器保持正常运行,同一客户机的后续请求将转发到该源。
  • 如果 cookie 到期或源服务器运行状况不佳,那么 CIS 将设置新的 cookie,以编码相应的故障转移源。

除非在 30 分钟到 7 天之间指定了定制会话 TTL (以秒计),否则所有会话缺省为 23 小时。 需要会话亲缘关系 cookie 才能实现 TTL。 启用 "Always Use HTTPS 时,会话 cookie 是安全的。 此外,cookie 始终启用 "HttpOnly,以防止跨站脚本攻击。

通过命令行界面设置会话亲和性

当您通过命令行界面创建全局负载均衡器时,请按以下步骤设置会话亲和性:

  1. 登录到 IBM Cloud 帐户。
  2. 创建全局负载均衡器。
  3. 设置以下 CLI 变量:

若需在会话亲和性Cookie中配置特定的 SameSite 参数,CIS 建议您为 samesite 和参数提供 secure 不同于 Auto 的值,而非依赖默认行为。 这样,SameSite cookie 属性的值就不会因配置更改( 始终使用 HTTPS )而改变。

session_affinity:有效值为 "cookie"、"none"。

ttl: 该负载均衡器创建会话亲和性 Cookie 后,该 Cookie 过期前剩余的时间(以秒为单位)。 有效值介于 "1800"、"604800"之间。 默认值为 82800

session_affinity_attributes: 会话亲和性 Cookie 的属性。

samesite

有效值为: * Auto (默认):如果启用“始终使用 HTTPS”,会话亲和 cookie 将使用 模式;如果禁用,cookie 将使用 模式。Lax None * None:所有请求都会发送 Cookie。 * Lax:Cookie 只发送到顶点域(如 "example.com)。 * Strict:Cookie 由第一方(被访问域)创建。

secure

有效值为: * Auto (默认):如果启用“始终使用 HTTPS”,会话亲和 cookie 将使用 属性中的 ;如果禁用,cookie 将不使用。samesite secure secure * Alwayssecure 始终设置,这意味着 cookie 只通过 HTTPS 连接发送。 * Never secure,允许通过 HTTPS 和 HTTP 连接发送 cookie。

drain_duration

可选。 原点将耗尽活动会话的时间(以秒为单位)。 该字段仅在负载平衡器启用会话亲和时使用。

zero_downtime_failover

可选。 在出现瞬时网络问题时,自动向池中的端点发送流量。 值为 * none(默认):不会发生故障转移,用户可能会看到错误信息。 * temporary:流量被发送到其他端点,直到最初固定的端点可用。 * sticky:会话亲和 cookie 已更新,后续请求将根据需要发送到新的端点。

粘性零停机故障转移不支持通过 HTTP 标头实现的会话亲和性。

例如:

ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'

通过API设置会话亲和性

会话亲和性是全局负载平衡器的一项属性,可以通过以下端点进行设置:

使用 "session_affinity、"session_affinity_ttl 和 "session_affinity_attributes 参数自定义会话亲和的行为。

要通过 HTTP 标头启用会话亲和性,请将 session_affinity 值设置为 header,并将您的 HTTP 标头名称到 session_affinity_attributes.headers

使用 API 创建全局负载均衡器时,请执行以下步骤来设置会话亲缘关系:

  1. 使用正确的变量设置 API 环境。

  2. 将以下值存储在要在 API 命令中使用的变量中:

    • session_affinity,用于指定负载均衡器使用的会话亲缘关系类型,除非指定为“无”或“缺省值”。 有效值为 none,cookieip_cookie
    • session_affinity_ttl,这是会话亲缘关系的生存时间。
    • session_affinity_attributes,包括:
      • samesite 配置亲缘关系 Cookie 上的 SameSite 属性。 有效值为 "Auto、"Lax、"None、"Strict“;默认值为”Auto

      • secure 配置会话亲缘关系 Cookie 上的安全属性。 有效值为 "Auto、"Always、"Never";默认值为 "Auto

      • drain_duration 是放弃持续时间的值 (以秒为单位)。

      • zero_downtime_failover(可选)在出现瞬时网络问题时自动向池中的端点发送流量。 值为 "temporary 和 "sticky;默认值为 "none

        粘性零停机故障转移不支持通过 HTTP 标头实现的会话亲和性。

  3. 启动所有变量时,创建具有会话亲缘关系的全局负载均衡器:

curl -X POST   https://api.cis.cloud.ibm.com/v1/:crn/zones/:zone_id/load_balancers   -H 'content-type: application/json'   -H 'x-auth-user-token: Bearer xxxxxx'   -d '{
    "description": "",
    "proxied": true,
    "enabled": true,
    "name": "www.example.com",
    "session_affinity": "none",
    "session_affinity_ttl": 5000,
    "steering_policy": "geo",
    "fallback_pool": "4112ba6c2974ec43886f90736968e838",
    "default_pools": [
        "6563ebae141638f92ebbdc4a821bef8c",
        "4112ba6c2974ec43886f90736968e838"
    ],
    "pop_pools": {},
    "region_pools": {
        "EEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "ENAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ],
        "WEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "WNAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ]
    }
}'

如果您在API请求中将 samesite 设置为 None,则不能将 secure 设置为 Never