セッション・アフィニティーの設定
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 を使用してグローバル・ロード・バランサーを作成する場合は、以下のステップを実行してセッション・アフィニティーを設定します。
- ご使用の IBM Cloud アカウントにログインします。
- グローバル・ロード・バランサーを作成します。
- 以下のCLI変数を設定します
セッションアフィニティクッキーで特定の SameSite 設定を必要とする場合、 CISはデフォルトの動作に依存するのではなく、 Auto
とは異なる samesite
と secure
の値を提供することを推奨します。 こうすることで、 SameSite クッキー属性の値は、設定の変更(すなわち Always Use HTTPS )によって変わることはありません。
session_affinity
: 有効な値は cookie
、none
です。
ttl
: このロードバランサーのセッションアフィニティクッキーが作成されてから期限切れになるまでの時間(秒)。 1800
, '604800
の間で有効な値。 デフォルトは 82800
です。
session_affinity_attributes
: セッションアフィニティークッキーのクッキー属性。
samesite
-
有効な値は以下のとおりです。
Auto
(デフォルト): が有効な場合、セッション・アフィニティ・クッキーは モードを使用します。無効な場合、クッキーは モードを使用します。 常に使用する HTTPSLax
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 ヘッダーによるセッションアフィニティでは、Sticky Zero-Downtimeフェイルオーバーはサポートされません。
以下に例を示します。
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ヘッダー名を に追加します。 HTTP ヘッダー名を session_affinity_attributes.headers
に追加する。
API を使用してグローバル・ロード・バランサーを作成する場合は、以下のステップを実行してセッション・アフィニティーを設定します。
-
正しい変数を使用して API 環境をセットアップします。
-
API コマンドで使用する以下の値を変数に格納します。
session_affinity
は、「none」または「default」と指定されていない限り、ロード・バランサーが使用するセッション・アフィニティーのタイプを指定します。 有効な値は、none、cookie
、ip_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 ヘッダーによるセッションアフィニティでは、Sticky Zero-Downtimeフェイルオーバーはサポートされません。
-
-
すべての変数が開始されたら、セッション・アフィニティーを使用してグローバル・ロード・バランサーを作成します。
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
に設定することはできません。