ADC

gRPC ブリッジング

クライアントがリクエストを送信するとき HTTP/1.1 プロトコルでは、NetScaler ADCアプライアンスはgRPCリクエストのブリッジングをサポートします HTTP/1.1 gRPCサーバーに準拠しているプロトコル HTTP/2 プロトコル。同様に、リバースブリッジでは、アプライアンスは HTTP/2 プロトコルでクライアントの gRPC 要求を受信し、HTTP/1.1 プロトコルの gRPC サーバーに準拠して gRPC 要求に対してリバースブリッジを実行します。

gRPC ブリッジングの仕組み

このシナリオでは、Citrix ADCアプライアンスはHTTP/1.1接続で受信したgRPCコンテンツをシームレスにブリッジし、HTTP/2経由でバックエンドのgRPCサーバーに転送します。

gRPC エンドツーエンド構成機能図

次の図は、gRPC ブリッジ構成でコンポーネントが互いにどのように相互作用するかを示しています。

  1. gRPCリクエストが送信されると、Citrix ADCアプライアンスは接続がHTTP/1.1で、コンテンツタイプがアプリケーション/grpcであるかどうかを確認します。HTTP/1.1 リクエストは、次の疑似ヘッダーに変換されます。
  2. Content-Type ヘッダーで示されているように HTTP/1.1 接続で gRPC リクエストを受信すると、ADC アプライアンスはそのリクエストを以下に示すように HTTP/2 経由の gRPC に変換します。
    :method: Method-name in HTTP/1.1 request
    :path: Path is HTTP/1.1 request
    content-type: application/grpc
<!--NeedCopy-->
  1. ポリシー評価に基づいて、負荷分散仮想サーバー(gRPC サービスがバインドされている)は要求を終了するか、HTTP/2フレームを介してバックエンドgRPCサーバーに転送します。
  2. gRPC サーバーから HTTP/2 接続で応答を受信すると、アプライアンスは HTTP/2 トレーラーを受信するまでバッファリングを行い、次に gRPC ステータスコードを確認します。gRPC エラーステータスがゼロ以外の場合、アプライアンスはマッピング HTTP ステータスコードを探し、適切な HTTP/1.1 エラー応答を送信します。

CLI を使用して gRPC ブリッジングを設定する

gRPC ブリッジを設定するには、次の手順を実行する必要があります。

  1. HTTP/2 および HTTP/2 ダイレクトが有効な状態で HTTP プロファイルを追加
  2. HTTP パラメータでグローバルバックエンド HTTP/2 サポートを有効にする
  3. SSL/HTTP タイプの負荷分散仮想サーバーを追加し、HTTP プロファイルを設定します
  4. gRPCエンドポイントのサービスを追加し、HTTPプロファイルを設定します
  5. gRPC エンドポイントサービスを負荷分散仮想サーバーにバインド
  6. gRPC ステータスコードを 0 以外の gRPC ステータスの HTTP レスポンスにマッピングします
  7. gRPC バッファリングを時間またはサイズで設定

HTTP/2 および HTTP/2 ダイレクトが有効な状態で HTTP プロファイルを追加します

設定を開始するには、HTTP プロファイルで HTTP/2 機能を有効にする必要があります。クライアントが HTTP 1.1 リクエストを送信すると、アプライアンスはリクエストをブリッジしてバックエンドサーバーに転送します。

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

add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )]

例:

add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

HTTP パラメータでグローバルバックエンド HTTP/2 サポートを有効にする

Citrix ADCコマンドラインを使用して、サーバー側でHTTP/2サポートをグローバルに有効にするには。

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

set ns httpParam -http2ServerSide( ON | OFF )

例:

set ns httpParam -http2ServerSide ON

SSL/HTTP タイプの負荷分散仮想サーバーを追加し、HTTP プロファイルを設定します

NetScaler ADC コマンドインターフェイスを使用して負荷分散仮想サーバーを追加するには

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

add lb vserver <name> <service type> [(<IP address>@ <port>)] [-httpProfileName <string>]

例:

add lb vserver lb-grpc HTTP 10.10.10.10 80 -httpProfileName http2gRPC

注:

SSL タイプの負荷分散仮想サーバーを使用している場合は、サーバー証明書をバインドする必要があります。詳細については、「 サーバー証明書のバインド 」のトピックを参照してください。

gRPCエンドポイントのサービスを追加し、HTTPプロファイルを設定します

Citrix ADC コマンドインターフェイスを使用して HTTP プロファイルで gRPC サービスを追加するには

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

add service <name> (<IP> | <serverName> ) <serviceType> <port> [-httpProfileName <string>]

例:

add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC

gRPC エンドポイントサービスを負荷分散仮想サーバーにバインド

CLI を使用して gRPC エンドポイントサービスを負荷分散仮想サーバーにバインドすること。

コマンドインターフェイスで、次のように入力します。

bind lb vserver <name> <serviceName>

例:

bind lb vserver lb-grpc svc-grpc

gRPC ステータスコードを HTTP/1.1 レスポンスの HTTP ステータスコードにマッピングします

gRPC ブリッジシナリオでは、gRPC サービスはリクエストに gRPC ステータスコードで応答します。アプライアンスは gRPC ステータスコードを対応する HTTP 応答コードと理由フレーズにマッピングします。マッピングは以下の表に基づいて行われます。送信時のNetScaler ADCアプライアンス HTTP/1.1 クライアントへの応答は、HTTPステータスコードと理由フレーズを送信します。

