ルート
ルートは、リクエストがKong Gatewayに到達した後にサービスに送信される方法(および送信されるかどうか)を決定します。サービスがバックエンドAPIを表す場合、ルートはクライアントに公開される内容を定義します。
1 つのサービスに複数のルートを含めることができます。ルートが一致すると、 Kong Gatewayリクエストを関連付けられたサービスにプロキシします。
ルートとサービスのやり取り
ルートをサービスと組み合わせると、 Kong Gatewayを使用してサービスをアプリケーションに公開できます。Kong Gatewayはルートを使用してアプリケーションからサービスを抽象化します。アプリケーションは常にルートを使用してリクエストを行うため、バージョン管理などのサービスの変更は、アプリケーションがリクエストを行う方法に影響しません。また、ルートを使用すると、同じサービスを複数のアプリケーションで使用したり、使用するルートに基づいて異なるポリシーを適用したりできます。
たとえば、example_service
サービスにアクセスする必要がある外部アプリケーションと内部アプリケーションがある場合、サービス拒否が発生しないように、外部アプリケーションがサービスをクエリできる頻度を制限する必要があります。内部アプリケーションがサービスを呼び出すときに、サービスに対してレート制限ポリシーが設定されている場合は、内部アプリケーションも制限されます。ルートはこの問題を解決できます。
上記の例では、/external
と/internal
という 2 つのルートを作成し、両方のルートを example_service
にポイントすることができます。 ポリシーを構成して /external
ルートの使用頻度を制限し、そのルートを外部クライアントが使用できるように通信することができます。外部クライアントが /external
を使用して Kong Gateway 経由でサービスにアクセスしようとすると、レート制限が課せられます。ただし、内部クライアントが /internal
を使用して Kong Gateway でサービスにアクセスする場合、内部クライアントは制限されません。
要求のルーティング方法
受信リクエストごとに、Kong Gatewayは、定義されたルートに基づいてどの
サービスがそれを処理するかを決定する必要があります。リリース3.0で、
Kong Gatewayでは、2つのモードで実行できる新しいルーターが導入されました。
traditional_compat
モードは、
以前のリリースと同じように構成され、expressions
モードは、
新しい構成スキームを使用します。新しいデプロイメントでは、
よりパワフルで式が利用できる表現ルーターの使用をおすすめします。
ルーターのデフォルトモードはtraditional_compat
です。
次のセクションでは、その動作方法について説明します。traditional_compat
モードは、
Kong Gateway3.x以前のバージョンのルーターと同様に動作するよう設計されています。
expressions
モードの説明については、
式を使用してルートを設定する方法を参照してください。
一般的に、ルーターは優先順位に基づいてすべての定義済みルートに順序を付け、定義に一定する最も優先度の高いルートを使用してリクエストを処理します。 優先順位が同じで定義が一定するルートが複数ある場合、どの一致ルートを使用するかは定義されていません。Kong Gatewayは内部データ構造の整理方法に従ってそのいずれかを使用します。
ルートにプレフィックスまたは正規表現のパスが含まれている場合、ルートの優先順位はパスごとに個別に計算され、リクエストはそれに応じてルーティングされます。
traditional_compat
モードでは、ルートの優先度は重要度の降順で次のように決定されます。
- 優先ポイント
- ワイルドカードホスト
- ヘッダー数
- 正規表現と接頭辞パス
優先ポイント
ルートにmethods
、host
、headers
、snis
が存在するごとに、そのルートに「優先ポイント」が追加されます。「優先ポイント」の数によってルートが考慮される全体的な順序が決まります。「優先ポイント」値が高いルートは低い値のものより先に考慮されます。そのため、あるルートでmethods
が定義済みであり、2番目のルートでmethods
とheaders
が定義済みである場合、2番目のルートは最初のルートより前に考慮されます。
ワイルドカードホスト
同じ「優先ポイント」の値を持つルートのうち、ワイルドカードのホスト指定があるルートは、ワイルドカードホストが指定されていない(またはホストがない)ルートより後に考慮されます。
ヘッダー数
結果のグループは、指定されたヘッダーの数が多いルートが、ヘッダーの数が少ないルートよりも高いプライオリティを持つようにソートされます。
正規表現と接頭辞パス
結果として得られる優先度の等しいルートのグループの中で、ルーターは ルートを次のようにソートします。
- 正規表現パスを持つルートが最初に考慮され、
regex_priority
値によって順序付けられます。regex_priority
値が高いルートは、regex_priority
値が低いルートより優先して考慮されます。 - 正規表現パスを持たないルートは、パスの長さ順に並べられます。 パスが長いルートは、 パスが短いルートより優先して考慮されます。
複数のパスがあるルートの場合、優先順位の決定については各パスが個別に考慮されます。実際には、これはそれぞれのパスに別々のルートが存在することを意味します。
正規表現
ルートで使用される正規表現は、シンプルなプレフィックスルートよりも評価に多くのリソースを使用します。リクエストをルーティングするために多くの正規表現を評価する必要がある場合、Kong Gatewayによって生じるレイテンシが悪化し、CPU使用率が増加する可能性があります。とのインストールで 何千ものルート、正規表現のルートを単純なものに置き換えます プレフィックスルートは、スループットとレイテンシーを向上させることができます
Kong Gateway。 もし正規表現を使わなければならないなら ルーターの表現を使用して、パスマッチを実行する必要があります この場合、Kong Gateway のパフォーマンスが大幅に向上します。
バージョン3.0以降は、ルーターがexpressions
またはtraditional_compatible
モードで動作している場合、
Kong Gatewayはプログラミング言語Rustが同梱されている通常の式エンジンを使用します。
以前のバージョンでは、
正規表現の評価に
PCREライブラリを使用していました。2つのエンジンは大部分で
互換性はありますが、両者の間には微妙な違いがあります。正規表現
ルートを機能させるのに問題がある場合は、お客様が使用するエンジンに
関係するドキュメントを参照してください。
リクエストURLをルートで動的に書き換える
ルートは動的に構成可能で、リクエストされたURLをアップストリームの別のURLに書き換えることができます。たとえば、従来のアップストリームエンドポイントに/api/old/
のようなベースURIがある場合に、パブリックアクセスが可能なAPIエンドポイントの名前を/new/api
に変更する必要があるとします。サービスのアップストリームエンドポイントを新しいURLにルーティングするには、パス/api/old/
と/new/api
というパスを持つルートのあるサービスを設定できます。
Kong Gatewayは、ルートパスの正規表現キャプチャグループとRequest Transformer Advancedプラグインを使用することでより複雑なURL Rewriteケースも処理することができます。たとえば、/api/<function id="sl-md0000000">/old
を/new/api/<function id="sl-md0000000">
に置き換える必要がある場合にこれを使用できます。
Kong Gateway 3.0.x以降には新しいルーターが同梱されています。新しいルーターは、正規表現のキャプチャグループを使用して、Expressionsと呼ばれるドメイン固有の言語を使用してルートを記述できます。Expressionsは、正規表現を使用してルートまたはパスをパターンとして記述できます。Expressionsを使用してルーターを設定する方法の詳細については、Expressionsを使用してルートを構成する方法を参照してください。
ルート用プラグイン
プラグインを使用してインターフェイスのルートを取ることもできます。これにより、 Kong Gatewayでのルーティング機能がさらに強化されます。
詳細については、次のプラグインを参照してください。
- LDAP Authentication Advanced: ユーザー名とパスワードの保護により、 Kong Gatewayクラスター、ルート、およびサービスを保護します。
- Mutual TLS Authentication:クライアント証明書とTLS相互認証を使用してルートとサービスを保護します。
- Route By Header:リクエストヘッダーに基づいてリクエストをルーティングします。
- Route Transformer Advanced:アップストリームサーバー、ポート、またはパスを変更してルーティングを変換します。
ルート設定
サービスに対してリクエストを開始する前に、そのサービスにルートを追加する必要があります。
次の方法を使用して、 Kong Gatewayのサービスへのルートを追加できます。