セッション アフィニティ ( セッション永続化 または スティッキー セッションとも呼ばれます) は、クライアントの要求が常に同じサーバーに送信されるように負荷分散で使用される手法です。 これは、セッション変数または特定のサーバー上のローカル キャッシュ (一般にステートフル アプリケーションと呼ばれます) にユーザー データを格納するアプリケーションにとって重要です。
セッション アフィニティを使用すると、Application Gateway for Containers は最初の応答の Set-Cookie ヘッダーに Cookie を表示します。 クライアントが今後の要求で Cookie を提示した場合、Application Gateway for Containers は Cookie を認識し、トラフィックを同じバックエンド ターゲットに転送します。 次のシナリオ例を見てみましょう。
前の図では、次の手順を示します。
- クライアントは、Application Gateway for Containers (Application Gateway for Containers) フロントエンドへの要求を開始します。
- Application Gateway for Containers は、要求の負荷分散に使用できる多数のポッドの 1 つを選択します。 この例では、使用可能な 4 つのポッドのうち、ポッド C が選択されていることを前提としています。
- ポッド C は、Application Gateway for Containers に応答を返します。
- Application Gateway for Containers では、ポッド C からのバックエンド応答に加えて、ルーティングに使用される一意に生成されたハッシュを含む Set-Cookie ヘッダーが追加されます。
- クライアントは、前の手順で設定したセッション アフィニティ Cookie と共に、Application Gateway for Containers に別の要求を送信します。
- Application Gateway for Containers は Cookie を検出し、ポッド C を選択して要求を処理します。
- ポッド C は、Application Gateway for Containers に応答します。
- Application Gateway for Containers がクライアントに応答を返す
使用状況の詳細
セッション アフィニティ は、次のプロパティと特性によって定義されます。
名前 | 説明 |
---|---|
アフィニティタイプ | 有効な値は、アプリケーション Cookie またはマネージド Cookie です。 |
cookieName | affinityType が application-cookie の場合は必須。 これは Cookie の名前です。 |
クッキー期間 | affinityType が application-cookie の場合は必須。 これは、Cookie の有効期間 (秒) です。 |
マネージド Cookie アフィニティの種類では、Cookie がクライアントに提供されるときに、Application Gateway は定義済みの値を使用します。
- Cookie の名前は次のとおりです:
AGCAffinity
。 - Cookie の期間 (有効期間) は 86,400 秒 (1 日) です。
-
cookieName
とcookieDuration
のプロパティと値は破棄されます。
アプリケーション アフィニティの種類では、Cookie の名前と期間 (有効期間) を明示的に定義する必要があります。
セッション アフィニティの構成方法
セッション アフィニティは、定義された HTTPRoute を対象とする RoutePolicy リソースで定義できます。
sessionAffinity
またはaffinityType
のいずれかのapplication-cookie
でmanaged-cookie
を指定する必要があります。 この例では、affinityType として application-cookie
を使用し、Cookie の名前と有効期間を明示的に定義します。
有効期間が 3,600 秒 (1 時間) の nomnom
と呼ばれる定義済みの 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: 3600s
EOF