セッション・アフィニティーの設定

Web サイトをロードするには、通常、Web サーバーから複数のアセットを取り出す必要があります。 CIS セッション・アフィニティーは、同じクライアントから同じ発信元 Web サーバーに要求を自動的に送信することにより、冗長ネットワーク要求を最小化します。

CIS は、クライアントへの初期応答で Cookie を設定します。 その後のクライアント要求でその Cookie を使用することによって、同じ起点が使用不可になっていない限り、同じ起点に要求が送信されるようにします。

CIS のセッション・アフィニティーを有効にすると、以下のようになります。

  • クライアントが最初の要求を行うと、CIS がクライアントに CFLib Cookie を設定します。 その Cookie が要求の転送先の起点をエンコードします。
  • 同じクライアントからのその後の要求は、その Cookie の存在している間、起点サーバーが正常な状態であればその起点に転送されます。
  • Cookie の有効期限が切れるか、起点サーバーが正常でない状態になると、CIS が、適切なフェイルオーバー起点をエンコードする新しい Cookie を設定します。

カスタム・セッション TTL (秒単位) が指定されていなければ、セッションはいずれもデフォルトで 23 時間となります。カスタム・セッション TTL は 30 分から 7 日の範囲内で指定できます。 TTL に対応するには、セッション・アフィニティー Cookie が必要です。 Always Use HTTPS 有効な場合、セッション・クッキーは安全です。 さらに、クロスサイト・スクリプティング攻撃を防止するために、Cookie では HttpOnly が常に有効になっています。

CLIからのセッションアフィニティ設定

CLIからグローバルロードバランサーを作成する場合、セッションアフィニティを設定するには次の手順を実行します:

  1. ご使用の IBM Cloud アカウントにログインします。
  2. グローバル・ロード・バランサーを作成します。
  3. 以下の CLI 変数を設定してください:

セッションアフィニティクッキーで特定の SameSite 設定が必要な場合、 CIS ではデフォルト動作に依存せず、 Auto``samesitesecure に対してと異なる値を指定することを推奨します。 この方法では、設定変更(具体的には「 常に HTTPS を使用する」 設定)によっても、 SameSite クッキー属性の値は変更されません。

session_affinity: 有効な値は cookienone です。

ttl: このロードバランサーのセッションアフィニティ Cookie が作成されてから有効期限が切れるまでの時間(秒単位)。 1800, '604800 の間で有効な値。 デフォルトは 82800 です。

session_affinity_attributes: セッションアフィニティクッキーの属性。

samesite

有効な値は以下のとおりです。 * Auto (デフォルト): が有効な場合、セッション・アフィニティ・クッキーは モードを使用します。無効な場合、クッキーは モードを使用します。 常に使用する HTTPS Lax None * None: クッキーはすべてのリクエストで送信されます。 * Lax: クッキーは頂点ドメイン('example.com など)にのみ送信されます。 * Strict: クッキーは最初の当事者(訪問したドメイン)によって作成されます。

secure

有効な値は以下のとおりです。 * Auto (デフォルト): Always Use HTTPS が有効な場合、セッション・アフィニティ・クッキーは 属性の を使用します。無効な場合、クッキーは を使用しません。 samesite secure secure * Always: secure は常に設定され、クッキーは HTTPS 接続でのみ送信されます。 * Never secure は設定されないので、クッキーは HTTPS 接続と HTTP 接続の両方で送信できます。

drain_duration

オプション。 オリジンがアクティブなセッションを排出する時間(秒)。 このフィールドはロードバランサでセッションアフィニティが有効になっているときだけ使われます。

zero_downtime_failover

オプション。 過渡的なネットワーク問題が発生している間、プール内のエンドポイントにトラフィックを自動的に送信します。 数値は以下の通り: * none(デフォルト):フェイルオーバーが行われず、ユーザーにエラーが表示される可能性があります。 * temporary: 元々ピン留めされていたエンドポイントが利用可能になるまで、トラフィックは他のエンドポイントに送られる。 * sticky: セッションアフィニティクッキーが更新され、それ以降のリクエストは必要に応じて新しいエンドポイントに送られる。

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ヘッダー名を に追加します。 HTTP ヘッダー名を session_affinity_attributes.headers に追加する。

API を使用してグローバル・ロード・バランサーを作成する場合は、以下のステップを実行してセッション・アフィニティーを設定します。

  1. 正しい変数を使用して API 環境をセットアップします。

  2. API コマンドで使用する以下の値を変数に格納します。

    • session_affinity は、「none」または「default」と指定されていない限り、ロード・バランサーが使用するセッション・アフィニティーのタイプを指定します。 有効な値は、none、 cookieip_cookie です。
    • session_affinity_ttl。これは、セッション・アフィニティーの存続時間です。
    • session_affinity_attributes。以下が含まれます。
      • samesite は、アフィニティー Cookie の SameSite 属性を構成します。 有効な値は 'Auto, 'Lax, 'None, 'Strict; デフォルトは 'Auto

      • secure は、セッション・アフィニティー Cookie の Secure 属性を構成します。 有効な値は '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リクエストで samesiteNone に設定した場合、 secureNever に設定することはできません。