IBM Cloud Docs
设置会话亲缘关系

设置会话亲缘关系

装入 Web 站点通常需要从 Web 服务器访存多个资产。CIS 会话亲缘关系通过自动将来自同一客户机的请求定向到同一源 Web 服务器来最小化冗余网络请求。

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

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

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

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

使用 CLI 设置会话亲缘关系

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

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

如果你需要在会话亲和 cookie 中使用特定的 SameSite 配置,CIS 建议你为 samesitesecure 提供不同于 Auto 的值,而不是依赖默认行为。 这样,SameSite cookie 属性的值就不会因配置更改(即始终使用 HTTPS )而改变。

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

ttl:负载均衡器会话亲和性cookie创建后过期前的时间(秒)。 有效值介于 "1800"、"604800"之间。 默认邮箱为 82800

session_affinity_attributes:会话关联性cookie的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  -s '{
        "name": "lbtest-updated.cindyuitest01.alan501.cns-foo.com",
        "fallback_pool": "c7e717109b7cf9240dd10fffc0bd146f",
        "default_pools": [
                "c7e717109b7cf9240dd10fffc0bd146f"
        ],
        "description": "Load Balancer for www.example.com",
        "ttl": 30,
        "region_pools": {
                "WNAM": [
                        "c7e717109b7cf9240dd10fffc0bd146f"
                ],
                "ENAM": [
                        "c7e717109b7cf9240dd10fffc0bd146f"
                ]
        },
        "proxied": true,
        "enabled": true,
        "session_affinity": "ip_cookie",
        "session_affinity_attributes": {
                "samesite": "None",
                "secure": "Always",
                "drain_duration": 100
        }
}'

使用 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