Citrix ADC

レスポンダーポリシーを持つ gRPC

レスポンダー付きの gRPC ポリシー構成では、Citrix ADCアプライアンスがHTTP/2プロトコルを介してgRPC要求に対して異なる応答を提供する方法について説明します。ユーザーがWebサイトのホームページを要求するときは、各ユーザーの場所やユーザーが使用しているブラウザーに応じて、異なるホームページを提供することをお勧めします。

次の図は、相互作用するコンポーネントを示しています。

レスポンダーポリシーを持つ gRPC

  1. アプライアンスでレスポンダ機能を有効にします。
  2. カスタム応答を生成する、要求を別のWebページにリダイレクトする、または接続をリセットするようにレスポンダーアクションを構成します。
  3. アクションを実行する必要があるgRPC要求(トラフィック)を決定するためのレスポンダーポリシーを構成します。
  4. レスポンダーポリシーを負荷分散仮想サーバーにバインドして、トラフィックがポリシー式に一致するかどうかを調べます。
  5. レスポンダーポリシーを使用すると、gRPC ステータスコードに基づいて以下を実行できます。

CLI を使用して gRPC コール終了をレスポンダポリシーで設定します

レスポンダポリシーを使用してgRPCコールの終了を設定するには、次の手順を実行する必要があります。

  1. レスポンダー機能を有効にする
  2. レスポンダーアクションを追加する
  3. レスポンダーポリシーを追加し、レスポンダーアクションを関連付ける
  4. レスポンダーポリシーを負荷分散仮想サーバーにバインドする

レスポンダー機能を有効にする

レスポンダー機能を使用するには、最初にそれを有効にする必要があります。

コマンドプロンプトで入力します。

enable ns responder

レスポンダーアクションを追加する

この機能を有効にした後、バックエンドサーバーから返されたステータスコードに基づいてgRPC応答を処理するためのレスポンダーアクションを構成する必要があります。

コマンドプロンプトで入力します。

add responder action <name> <type>

例:

add responder action grpc-act respondwith "HTTP/1.1 200 OK\r\nServer: NS-Responder\r\nContent-Type:application/grpc\r\ngrpc-status: 12\r\ngrpc-message: Not Implemented\r\n\r\n" + "Method: " + HTTP.REQ.URL+ "is not implemented."

レスポンダーポリシーの追加

レスポンダーのアクションを構成したら、次にレスポンダーポリシーを構成して、Citrix ADCアプライアンスが応答するgRPC リクエストを選択する必要があります。

コマンドプロンプトで入力します。

add responder policy <name> <expression> <action> [<undefaction>]-appFlowaction <actionName> 例:

add responder policy grpc-resp-pol1 HTTP.REQ.URL.NE(“/helloworld.Greeter/SayHello”) grpc-act

レスポンダーポリシーを負荷分散仮想サーバーにバインドする

ポリシーを有効にするには、gRPCサービスを使用してポリシーを負荷分散仮想サーバーにバインドする必要があります。

コマンドプロンプトで入力します。

bind responder global <policyName> <priority> [<gotoPriorityExpression> [-type <type>] [-invoke (<labelType> <labelName>)]

例:

bind lb vserver lb-grpc svc-grpc -policyName grpc-resp-pol1 –priority 100

レスポンダーポリシーの詳細については、「 レスポンダーポリシー 」トピックを参照してください。

gRPC プロトコルバッファフィールドを照合するためのポリシー式

Citrix ADCアプライアンスは、gRPC構成で次のポリシー式をサポートしています。

  • gRPC プロトコルバッファフィールドアクセス。任意の gRPC API 呼び出しは、メッセージフィールド番号と新しいポリシー式と一致します。PI 構成では、一致は「フィールド番号」と「API パス」のみを使用して行われます。

  • gRPC ヘッダーフィルタリング。gRPC の「HttpProfile」パラメータは、gRPC 解析のデフォルトの動作(gRPC ポリシー式を含む)を調整するために使用されます。gRPC ポリシー式には、次のパラメータが適用されます。

    • gRPCLengthDelimitation。これはデフォルトで有効になっており、プロトコルバッファに長さ区切りのメッセージが表示されることを想定しています。

    • grpCholdLimit。デフォルト値は131072です。これは、プロトコルバッファメッセージの最大サイズ(バイト単位)です。また、文字列の最大長と最大 ‘byte’ フィールド長でもあります。

CLI を使用して gRPC アドバンスポリシー式を設定します

コマンドプロンプトで入力します。

set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) -gRPCLengthDelimitation ( ENABLED | DISABLED ) -gRPCHoldLimit <int>

例:

set ns httpProfile http2gRPC -http2 ENABLED -gRPCLengthDelimitation ENABLED -gRPCHoldLimit 131072

GUI を使用して gRPC ヘッダーフィルタリングパラメータを設定する

  1. System > Profilesに移動してHTTP Profilesをクリックします。

  2. [ HTTP プロファイルの作成 ] ページで、[ HTTP/3 ] セクションまでスクロールダウンし、[ gRPC の長さの区切り] を選択します。

    gRPC の長さの区切り

次のポリシー式の例は、メッセージ 5、サブメッセージ 4、およびフィールド 3 の値を示しています。これは 2 に等しい 32 ビットの int です。

http.req.body(1000).grpc.message(5).message(4).int32(3).eq(2)

gRPC プロトコルバッファメッセージフィールドを番号で照合するために、次のポリシー式が追加されます。

  • message
  • ダブル
  • フロート
  • int32
  • int64
  • uint32
  • uint64
  • sint64
  • sint32
  • fixed32
  • fixed64
  • sfixed32
  • sfixed64
  • bool
  • string
  • 列挙型
  • bytes

API パスマッチング

API パスマッチングは、複数の API が使用されている場合に、正しい gRPC API 呼び出しを照合するために使用されます。API パスと一致します。これは HTTP リクエストの ‘: path’ 疑似ヘッダーにあります。

例:

http.req.header(":path").eq("acme.inventory.v1/ListBooks")
レスポンダーポリシーを持つ gRPC