プロキシレス gRPC の制限事項
このドキュメントでは、プロキシレス gRPC アプリケーションがある Cloud Service Mesh に適用される制限事項について説明します。上限については、割り当てと上限をご覧ください。
転送ルール、URL マップ、ターゲット プロキシの制限は、Google Cloud Load Balancing API を使用する Cloud Service Mesh にのみ適用されます。
一般的な制限事項
プロキシレス gRPC アプリケーションを使用する Cloud Service Mesh の制限事項には、次のものがあります。
Google Cloud コンソールでは、gRPC プロトコルを使用してバックエンド サービスとルーティング ルールマップを構成することはできません。これらのリソースでは、Google Cloud コンソールは読み取り専用です。
プロキシレス gRPC は、エンドポイントの検出、ルーティング、ロード バランシング、負荷レポート、多数の高度なトラフィック管理機能をサポートしています。
一部の高度なトラフィック管理機能をサポートするために必要な gRPC の最小バージョンについては、サポートされる gRPC のバージョンと言語をご覧ください。
サポートされていない高度なトラフィック管理機能を必要とする gRPC アプリケーションの場合は、xDS リゾルバの代わりに DNS 名前リゾルバを使用し、Cloud Service Mesh でサポートされているサイドカー プロキシでデプロイします。ターゲット gRPC プロキシ内で
validateForProxyless
フィールドをFALSE
に設定します。これにより、gRPC でまだサポートされていないものの、サイドカー プロキシを使用して Cloud Service Mesh で使用可能な機能を構成できます。
プロキシレス gRPC では、ロード バランシング ポリシーとしてラウンドロビンとリングハッシュのみがサポートされます。その他のロード バランシング ポリシーはサポートされません。
- Cloud Service Mesh は、gRPC クライアントに対して、地域区分に優先順位と重みを付けたリスト(1 つのインスタンス グループまたは 1 つのネットワーク エンドポイント グループ(NEG))を提供します。Cloud Service Mesh は、最も近い利用可能なゾーン、その容量、バックエンド サービスの分散モードに基づいてこのリストを算出します。
- 特定のリクエストでは、gRPC クライアントは優先度と重みに基づいて 1 つ以上の地域区分を選択し、それらの地域区分内でバックエンドに対して、ラウンドロビンまたはリングハッシュに基づいたロード バランシングを行います。
現在のゾーンの容量が 50% を下回ると、あるゾーン(地域区分)から別のゾーンへのフェイルオーバーが開始されます。このしきい値は構成できません。
ターゲット gRPC プロキシと、ターゲット gRPC プロキシを参照する転送ルールに関連する構成コマンドの実行には最大で 1 分を要する場合があります。
ハイブリッド接続 NEG(
NON_GCP_PRIVATE_IP_PORT
NEG)は、プロキシレス gRPC クライアントではサポートされていません。
URL マップの制限事項
プロキシレス gRPC サービスでは、次の URL マップ トラフィック管理機能がサポートされています。
hostRules
の pathMatcher
でサポートされている機能:
pathMatcher
name
description
defaultService
defaultRouteAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
pathRules
service
routeAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
paths
routeRules
priority
description
matchRules
prefixMatch
fullPathMatch
headerMatches
metadataFilters
service
routeAction
weightedBackendServices
backendService
weight
retryPolicy
retryConditions
numRetries
faultInjectionPolicy
maxStreamDuration
プロキシレス gRPC サービスを使用する場合、次の URL マップ制限事項が適用されます。
URL マップのホストルールとデフォルト ルールのワイルドカード文字(暗黙的に作成される URL マップの
*
ホストルールなど)は、サポートされていません。ホストのマッチングが完了すると、このエントリはスキップされます。次の機能はサポートされていません。
routeRules
のqueryParameterMatches
headerAction
、urlRewrite
、requestMirrorPolicy
、corsPolicy
、urlRedirect
のルート アクション。timeout
ルート アクション。timeout
ではなくmaxStreamDuration
を使用してくださいretryPolicy
のperTryTimeout
retryPolicy
のretryConditions
(cancelled
、deadline-exceeded
、internal
、resource-exhausted
、unavailable
の 1 つ以上の条件を除く)- URL マップの
defaultService
、defaultRouteAction
、defaultUrlRedirect
、headerAction
は、プロキシレス gRPC サービスで使用されません。プロキシレス gRPC クライアントによるサービス名の検索で、一致するホストルールが見つからない場合、Cloud Service Mesh は URL マップのデフォルトのサービスまたはアクションを使用する代わりに、名前検索エラーを返します。 headerAction
inweightedBackendServices
URL マップのヘッダー マッチング ルールでは、非バイナリで、ユーザー指定のカスタム メタデータと、
content-type
ヘッダーのみがサポートされます。トランスポート レベルのヘッダー(:authority
、:method
、:path
、:scheme
、user-agent
、accept-encoding
、content-encoding
、grpc-accept-encoding
、grpc-encoding
、grpc-previous-rpc-attempts
、grpc-tags-bin
、grpc-timeout
、grpc-trace-bin
)は、ヘッダー マッチング ルールでは使用できません。あるバックエンド サービスから別のバックエンド サービスに変更するために URL マップ ホストルールを更新すると、新しい構成がクライアントに push される一方で、トラフィックが一時的にドロップされる可能性があります。この制限を回避するには、重み付けされたバックエンド サービスによるトラフィック分割を構成します。トラフィック分割を構成したら、古いバックエンド サービスから新しいバックエンド サービスにトラフィックを段階的にシフトします。
ターゲット gRPC プロキシの制限事項
ターゲット gRPC プロキシによって URL マップが参照される場合に、次の URL マップ機能は構成できません。これは、サイドカー プロキシとプロキシレス gRPC サービスのいずれを使用する場合でも同じです。これらの HTTP プロトコル固有の機能は gRPC プロトコルに適用されないためです。
queryParameterMatches
件のマッチング ルールurlRewrite
ルート アクションurlRedirect
ルート アクションcorsPolicy
アクション
バックエンド サービスの制限事項
サイドカー プロキシを使用するプロキシレス gRPC サービスでは、次のバックエンド サービス機能はサポートされません。
localityLbPolicy
(LEAST_REQUEST
(Java クライアントのみを含む)、ROUND_ROBIN
、RING_HASH
を除く)sessionAffinity
(HEADER_FIELD
とNONE
を除く)consistentHash
(httpHeaderName
とminimumRingSize
のフィールドを除く)affinityCookieTtlSec
timeoutSec
。代わりにmaxStreamDuration
を使用してください。circuitBreakers
(maxRequests
フィールドを除く)
サポートされていない値が構成されると、gRPC クライアントは Cloud Service Mesh の構成に対して NACK を返します。この場合、すべてのバックエンド サービスの構成がクライアントによって拒否されます。なぜなら、xDS プロトコルはレスポンス内の個々のリソースを拒否することはできず、特定のレスポンス内のすべてのリソースを拒否する必要があるためです。構成が修正されるまで、クライアント チャネルは一時的なエラー状態になります。 この制限があるため、サービスの機能を構成する前に、すべてのクライアントが必要な値をサポートしていることを確認する必要があります。たとえば、ポリシーを ROUND_ROBIN
から RING_HASH
に変更する場合は、すべてのクライアントが RING_HASH
をサポートするバージョンにアップグレードされていることを確認する必要があります。
高度なトラフィック管理の制限
Cloud Service Mesh で、一部のプロキシレス gRPC サービスの高度なトラフィック管理機能を構成することはできません。サポートされている機能については、以下をご覧ください。
Service Directory の制限事項
- Service Directory と Cloud Service Mesh は、クライアントのネットワーク到達性を保証しません。
バックエンド サービスは、次のいずれかのみを参照できます。
- マネージド インスタンス グループまたは非マネージド インスタンス グループ
- ネットワーク エンドポイント グループ
- サービス バインディング
Service Directory サービスは、
load-balancing-scheme=INTERNAL_SELF_MANAGED
を含むグローバル バックエンド サービスでのみ使用できます。サービス バインディングによって参照されている Service Directory サービスを削除できます。バックエンド サービスが接続している基盤となる Service Directory サービスが削除されると、Cloud Service Mesh を使用するアプリケーションは、このサービスにトラフィックを送信できないため、リクエストは失敗します。ベスト プラクティスについては、オブザーバビリティとデバッグをご覧ください。
Service Directory サービスをバックエンド サービスにバインドする場合、バックエンド サービスでヘルスチェックを構成することはできません。
次のステップ
- 高度なトラフィック管理の制限事項など、Cloud Service Mesh に適用される制限事項については、Cloud Service Mesh の制限事項をご確認ください。
- プロキシレス gRPC サービスのユースケースとアーキテクチャ パターンを確認するには、プロキシレス gRPC サービスの概要をご覧ください。