概要
OpenShift Service Meshでは、DestinationRuleを使って流量制限をかけることができる。その際の挙動はリクエスト元(downstream)のenvoyの台数に依存するので、調査。
詳細
以下の例だと、hogeサービスへの同時リクエスト可能数を1に絞っていて、それ以上リクエストがくると503が返される。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratelimit
spec:
host: hoge
trafficPolicy:
connectionPool:
http:
http2MaxRequests: 1
この設定はdownstream側のenvoy1台1台に個別に反映される。したがって、Ingress Gateway経由のトラフィックで、Ingress Gateway Podが2台に冗長化されている場合、以下のような挙動になる。
すなわち、http2MaxRequestsの設定値自体は1だが、実質2リクエストまで同時受付可能となる。
また、上の例はリクエストがラウンドロビンで均等に投げられているが、ソースIP毎など他の負荷分散方式になっていたり、複数システムでIngress Gatewayを共用している場合、厳密なコントロールが不可になるため、注意が必要。