プロトコル選択

Istioは、あらゆるTCPトラフィックのプロキシをサポートしています。これには、HTTP、HTTPS、gRPC、および生のTCPプロトコルが含まれます。ルーティングや豊富なメトリクスなどの追加機能を提供するために、プロトコルを決定する必要があります。これは自動的に行うか、明示的に指定することができます。

UDPなどの非TCPベースのプロトコルはプロキシされません。これらのプロトコルは、Istioプロキシによる傍受なしに、通常どおりに機能しますが、イングレスやエグレスゲートウェイなどのプロキシ専用コンポーネントでは使用できません。

自動プロトコル選択

Istioは、HTTPおよびHTTP/2トラフィックを自動的に検出できます。プロトコルを自動的に特定できない場合、トラフィックはプレーンTCPトラフィックとして扱われます。

明示的なプロトコル選択

プロトコルは、Service定義で手動で指定できます。

これは2つの方法で設定できます。

  • ポート名による指定:name: <プロトコル>[-<サフィックス>]
  • Kubernetes 1.18以降では、appProtocolフィールドによる指定:appProtocol: <プロトコル>

両方が定義されている場合、appProtocolがポート名よりも優先されます。

ゲートウェイでの動作は、ゲートウェイがTLSを終端し、プロトコルがネゴシエートされる可能性があるため、一部のケースで異なることに注意してください。

以下のプロトコルがサポートされています。

プロトコルサイドカーの目的ゲートウェイの目的
httpプレーンテキストのHTTP/1.1トラフィックプレーンテキストのHTTP(1.1または2)トラフィック
http2プレーンテキストのHTTP/2トラフィックプレーンテキストのHTTP(1.1または2)トラフィック
httpsTLSで暗号化されたデータ。サイドカーはTLSトラフィックを復号化しないため、これはtlsと同じですTLSで暗号化されたHTTP(1.1または2)トラフィック
tcp不透明なTCPデータストリーム不透明なTCPデータストリーム
tlsTLSで暗号化されたデータTLSで暗号化されたデータ
grpcgrpc-webhttp2と同じhttp2と同じ
mongomysqlredis実験的なアプリケーションプロトコルサポート。これらを有効にするには、対応する環境変数を設定してください。有効にしない場合、不透明なTCPデータストリームとして扱われます実験的なアプリケーションプロトコルサポート。これらを有効にするには、対応する環境変数を設定してください。有効にしない場合、不透明なTCPデータストリームとして扱われます

以下は、appProtocolhttpsポートを定義し、名前でhttpポートを定義するServiceの例です。

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - port: 3306
    name: database
    appProtocol: https
  - port: 80
    name: http-web

HTTPゲートウェイプロトコル選択

サイドカーとは異なり、ゲートウェイはデフォルトでは、バックエンドサービスにリクエストを転送する際に使用する特定のHTTPプロトコルを自動的に検出できません。したがって、HTTP/1.1(http)またはHTTP/2(http2またはgrpc)を指定するために明示的なプロトコル選択を使用しない限り、ゲートウェイはすべての受信HTTPリクエストをHTTP/1.1を使用して転送します。

明示的なプロトコル選択を使用する代わりに、ServiceのuseClientProtocolオプションを設定することで、受信リクエストと同じプロトコルを使用してリクエストを転送するようにゲートウェイに指示できます。ただし、HTTP/2をサポートしていないサービスでこのオプションを使用すると、HTTPSゲートウェイは常にHTTP/1.1とHTTP/2のサポートをアドバタイズするため、リスクを伴う可能性があることに注意してください。そのため、バックエンドサービスがHTTP/2をサポートしていない場合でも、最新のクライアントはそれをサポートしていると思い込み、多くの場合、それを使用することを選択します。

この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!