gRPC ステータスコード HTTP レスポンスステータスコード HTTP 応答理由フレーズ
OK = 0 200 OK
キャンセル済み = 1 499 *
不明 = 2 500 内部サーバーエラー
引数が無効です = 3 400 不正な要求
期限超過 = 4 504 ゲートウェイタイムアウト
見つかりません = 5 404 *
すでに存在する = 6 409 コンフリクト
アクセス拒否 = 7 403 禁止
認証されていない = 16 401 無許可
リソースを使い果たした = 8 429 *
失敗_前提条件 = 9 400 不正な要求
中止されました = 10 409 コンフリクト
範囲外 = 11 400 不正な要求
実装されていない = 12 501 未実装
インターナル = 13 500 内部サーバーエラー
ご利用いただけません = 14 503 サービスは利用できません
データ損失 = 15 500 内部サーバーエラー

gRPC バッファリングを時間またはサイズで設定

Citrix ADCアプライアンスは、レスポンストレーラーが受信されるまで、バックエンドサーバーからのgRPC応答をバッファリングします。これにより、双方向の gRPC 呼び出しが中断されます。また、gRPC 応答が大きい場合は、応答を完全にバッファリングするために大量のメモリを消費します。この問題を解決するために、gRPC ブリッジ設定が拡張され、バッファリングを時間やサイズによって制限できるようになりました。バッファサイズまたは時間制限がしきい値を超えると、いずれかの制限がトリガーされた場合でも(設定されたバッファサイズ内でトレーラーが受信されないか、設定されたタイムアウトが発生した場合)、アプライアンスはバッファリングを停止し、クライアントに応答を転送します。その結果、設定されたポリシーとその表現(grpc-status コードに基づく)が期待どおりに機能しません。

CLI で gRPC バッファリングを時間やサイズによって制限するには、新しい HTTP プロファイルを追加するタイミングを設定するか、既存のプロファイルを変更するときに設定できます。

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

add ns httpProfile http2gRPC [-grpcHoldLimit <positive_integer>] [-grpcHoldTimeout <positive_integer>]

または

set ns httpProfile http2gRPC [-grpcHoldLimit <positive_integer>] [-grpcHoldTimeout <positive_integer>]

各項目の意味は次のとおりです。

grpcholdlimit。トレーラーが受信されるまで gRPC パケットをバッファできる最大サイズ (バイト単位)。パラメータと任意のパラメータの両方を設定できます。

デフォルト値:131072 最小値:0 最大値:33554432

grpcholdtimeout。トレーラーが受信されるまでの gRPC パケットのバッファリングに許容される最大時間(ミリ秒単位)。値は 100 の倍数でなければなりません。 デフォルト値:1000 最小値:0 最大値:180000

例:

add httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000 set httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000

GUI を使用して gRPC ブリッジを設定

Citrix ADC GUIを使用してgRPCブリッジを構成するには、次の手順を実行します。

HTTP/2 および HTTP/2 ダイレクトが有効な状態で HTTP プロファイルを追加

  1. System > Profilesに移動してHTTP Profilesをクリックします。
  2. HTTP プロファイルで HTTP/2 を選択します。

HTTP パラメータでグローバルバックエンド HTTP/2 サポートを有効にする

  1. [ システム] > [設定] > [HTTP パラメータ] に移動します。
  2. HTTP パラメータの設定 」ページで、「 サーバー側の HTTP/2 」オプションを選択します。
  3. [OK] をクリックします。

SSL/HTTP タイプの負荷分散仮想サーバーを追加し、HTTP プロファイルを設定します

  1. Traffic Management > Load Balancing > Virtual Serversに移動します。
  2. [ 追加 ] をクリックして gRPC トラフィック用の負荷分散仮想サーバーを作成します。
  3. Load Balancing Virtual ServerページでProfilesをクリックします。
  4. プロファイル 」セクションで、プロファイルの種類を「HTTP」として選択します。
  5. [ OK]、[ 完了]の順にクリックします。

gRPC ブリッジンググローバルバックエンド HTTP/2 によるロードバランシングの有効化

gRPC エンドポイント用サービスの追加と HTTP プロファイルの設定

  1. [Traffic Management]>[Load Balancing]>[Services] の順に移動します。
  2. [ 追加 ] をクリックして gRPC トラフィック用のアプリケーションサーバーを作成します。
  3. 負荷分散サービスのページでプロファイルセクションに移動します
  4. [ プロファイル] に gRPC エンドポイントの HTTP プロファイルを追加します
  5. [ OK]、[ 完了]の順にクリックします。

gRPC エンドポイントを負荷分散仮想サーバーにバインドする

  1. Traffic Management > Load Balancing > Virtual Serversに移動します。
  2. [ 追加 ] をクリックして gRPC トラフィック用の負荷分散仮想サーバーを作成します。
  3. [ 負荷分散仮想サーバー ] ページで、[ サービスとサービスグループ ] セクションをクリックします。
  4. 負荷分散仮想サーバーサービスバインディングページで 、バインドする gRPC サービスを選択します。
  5. 閉じる 」をクリックし、「 完了」をクリックします。

GUI を使用して gRPC バッファリングを時間とサイズで設定します

  1. System > Profilesに移動してHTTP Profilesをクリックします。
  2. HTTP プロファイルで HTTP/2 を選択します。
  3. HTTP プロファイルの設定 」ページで、次のパラメータを設定します。

    1. GRPC ホールドタイムアウト。トレーラーが受信されるまで gRPC パケットをバッファする時間をミリ秒単位で入力します。
    2. GRP/ホールドリミット。 トレーラーが受信されるまで gRPC パケットをバッファする最大サイズをバイト単位で入力します。
  4. OK」をクリックして「閉じる」をクリックします。

時間とサイズによるgRPCブリッジバッファリング

サービスと負荷分散仮想サーバーをバインドするための GUI 手順の詳細については、「 負荷分散 」のトピックを参照してください。

gRPC ブリッジング