1.3.4. Cookie の使用によるルートのステートフル性の維持
Pod の再起動やスケーリングイベント中にステートフルなアプリケーショントラフィックを維持するには、Cookie を使用してスティッキーセッションを設定します。この方法を用いることで、すべての受信トラフィックが同じエンドポイントに到達することが保証され、特定のエンドポイント Pod が変更された場合でも状態の損失を防ぐことができます。
OpenShift Container Platform は Cookie を使用してセッションの永続化を設定できます。Ingress コントローラーは、ユーザーからのリクエストを処理するエンドポイントを選択し、セッション用の Cookie を作成します。Cookie は要求の応答として戻され、ユーザーは Cookie をセッションの次の要求と共に送り返します。Cookie は Ingress Controller に対し、セッションを処理しているエンドポイントを示し、クライアント要求が Cookie を使用して同じ Pod にルーティングされるようにします。
Cookie は、HTTP トラフィックを表示できないので、passthrough ルートで設定できません。代わりに、送信元 IP アドレスをベースに数が計算され、バックエンドを判断します。
バックエンドが変わると、トラフィックが間違ったサーバーに転送されてしまい、スティッキーではなくなります。送信元 IP を非表示にするロードバランサーを使用している場合は、すべての接続に同じ番号が設定され、トラフィックは同じ Pod に送られます。
1.3.4.1. Cookie を使用したルートのアノテーション リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションがセッションの永続性と負荷分散を管理できるようにするには、ルートにカスタムの Cookie 名をアノテーションとして追加します。デフォルトの Cookie を上書きすることで、バックエンドアプリケーションは特定の Cookie を識別して削除できるようになり、必要に応じてエンドポイントの再選択を強制できます。
サーバーが過負荷状態になると、サーバーはクライアントからのリクエストを削除し、他のエンドポイントにリクエストを再分配しようとします。
手順
指定される cookie 名でルートにアノテーションを付けます。
$ oc annotate route <route_name> router.openshift.io/cookie_name="<cookie_name>"ここでは、以下のようになります。
<route_name>- ルートの名前を指定します。
<cookie_name>cookie の名前を指定します。
たとえば、ルート
my_routeに cookie 名my_cookieでアノテーションを付けるには、以下を実行します。$ oc annotate route my_route router.openshift.io/cookie_name="my_cookie"
変数でルートのホスト名を取得します。
$ ROUTE_NAME=$(oc get route <route_name> -o jsonpath='{.spec.host}')ここでは、以下のようになります。
<route_name>- ルートの名前を指定します。
cookie を保存してからルートにアクセスします。
$ curl $ROUTE_NAME -k -c /tmp/cookie_jarルートに接続する際に、直前のコマンドによって保存される cookie を使用します。
$ curl $ROUTE_NAME -k -b /tmp/cookie_jar