5.9. HTTP2 と gRPC の使用
OpenShift Serverless はセキュアでないルートまたは edge termination ルートのみをサポートします。非セキュアなルートまたは edge termination ルートは OpenShift Container Platform で HTTP2 をサポートしません。gRPC は HTTP2 によって転送されるため、これらのルートは gRPC もサポートしません。アプリケーションでこれらのプロトコルを使用する場合は、Ingress ゲートウェイを使用してアプリケーションを直接呼び出す必要があります。これを実行するには、Ingress ゲートウェイのパブリックアドレスとアプリケーションの特定のホストを見つける必要があります。
5.9.1. HTTP2 および gRPC を使用したサーバーレスアプリケーションとの対話 リンクのコピーリンクがクリップボードにコピーされました!
この方法は、OpenShift Container Platform 4.10 以降が対象です。古いバージョンについては、以下のセクションを参照してください。
前提条件
- OpenShift Serverless Operator と Knative Serving をクラスターにインストールしている。
-
OpenShift CLI (
oc) がインストールされている。 - Knative サービスを作成する。
- OpenShift Container Platform 4.10 以降をアップグレードする。
- OpenShift Ingress コントローラーで HTTP/2 を有効にする。
手順
serverless.openshift.io/default-enable-http2=trueアノテーションをKnativeServingカスタムリソースに追加します。$ oc annotate knativeserving <your_knative_CR> -n knative-serving serverless.openshift.io/default-enable-http2=trueアノテーションが追加されたら、Kourier サービスの
appProtocol値がh2cであることを確認できます。$ oc get svc -n knative-serving-ingress kourier -o jsonpath="{.spec.ports[0].appProtocol}"出力例
h2c以下のように、外部トラフィックに HTTP/2 プロトコルで gRPC フレームワークを使用できるようになりました。
import "google.golang.org/grpc" grpc.Dial( YOUR_URL,1 grpc.WithTransportCredentials(insecure.NewCredentials())),2 )
5.9.2. OpenShift Container Platform 4.9 以前での HTTP2 および gRPC を使用したサーバーレスアプリケーションとの対話 リンクのコピーリンクがクリップボードにコピーされました!
この方法は、LoadBalancer サービスタイプを使用して Kourier Gateway を公開する必要があります。これは、以下の YAML を KnativeServing カスタムリソース定義 (CRD) に追加して設定できます。
...
spec:
ingress:
kourier:
service-type: LoadBalancer
...
前提条件
- OpenShift Serverless Operator と Knative Serving をクラスターにインストールしている。
-
OpenShift CLI (
oc) がインストールされている。 - Knative サービスを作成する。
手順
- アプリケーションホストを検索します。サーバーレスアプリケーションのデプロイメントの確認の説明を参照してください。
Ingress ゲートウェイのパブリックアドレスを見つけます。
$ oc -n knative-serving-ingress get svc kourier出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67mパブリックアドレスは
EXTERNAL-IPフィールドで表示され、この場合はa83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.comになります。HTTP 要求のホストヘッダーを手動でアプリケーションのホストに手動で設定しますが、Ingress ゲートウェイのパブリックアドレスに対して要求自体をダイレクトします。
$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com出力例
Hello Serverless!Ingress ゲートウェイに対して直接 gRPC 要求を行うこともできます。
import "google.golang.org/grpc" grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )注記直前の例のように、それぞれのポート (デフォルトでは 80) を両方のホストに追加します。