1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IstioのEnvoyFilterによるRate Limit

Last updated at Posted at 2023-06-30

マイクロサービスでは、サービス間の通信にRate Limitを設けることで、一部のサービスが過負荷となっても他のサービスに影響を与えないようにすることが一般的です。

IstioではRate Limitの手段として幾つか選択肢がありますが、より細かな制御を行いたい場合には、EnvoyFilterを使います。

EnvoyFilterとは?

EnvoyFilterはIstioで提供されているカスタムリソース定義(CRD)の一つで、Envoyプロキシの挙動を詳細に制御することができます。Rate Limitの設定以外にも、HTTPリクエストやレスポンスのヘッダーの操作、トラフィックのルーティングの調整などが可能です。

処理フローは以下のようになります。
(外部からのリクエストはIstio Ingress Gatewayを介します)

リクエストはRate Limit ServiceにてPolicyに適合しているか判定され、OKならアプリへ転送、NGなら429 Too Many Requestsが返されます。

制限の適用範囲としては、メッシュ全体を対象とするGlobalと、Pod単位を対象とするLocalの2種類があります。

Istio Bookinfoのratingsに対するRate Limit設定

具体的な設定例として、IstioのサンプルアプリケーションであるBookinfoに対して、ratingsサービスへの制限をかけます。(Local Rate Limit)

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: ratings-ratelimit
  namespace: default
spec:
  workloadSelector:
    labels:
      app: ratings
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
      listener:
        portNumber: 8080
        filterChain:
          filter:
            name: "envoy.filters.network.http_connection_manager"
            subFilter:
              name: "envoy.filters.http.router"
    patch:
      operation: INSERT_BEFORE
      value:
        name: envoy.filters.http.local_ratelimit
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit"
          stat_prefix: http_local_rate_limiter
          token_bucket:
            max_tokens: 10
            tokens_per_fill: 10
            fill_interval: 60s

この設定では、ratingsサービス(workloadSelector.labels.app: ratings)に対して、1分間に最大10回のリクエストを許可します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?