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

Container Service for Kubernetes:AScript を使用して ALB Ingress のルーティングルールをカスタマイズする

最終更新日:Mar 15, 2025

Application Load Balancer(ALB)Ingress の基本的なルーティングルールは、静的ルーティングに適しています。たとえば、固定パスに基づいてルーティングを構成したり、リクエストヘッダーでトラフィックをフィルタリングしたりできます。ただし、ALB Ingress の基本的なルーティングルールでは、多数のルーティングルールが必要な場合やビジネスロジックが複雑な場合のトラフィックルーティング要件を満たせない場合があります。Alibaba Cloud は、プログラム可能なスクリプト機能である AScript を提供しており、前述のシナリオでのルーティングルールの構成を簡素化できます。AScript は、正規表現に基づくコンテンツマッチング、機密コンピューティング、コンテンツの書き換えなどの動的ロジック処理機能を提供します。このトピックでは、AScript を使用して ALB Ingress のルーティングルールを構成する方法について説明し、例を示します。

サンプルシナリオ

企業は ALB Ingress を使用して外部サービスを提供しており、異常なリクエストが頻繁に発生しています。悪意のあるリクエストと未確認のリクエストが多数発生すると、バックエンドサーバーの負荷が大幅に増加します。その結果、アプリケーションの応答速度が低下し、ユーザーエクスペリエンスが低下します。企業は、次のルールに基づいて異常なリクエストをブロックするように ALB Ingress を構成します。

ALB Ingress は、リクエストを受信すると、リクエストが次の要件を満たしているかどうかを確認します。

  • クライアントは、example.com ドメイン名を使用して ALB Ingress にアクセスします。

  • リクエストの URI は /order/create で始まります。

  • HTTP リクエストの User-Agent(UA)ヘッダーには、trusted 文字列が含まれていません。

リクエストが上記の要件を満たしている場合、ALB Ingress は HTTP ステータスコードを 403 に設定し、次の応答メッセージを返します:The order data is abnormal。それ以外の場合、ALB Ingress はリクエストをバックエンドサービスに転送します。

ALB はドメイン名と URL に基づいてトラフィックをルーティングする転送ルールをサポートしていますが、詳細なユーザー行動分析における ALB の機能は限られています。AScript を使用すると、詳細なユーザー行動分析の要件を満たすことができます。詳細については、「手順」をご参照ください。

課金

デフォルトでは、AScript は ConfigMap の scriptContent パラメーターに 25 行のコードの無料クォータを提供します。コード行を追加すると、超過分に対して課金されます。課金ルールの詳細については、「ALB 課金ルール」をご参照ください。

前提条件

手順

AScript を使用して ALB Ingress を構成する場合は、AScript を使用して ConfigMap にスクリプトを構成し、使用する AlbConfig に ConfigMap を関連付ける必要があります。

ConfigMap にスクリプトを構成する

  1. ascript_configmap.yaml という名前のファイルを作成し、次のコードをファイルにコピーします。

    次のサンプルコードは、AScript を使用して作成されたスクリプトの例を示しています。サンプルシナリオ セクションで説明されている問題を解決するために、このスクリプトを使用できます。リクエストが host example.com host から送信され、リクエスト URL に /order/create が含まれ、リクエストの UA ヘッダーに trusted 文字列が含まれていない場合、ALB Ingress は HTTP ステータスコード 403 と ConfigMap で指定されたエラーメッセージを返します。この例では、5 行のコードが指定されています。

    AScript の構文と変数の詳細については、「参考資料」をご参照ください。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ascript-rule
      namespace: default
    data:
      scriptContent: |
        if and(eq($host,'example.com'),eq(get(split($request_uri, '?'),1),'/order/create')){
          if not(match_re($http_user_agent,'.*trusted.*')){
              exit(403,'{"code":10063,"msg":"The order data is abnormal","data":{}}')
          }
        }
  2. 次のコマンドを実行して、ConfigMap を作成します。

    kubectl apply -f ascript_configmap.yaml

スクリプトを AlbConfig に関連付ける

  1. 次のコマンドを実行して、AlbConfig を変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
  2. aScriptConfig フィールドを AlbConfig 構成に追加して、スクリプトを AlbConfig に関連付けます。変更を保存して終了すると、スクリプトが有効になります。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: default
    spec:
      config:
        name: alb-test-1
        addressType: Intranet
      listeners:
      - port: 80
        protocol: HTTP
        aScriptConfig: # スクリプトの詳細。
        - aScriptName: ascript-rule # スクリプトの名前。
          enabled: true # スクリプトを有効にするかどうかを指定します。
          position: RequestFoot # スクリプトを実行する位置。RequestFoot の値は、Ingress のルーティングルールが適用された後にスクリプトが実行されることを指定します。
          configMapNamespace: default # スクリプトを格納する ConfigMap の名前空間。
    説明

    AScript を使用して構成されたスクリプトの実行位置の詳細については、「AScript」をご参照ください。

結果の確認

  1. 次のコマンドを実行して、ALB Ingress にアクセスします。応答に 403 Forbidden エラーコードと {"code":10063,"msg":"The order data is abnormal","data":{}} エラーメッセージが含まれている場合、AScript を使用して構成されたスクリプトが有効になっています。

    curl -v  -H "Host:example.com" -H "User-Agent:suspicious test" http://<ドメイン名>/order/create

    image

  2. ALB コンソール で、ALB インスタンスのリスナーに構成されているスクリプトを表示できます。

    image

参考資料