すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:ASMイングレスゲートウェイでのセッションアフィニティの実装

最終更新日:Jan 13, 2025

セッションアフィニティ(スティッキーセッションとも呼ばれます)は、ロードバランサーで使用できる機能で、同じユーザーまたはセッションからのすべてのリクエストを同じバックエンドサーバーに渡すことができます。 この機能は、オンラインショッピングカート、ログオンセッション、パーソナライズされた設定など、ユーザーの状態を維持する必要があるシナリオに適用されます。

前提条件

機能紹介

このトピックでは、コンシステントハッシュを使用して実装されたセッションアフィニティについて説明します。 Envoy は現在、HashRing と Maglev コンシステントハッシュをサポートしています。 コンシステントハッシュベースの負荷分散は、ソフトセッションアフィニティを提供するために使用されます。 特定の宛先ホストへのアフィニティは、1 つ以上のホストが宛先サービスに追加または削除されたときに失われる可能性があります。 コンシステントハッシュベースのセッションアフィニティは、負荷分散を改善し、分散システムで優れたパフォーマンスを発揮できます。

ステップ 1:HTTPBin アプリケーションのPod数をスケールアップする

kubeconfig ファイルの情報に基づいて kubectl を使用してデータプレーンに接続し、次のコマンドを実行して HTTPBin アプリケーションのPod数を 3 にスケールアップします。 これらのPodは、セッションアフィニティをテストするために使用されます。

kubectl scale deployment/httpbin --replicas 3

ステップ 2:セッションアフィニティが無効になっている場合のリクエストの分散を確認する

  1. ブラウザのアドレスバーに http://${イングレスゲートウェイの IP アドレス}/status/418 と入力します。 アクセスが成功したら、ページを複数回更新します。

    イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「異なるバージョンのサービスへのトラフィックをルーティングするために Istio リソースを使用する」トピックのステップ 3 のサブステップ 1 イングレスゲートウェイの IP アドレスを取得する をご参照ください。

  2. イングレスゲートウェイのログを表示します。

    1. ASM コンソール にログインします。 左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

    3. [イングレスゲートウェイ] ページで、目的のイングレスゲートウェイを見つけ、[ログセンター] をクリックします。 [ゲートウェイログ] タブで、検索ボックスに and 418 検索条件を追加し、[検索と分析] をクリックします。 左下隅の [raw Logs] タブで、[upstream_addr] インデックスを展開します。

      リクエストが HTTPBin アプリケーションの 3 つのPodにほぼ均等に分散されていることがわかります。

      image

ステップ 3:宛先ルールを作成する

次の内容を使用して宛先ルールを作成します。 詳細については、「宛先ルールの管理」をご参照ください。

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: httpbin
  namespace: default
spec:
  host: httpbin.default.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpCookie:
          name: sticky-session-key
          ttl: 0s

宛先ルールがデプロイされると、イングレスゲートウェイを介して HTTPBin アプリケーションにアクセスするために宛先ルールで指定されたCookieなしでリクエストを開始した場合、イングレスゲートウェイはリクエストの送信元と宛先の IP アドレスとポートに基づいてハッシュ値を生成し、リクエストレスポンスにCookieを追加します。 後続のリクエストがこのCookieを保持している場合、イングレスゲートウェイはこの値を再生成しません。 このCookieは、コンシステントハッシュでハッシュ関数のキー入力として使用され、アクセスするバックエンドを計算します。

セッションアフィニティの有効性は、特定のコンシステントハッシュによって保証されます。 この例では、コンシステントハッシュは指定されていません。 デフォルトでは HashRing が使用されます。 バージョン 1.16 以降の ASM インスタンスは、Maglev コンシステントハッシュをサポートしています。 ビジネス要件に基づいて Maglev コンシステントハッシュを使用できます。

ステップ 4:セッションアフィニティが有効になっている場合のリクエストの分散を確認する

  1. ブラウザのアドレスバーに http://${イングレスゲートウェイの IP アドレス}/status/333 と入力します。 アクセスが成功したら、ページを複数回更新します。

    イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「異なるバージョンのサービスへのトラフィックをルーティングするために Istio リソースを使用する」トピックのステップ 3 のサブステップ 1 イングレスゲートウェイの IP アドレスを取得する をご参照ください。

  2. イングレスゲートウェイのログを表示します。

    1. ASM コンソール にログインします。 左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

    3. [イングレスゲートウェイ] ページで、目的のイングレスゲートウェイを見つけ、[ログセンター] をクリックします。 [ゲートウェイログ] タブで、検索ボックスに and 333 検索条件を追加し、[検索と分析] をクリックします。 左下隅の [raw Logs] タブで、[upstream_addr] インデックスを展開します。

      すべてのリクエストが HTTPBin アプリケーションの同じバックエンド Pod に転送されていることがわかります。

      image

  3. ブラウザの開発者ツールを開き、[ネットワーク] をクリックし、ページを更新して、リクエストをクリックして詳細を表示します。

    Web ページには、宛先ルールで指定された名前と同じ名前のCookieがWebサイトにあることが示されています。 イングレスゲートウェイは、このCookieに基づいてセッションアフィニティを実装します。