レート制限

レート制限は、アップストリーム サービスに送信されるリクエスト数を制御するために使用されます。DoS 攻撃の防止、Web スクレイピングの制限、その他の過剰使用の制御に使用できます。レート制限を行わない場合、クライアントはアップストリーム サービスに無制限にアクセスすることができ、可用性の低下を招く恐れがあります。

Rate Limiting プラグイン

Kong Gateway は、Rate Limiting プラグインを使用して、クライアントにレート制限を課します。レート制限を有効にすると、設定可能な期間内にクライアントが送信できるリクエストの数が制限されます。このプラグインは、クライアントをコンシューマーとして、またはリクエストのクライアント IP アドレスで識別できます。

このチュートリアルでは、Rate Limiting FREE プラグインを使用します。Rate Limiting Advanced ENTERPRISE プラグインも提供されています。Advanced では、スライディング ウィンドウ アルゴリズムのサポートや、より高いパフォーマンスを実現する高度な Redis サポートなどの機能が追加されています。

レート制限の管理

以下のチュートリアルでは、Kong Gateway でレート制限を管理する方法を説明します。

必要なもの

このページは、「Kong 入門」チュートリアルの一部です。チュートリアルは最初から順にお読みになることを推奨します。

ステップ 1 の「Kong を始める」では、ツールに必要なものとローカルの Kong Gateway を実行する手順を説明しています。

ステップ 2 の「サービスとルート」では、チュートリアルで使用するモック サービスをインストールする手順を説明しています。

これらのステップをまだ完了していない場合は、先に完了してください。

グローバル レート制限

このプラグインをグローバルにインストールすると、Kong Gateway へのすべてのプロキシ リクエストがレート制限の対象となります。

  1. レート制限の有効化

    レート制限プラグインは Kong Gateway にデフォルトでインストールされており、Admin API で plugins オブジェクトに POST リクエストを送信することで有効にできます。

    curl -i -X POST http://localhost:8001/plugins \
      --data name=rate-limiting \
      --data config.minute=5 \
      --data config.policy=local
    

    このコマンドは、すべてのルートとサービスで、クライアント IP アドレスごとに 1 分間に最大 5 つのリクエストに制限するように、Kong Gateway に指示します。

    policy 設定は、Kong Gateway が制限を取得し、増加させる場所を決定します。詳細は、プラグイン設定のリファレンスを参照してください。

    レスポンスでは、以下のように、ID 情報を含む新しいプラグイン設定が表示されます。

    ...
    "id": "fc559a2d-ac80-4be8-8e43-cb705524be7f",
    "name": "rate-limiting",
    "enabled": true
    ...
    
  2. 検証

    レート制限を設定後、設定した制限時間内に許容値を超えるリクエストを送信することで、レート制限が正しく設定され、機能していることを確認できます。

    以下のコマンドを実行して、6 つのモック リクエストを送信できます。

    for _ in {1..6}; do curl -s -i localhost:8000/mock/request; echo; sleep 1; done

    6 回目のリクエストの後、429 "API rate limit exceeded" エラーが表示されるはずです。

    {
       "message": "API rate limit exceeded"
    }
    

サービス レベルのレート制限

Rate Limiting プラグインは、特定のサービスに対して有効にできます。リクエスト内容は上記と同じですが、サービス URL に POST します。

curl -X POST http://localhost:8001/services/example_service/plugins \
   --data "name=rate-limiting" \
   --data config.minute=5 \
   --data config.policy=local

ルート レベルのレート制限

Rate Limiting プラグインは、特定のルートに対して有効にできます。リクエスト内容は上記と同じですが、ルート URL に POST します。

curl -X POST http://localhost:8001/routes/example_route/plugins \
   --data "name=rate-limiting" \
   --data config.minute=5 \
   --data config.policy=local

コンシューマー レベルのレート制限

Kong Gateway では、コンシューマーはサービスのユーザーを定義する抽象化です。コンシューマー レベルのレート制限を使用して、コンシューマーごとにリクエストの数を制限できます。

  1. コンシューマーの作成

    コンシューマーは、Admin API の consumers オブジェクトを使用して作成されます。

    curl -X POST http://localhost:8001/consumers/ \
      --data username=jsmith
    
  2. コンシューマーに対するレート制限の有効化

    コンシューマー ID を使用して、すべてのルートとサービスで jsmith コンシューマーに対するレート制限を有効にします。

    curl -X POST http://localhost:8001/plugins \
       --data "name=rate-limiting" \
       --data "consumer.username=jsmith" \
       --data "config.second=5"
    

高度なレート制限

大規模な運用シナリオでレート制限を効果的に行うには、高度なテクニックが必要になる場合があります。Rate Limiting プラグインでは、固定時間枠での制限のみ定義できます。多くの場合は、固定時間枠で十分ですが、以下のようなデメリットもあります。

Rate Limiting Advanced ENTERPRISE プラグインは、Rate Limiting プラグインの拡張版であり、追加の制限アルゴリズムとより優れたパフォーマンスを提供します。Rate Limiting Advanced の高度なレート制限アルゴリズムについては、「Kong API でスケーラブルなレート制限アルゴリズムを設計する方法」を参照してください。


« 前へ
サービスとルート

次へ »
プロキシ キャッシュ