Envoyフィルター

EnvoyFilter は、Istio Pilot によって生成された Envoy の設定をカスタマイズするメカニズムを提供します。EnvoyFilter を使用して、特定のフィールドの値を変更したり、特定のフィルターを追加したり、完全に新しいリスナーやクラスターなどを追加したりできます。この機能は、誤った設定がメッシュ全体を不安定にする可能性があるため、注意して使用する必要があります。他の Istio ネットワークオブジェクトとは異なり、EnvoyFilter は加算的に適用されます。特定の名前空間の特定のワークロードに対して、任意の数の EnvoyFilter を存在させることができます。これらの EnvoyFilter の適用順序は次のとおりです。設定ルート名前空間内のすべての EnvoyFilter、次にワークロードの名前空間内の一致するすべての EnvoyFilter が続きます。

注 1: この API の一部の側面は、Istio ネットワーキングサブシステムおよび Envoy の XDS API の内部実装に深く結びついています。EnvoyFilter API 自体は下位互換性を維持しますが、このメカニズムを通じて提供される Envoy 構成は、Istio プロキシのバージョンアップグレード全体で注意深く監視し、非推奨のフィールドが削除され、適切に置き換えられていることを確認する必要があります。

注 2: 複数の EnvoyFilter が指定された名前空間の同じワークロードにバインドされている場合、すべてのパッチは作成順に順次処理されます。複数の EnvoyFilter 構成が相互に競合する場合、動作は未定義です。

注 3: システム内のすべてのワークロード (サイドカーとゲートウェイ) に EnvoyFilter リソースを適用するには、ワークロードセレクターなしで、設定ルート名前空間にリソースを定義します。

次の例は、istio-config というルート名前空間でグローバルなデフォルトの EnvoyFilter リソースを宣言し、システム内のすべてのサイドカーのアウトバウンドポート 9307 にカスタムプロトコルフィルターを追加します。フィルターは、効果を発揮するために、終了する tcp_proxy フィルターの前に追加する必要があります。さらに、ゲートウェイとサイドカーの両方で、すべての HTTP 接続に対して 30 秒のアイドルタイムアウトを設定します。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: custom-protocol
  namespace: istio-config # as defined in meshConfig resource.
spec:
  configPatches:
  - applyTo: NETWORK_FILTER
    match:
      context: SIDECAR_OUTBOUND # will match outbound listeners in all sidecars
      listener:
        portNumber: 9307
        filterChain:
          filter:
            name: "envoy.filters.network.tcp_proxy"
    patch:
      operation: INSERT_BEFORE
      value:
        # This is the full filter config including the name and typed_config section.
        name: "envoy.extensions.filters.network.mongo_proxy"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy"
          ...
  - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy
    match:
      # context omitted so that this applies to both sidecars and gateways
      listener:
        filterChain:
          filter:
            name: "envoy.filters.network.http_connection_manager"
    patch:
      operation: MERGE
      value:
        name: "envoy.filters.network.http_connection_manager"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
          common_http_protocol_options:
            idle_timeout: 30s

次の例では、bookinfo 名前空間のラベル「app: reviews」を持つレビューサービスポッドのサービスポート 8080 に到着するすべてのインバウンド HTTP 呼び出しに対して、Envoy の Lua フィルターを有効にします。lua フィルターは、Envoy で特別なクラスター定義を必要とする外部サービス internal.org.net:8888 を呼び出します。クラスターは、この構成の一部としてサイドカーにも追加されます。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: reviews-lua
  namespace: bookinfo
spec:
  workloadSelector:
    labels:
      app: reviews
  configPatches:
    # The first patch adds the lua filter to the listener/http connection manager
  - 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: # lua filter specification
       name: envoy.filters.http.lua
       typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
          defaultSourceCode:
            inlineString: |
              function envoy_on_request(request_handle)
                -- Make an HTTP call to an upstream host with the following headers, body, and timeout.
                local headers, body = request_handle:httpCall(
                 "lua_cluster",
                 {
                  [":method"] = "POST",
                  [":path"] = "/acl",
                  [":authority"] = "internal.org.net"
                 },
                "authorize call",
                5000)
              end
  # The second patch adds the cluster that is referenced by the lua code
  # cds match is omitted as a new cluster is being added
  - applyTo: CLUSTER
    match:
      context: SIDECAR_OUTBOUND
    patch:
      operation: ADD
      value: # cluster specification
        name: "lua_cluster"
        type: STRICT_DNS
        connect_timeout: 0.5s
        lb_policy: ROUND_ROBIN
        load_assignment:
          cluster_name: lua_cluster
          endpoints:
          - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    protocol: TCP
                    address: "internal.org.net"
                    port_value: 8888

次の例では、SNI ホスト app.example.com の istio-system 名前空間のイングレスゲートウェイのリスナーで、HTTP 接続マネージャーの一部のフィールド (HTTP アイドルタイムアウトと X-Forward-For トラストホップ) を上書きします。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: hcm-tweaks
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy
    match:
      context: GATEWAY
      listener:
        filterChain:
          sni: app.example.com
          filter:
            name: "envoy.filters.network.http_connection_manager"
    patch:
      operation: MERGE
      value:
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
          xff_num_trusted_hops: 5
          common_http_protocol_options:
            idle_timeout: 30s

次の例では、istio_operationId 属性を生成する attributegen フィルターを挿入します。この属性は、istio.stats フィルターによって消費されます。filterClass: STATS はこの依存関係をエンコードします。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: reviews-request-operation
  namespace: myns
spec:
  workloadSelector:
    labels:
      app: reviews
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
    patch:
      operation: ADD
      filterClass: STATS # This filter will run *before* the Istio stats filter.
      value:
        name: istio.request_operation
        typed_config:
         "@type": type.googleapis.com/udpa.type.v1.TypedStruct
         type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
         value:
           config:
             configuration: |
               {
                 "attributes": [
                   {
                     "output_attribute": "istio_operationId",
                     "match": [
                       {
                         "value": "ListReviews",
                         "condition": "request.url_path == '/reviews' && request.method == 'GET'"
                       }]
                   }]
               }
             vm_config:
               runtime: envoy.wasm.runtime.null
               code:
                 local: { inline_string: "envoy.wasm.attributegen" }

次の例では、myns 名前空間に http ext_authz フィルターを挿入します。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: myns-ext-authz
  namespace: myns
spec:
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
    patch:
      operation: ADD
      filterClass: AUTHZ # This filter will run *after* the Istio authz filter.
      value:
        name: envoy.filters.http.ext_authz
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
          grpc_service:
            envoy_grpc:
              cluster_name: acme-ext-authz
            initial_metadata:
            - key: foo
              value: myauth.acme # required by local ext auth server.

myns 名前空間のワークロードは、初期メタデータを受け入れない別の ext_auth サーバーにアクセスする必要があります。proto マージではフィールドを削除できないため、次の構成では REPLACE 操作を使用します。フィールドを継承する必要がない場合は、MERGE よりも REPLACE が推奨されます。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: mysvc-ext-authz
  namespace: myns
spec:
  workloadSelector:
    labels:
      app: mysvc
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
    patch:
      operation: REPLACE
      value:
        name: envoy.filters.http.ext_authz
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
          grpc_service:
            envoy_grpc:
              cluster_name: acme-ext-authz-alt

次の例では、すべてのインバウンドサイドカー HTTP リクエストに対して Wasm 拡張機能をデプロイします。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: wasm-example
  namespace: myns
spec:
  configPatches:
  # The first patch defines a named Wasm extension and provides a URL to fetch Wasm binary from,
  # and the binary configuration. It should come before the next patch that applies it.
  # This resource is visible to all proxies in the namespace "myns". It is possible to provide
  # multiple definitions for the same name "my-wasm-extension" in multiple namespaces. We recommend that:
  # - if overriding is desired, then the root level definition can be overridden per namespace with REPLACE.
  # - if overriding is not desired, then the name should be qualified with the namespace "myns/my-wasm-extension",
  #   to avoid accidental name collisions.
  - applyTo: EXTENSION_CONFIG
    patch:
      operation: ADD
      value:
        name: my-wasm-extension
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
          config:
            root_id: my-wasm-root-id
            vm_config:
              vm_id: my-wasm-vm-id
              runtime: envoy.wasm.runtime.v8
              code:
                remote:
                  http_uri:
                    uri: http://my-wasm-binary-uri
            configuration:
              "@type": "type.googleapis.com/google.protobuf.StringValue"
              value: |
                {}
  # The second patch instructs to apply the above Wasm filter to the listener/http connection manager.
  - applyTo: HTTP_FILTER
    match:
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager
            subFilter:
              name: envoy.filters.http.router
    patch:
      operation: INSERT_BEFORE
      value:
        name: my-wasm-extension # This must match the name above
        config_discovery:
          config_source:
            ads: {}
          type_urls: ["type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm"]

次の例では、envoy.filters.listener.tls_inspector の前に envoy.filters.listener.proxy_protocol リスナーフィルターを挿入します。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: listener-filter-example
  namespace: myns
spec:
  configPatches:
  - applyTo: LISTENER_FILTER
    match:
      context: SIDECAR_INBOUND # will match inbound listeners in all sidecars
      listener:
        portNumber: 15006
        listenerFilter: "envoy.filters.listener.tls_inspector"
    patch:
      operation: INSERT_BEFORE
      value:
        # This is the full filter config including the name and typed_config section.
        name: "envoy.filters.listener.proxy_protocol"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.listener.proxy_protocol.v3.ProxyProtocol"

EnvoyFilter

EnvoyFilter は、Istio Pilot によって生成された Envoy の設定をカスタマイズするメカニズムを提供します。

フィールド説明必須
workloadSelectorWorkloadSelector

このパッチ構成を適用する特定のポッド/VM のセットを選択するために使用される条件。省略した場合、この構成のパッチのセットは、同じ名前空間内のすべてのワークロードインスタンスに適用されます。EnvoyFilter が構成ルート名前空間にある場合、任意の名前空間の適用可能なすべてのワークロードに適用されます。

いいえ
targetRefsPolicyTargetReference[]

オプション。targetRefs は、ポリシーを適用するリソースのリストを指定します。指定されたターゲットリソースは、ポリシーを適用するワークロードを決定します。

現在、次のリソース添付タイプがサポートされています

  • kind: Gateway は、同じ名前空間で group: gateway.networking.k8s.io を持ちます。
  • kind: Service は、同じ名前空間で "" を持ちます。このタイプは、ウェイポイントでのみサポートされています。

設定されていない場合、ポリシーはセレクターによって定義されたとおりに適用されます。セレクターと targetRefs のうち、最大で 1 つを設定できます。

注: Istio バージョン 1.22 より前のマルチリビジョン環境で targetRefs フィールドを使用している場合は、istio.io/rev ラベルを使用して、1.22 以降を実行しているリビジョンにポリシーを固定することを強くお勧めします。これは、アップグレードプロセス中に古いコントロールプレーン (targetRefs フィールドについて認識していない) に接続されたプロキシが、ポリシーを名前空間全体として誤って解釈するのを防ぐためです。

注: ウェイポイントプロキシでは、ポリシーを適用するためにこのフィールドを使用する必要があります。selector ポリシーは無視されます。

いいえ
configPatchesEnvoyConfigObjectPatch[]

一致条件を持つ 1 つ以上のパッチ。

いいえ
priorityint32

優先度により、コンテキスト内でパッチセットが適用される順序が定義されます。あるパッチが別のパッチに依存している場合、パッチの適用順序は重要です。API は、パッチを順序付けるための 2 つの主要な方法を提供します。ルート名前空間のパッチセットは、ワークロード名前空間のパッチセットの前に適用されます。パッチセット内のパッチは、configPatches リストに表示される順序で処理されます。

優先度のデフォルト値は 0 で、範囲は [min-int32, max-int32] です。負の優先度を持つパッチセットは、デフォルトの前に処理されます。正の優先度を持つパッチセットは、デフォルトの後に処理されます。

さらに挿入する余地を残すために、10 の倍数である優先度値から開始することをお勧めします。

パッチセットは、次の昇順のキー順でソートされます: 優先度、作成時間、完全修飾リソース名。

いいえ

EnvoyFilter.ProxyMatch

一致するプロキシの 1 つ以上のプロパティ。

フィールド説明必須
proxyVersionstring

特定のバージョンの istio プロキシを使用してプロキシを選択するために使用できる golang regex 形式 (RE2) の正規表現。特定のプロキシの Istio バージョンは、プロキシが Pilot に接続するときに提供するノードメタデータフィールド ISTIO_VERSION から取得されます。この値は、Istio プロキシ docker イメージの環境変数 (ISTIO_META_ISTIO_VERSION) として埋め込まれています。カスタムプロキシ実装は、Istio バージョンチェックオプションを利用するために、このメタデータ変数を提供する必要があります。

いいえ
metadatamap<string, string>

Istio Pilot に接続するときにプロキシによって提供されるノードメタデータと一致します。Envoy のノードメタデータは Struct 型ですが、Pilot で処理されるのは文字列のキーと値のペアのみであることに注意してください。メタデータで指定されたすべてのキーは、正確な値と一致する必要があります。指定されたキーのいずれかが存在しない場合、または値が一致しない場合、一致は失敗します。

いいえ

EnvoyFilter.ClusterMatch

ClusterMatch で指定された条件は、パッチをクラスターに適用するために満たされる必要があります。

フィールド説明必須
portNumberuint32

このクラスターが生成されたサービスポート。省略した場合、任意のポートのクラスターに適用されます。注: インバウンドクラスターの場合、これはサービスターゲットポートです。

いいえ
servicestring

このクラスターの完全修飾サービス名。省略した場合、任意のサービスのクラスターに適用されます。サービスエントリを通じて定義されたサービスの場合、サービス名はサービスエントリで定義されたホストと同じです。注: インバウンドクラスターの場合、これは無視されます。

いいえ
subsetstring

サービスに関連付けられたサブセット。省略した場合、サービスの任意のサブセットのクラスターに適用されます。

いいえ
namestring

一致するクラスターの正確な名前。内部的に生成された Passthrough クラスターなど、名前で特定のクラスターと一致させるには、名前を除く clusterMatch のすべてのフィールドを空のままにします。

いいえ

EnvoyFilter.RouteConfigurationMatch

RouteConfigurationMatch で指定された条件は、パッチをルート構成オブジェクト、またはルート構成内の特定の仮想ホストに適用するために満たされる必要があります。

フィールド説明必須
portNumberuint32

このルート構成が生成されたサービスポート番号またはゲートウェイサーバーポート番号。省略した場合、すべてのポートのルート構成に適用されます。

いいえ
portNamestring

GATEWAY コンテキストにのみ適用されます。このルート構成が生成されたゲートウェイサーバーのポート名。

いいえ
gatewaystring

このルート構成が生成された Istio ゲートウェイ構成の名前空間/名前。コンテキストが GATEWAY の場合にのみ適用されます。名前空間/名前形式である必要があります。このフィールドを portNumber および portName と組み合わせて使用して、ゲートウェイ構成オブジェクト内の特定の HTTPS サーバーの Envoy ルート構成を正確に選択します。

いいえ
vhostVirtualHostMatch

ルート構成内の特定の仮想ホストを一致させ、パッチを仮想ホストに適用します。

いいえ
namestring

一致するルート構成の名前。すべてのサイドカーの内部的に生成された http_proxy ルート構成など、名前で特定のルート構成を一致させるために使用できます。

いいえ

EnvoyFilter.ListenerMatch

リスナーの一致で指定された条件は、すべてのフィルターチェーンにわたる特定のリスナー、またはリスナー内の特定のフィルターチェーンにパッチを適用するために満たされる必要があります。

フィールド説明必須
portNumberuint32

トラフィックが送受信されているサービスポート/ゲートウェイポート。指定しない場合、すべてのリスナーと一致します。インバウンドリスナーはインスタンス/ポッドポートに対して生成されますが、リスナーを一致させるにはサービスポートのみを使用する必要があります。

いいえ
filterChainFilterChainMatch

リスナー内の特定のフィルターチェーンを一致させます。指定した場合、パッチはフィルターチェーン (および指定された場合は特定のフィルター) に適用され、リスナー内の他のフィルターチェーンには適用されません。

いいえ
listenerFilterstring

特定のリスナーフィルターを一致させます。指定した場合、パッチはリスナーフィルターに適用されます。

いいえ
namestring

名前で特定のリスナーをマッチさせます。Pilotによって生成されるリスナーは通常、IP:Portという名前が付けられます。

いいえ

EnvoyFilter.Patch

パッチは、選択されたオブジェクトをどのように変更するかを指定します。

フィールド説明必須
operation操作

パッチをどのように適用するかを決定します。

いいえ
value構造体

パッチを適用するオブジェクトのJSON設定です。これは、パス内の既存のprotoとprotoマージセマンティクスを使用してマージされます。

いいえ
filterClassフィルタクラス

フィルタの挿入順序を決定します。

いいえ

EnvoyFilter.EnvoyConfigObjectMatch

特定のプロキシの生成された構成にパッチを適用する前に満たす必要のある1つ以上のマッチ条件。

フィールド説明必須
contextパッチコンテキスト

マッチさせる特定の構成生成コンテキスト。Istio Pilotは、ゲートウェイ、サイドカーへのインバウンドトラフィック、サイドカーからのアウトバウンドトラフィックのコンテキストでEnvoy構成を生成します。

いいえ
proxyプロキシマッチ

プロキシに関連付けられたプロパティにマッチします。

いいえ
listenerリスナーマッチ (oneof)

Envoyリスナー属性にマッチします。

いいえ
routeConfigurationルート構成マッチ (oneof)

Envoy HTTPルート構成属性にマッチします。

いいえ
clusterクラスターマッチ (oneof)

Envoyクラスター属性にマッチします。

いいえ

EnvoyFilter.EnvoyConfigObjectPatch

さまざまなEnvoy構成オブジェクトに対して行われる変更。

フィールド説明必須
applyTo適用先

Envoy構成のどこにパッチを適用するかを指定します。マッチは、applyToに基づいて適切なオブジェクトを選択することが期待されます。たとえば、HTTP_FILTERのapplyToは、リスナーに対するマッチ条件、envoy.filters.network.http_connection_managerに対するネットワークフィルター選択、および挿入が実行されるHTTPフィルターに対するサブフィルター選択を持つことが期待されます。同様に、CLUSTERのapplyToは、(提供されている場合)リスナーではなくクラスターに対してマッチを持つ必要があります。

いいえ
matchEnvoy構成オブジェクトマッチ

リスナー/ルート構成/クラスターにマッチします。

いいえ
patchパッチ

操作とともに適用するパッチ。

いいえ

EnvoyFilter.RouteConfigurationMatch.RouteMatch

ルート構成内の仮想ホスト内の特定のルートをマッチさせます。

フィールド説明必須
namestring

デフォルトで生成されるルートオブジェクトは、defaultという名前が付けられます。仮想サービスを使用して生成されたルートオブジェクトは、仮想サービスのHTTPルートで使用される名前を持ちます。

いいえ
actionアクション

特定のアクションタイプのルートをマッチさせます。

いいえ

EnvoyFilter.RouteConfigurationMatch.VirtualHostMatch

ルート構成内の特定の仮想ホストをマッチさせます。

フィールド説明必須
namestring

Istioによって生成されるVirtualHostsオブジェクトは、host:portという名前が付けられます。ここで、hostは通常、VirtualServiceのhostフィールドまたはレジストリ内のサービスの名前と一致します。

いいえ
routeルートマッチ

仮想ホスト内の特定のルートをマッチさせます。

いいえ

EnvoyFilter.ListenerMatch.FilterChainMatch

複数のフィルターチェーンを持つリスナー(たとえば、パーミッシブmTLSを備えたサイドカー上のインバウンドリスナー、複数のSNIマッチを備えたゲートウェイリスナー)の場合、フィルターチェーンマッチを使用して、パッチを適用する特定のフィルターチェーンを選択できます。

フィールド説明必須
namestring

フィルターチェーンに割り当てられた名前。

いいえ
snistring

フィルターチェーンのマッチ条件で使用されるSNI値。フィルターチェーンにsniマッチがない場合、この条件はfalseと評価されます。

いいえ
transportProtocolstring

SIDECAR_INBOUNDコンテキストにのみ適用されます。空でない場合、フィルターチェーンマッチを決定する際に考慮するトランスポートプロトコル。この値は、tls_inspectorリスナーフィルターによって検出された場合、新しい接続のトランスポートプロトコルと比較されます。

受け入れられる値は次のとおりです。

  • raw_buffer - デフォルト。トランスポートプロトコルが検出されない場合に使用されます。
  • tls - TLSインスペクターによってTLSプロトコルが検出された場合に設定されます。
いいえ
applicationProtocolsstring

サイドカーにのみ適用されます。空でない場合、フィルターチェーンマッチを決定する際に考慮するアプリケーションプロトコルのカンマ区切りセット。この値は、http_inspectorなどのリスナーフィルターの1つによって検出された場合、新しい接続のアプリケーションプロトコルと比較されます。

受け入れられる値は次のとおりです。h2、http/1.1、http/1.0

いいえ
filterフィルターマッチ

パッチを適用する特定のフィルターの名前。HTTP接続マネージャーにフィルターを追加するか、パッチを適用するには、これをenvoy.filters.network.http_connection_managerに設定します。

いいえ
destinationPortuint32

フィルターチェーンのマッチ条件で使用されるdestination_port値。フィルターチェーンにdestination_portマッチがない場合、この条件はfalseと評価されます。

いいえ

EnvoyFilter.ListenerMatch.FilterMatch

フィルターチェーン内の特定のフィルターにマッチする条件。

フィールド説明必須
namestring

マッチさせるフィルターの名前。標準のEnvoyフィルターの場合は、canonical filter名を使用する必要があります。

いいえ
subFilterサブフィルターマッチ

マッチさせるこのフィルター内の次のレベルのフィルター。通常、HTTP接続マネージャーフィルターおよびThriftフィルターに使用されます。

いいえ

EnvoyFilter.ListenerMatch.SubFilterMatch

別のフィルター内の特定のフィルターにマッチする条件。このフィールドは通常、envoy.filters.network.http_connection_managerネットワークフィルター内のHTTPフィルターにマッチするのに役立ちます。これはthriftフィルターにも適用される可能性があります。

フィールド説明必須
namestring

マッチさせるフィルターの名前。

いいえ

EnvoyFilter.RouteConfigurationMatch.RouteMatch.Action

アクションとは、HTTPルートがマッチしたときにEnvoyによって実行されるルートアクションを指します。

名前説明
ANY

3つすべてのルートアクション

ROUTE

トラフィックをクラスター/重み付けクラスターにルーティングします。

REDIRECT

リクエストをリダイレクトします。

DIRECT_RESPONSE

特定ペイロードを使用してリクエストに直接応答します。

EnvoyFilter.Patch.Operation

操作は、選択した構成にパッチをどのように適用するかを示します。

名前説明
INVALID
MERGE

指定された構成を、protoマージセマンティクスを使用して生成された構成とマージします。構成全体を指定する場合は、代わりにREPLACEを使用します。

ADD

指定された構成を既存のリスト(リスナー、クラスター、仮想ホスト、ネットワークフィルター、またはHTTPフィルターのリスト)に追加します。この操作は、applyToROUTE_CONFIGURATIONまたはHTTP_ROUTEに設定されている場合は無視されます。

REMOVE

選択したオブジェクトをリスト(リスナー、クラスター、仮想ホスト、ネットワークフィルター、ルート、またはHTTPフィルターのリスト)から削除します。値を指定する必要はありません。この操作は、applyToROUTE_CONFIGURATIONまたはHTTP_ROUTEに設定されている場合は無視されます。

INSERT_BEFORE

名前付きオブジェクトの配列に対する挿入操作。この操作は通常、要素の順序が重要なフィルターまたはルートのコンテキストでのみ役立ちます。ルートは、最初にマッチする要素が選択されるため、最も具体的なマッチ条件から最も具体性の低いマッチ条件に基づいて順序付けする必要があります。クラスターと仮想ホストの場合、配列内の要素の順序は重要ではありません。選択したフィルターまたはサブフィルターの前に挿入します。フィルターが選択されていない場合、指定されたフィルターはリストの先頭に挿入されます。

INSERT_AFTER

名前付きオブジェクトの配列に対する挿入操作。この操作は通常、要素の順序が重要なフィルターまたはルートのコンテキストでのみ役立ちます。ルートは、最初にマッチする要素が選択されるため、最も具体的なマッチ条件から最も具体性の低いマッチ条件に基づいて順序付けする必要があります。クラスターと仮想ホストの場合、配列内の要素の順序は重要ではありません。選択したフィルターまたはサブフィルターの後に挿入します。フィルターが選択されていない場合、指定されたフィルターはリストの末尾に挿入されます。

INSERT_FIRST

名前付きオブジェクトの配列に対する挿入操作。この操作は通常、要素の順序が重要なフィルターまたはルートのコンテキストでのみ役立ちます。ルートは、最初にマッチする要素が選択されるため、最も具体的なマッチ条件から最も具体性の低いマッチ条件に基づいて順序付けする必要があります。クラスターと仮想ホストの場合、配列内の要素の順序は重要ではありません。選択したフィルターの有無に基づいて、リストの最初に挿入します。これは、マッチ句で指定されたマッチ条件に基づいて、フィルターをリストの最初にしたい場合に特に役立ちます。

REPLACE

名前付きフィルターの内容を新しい内容に置き換えます。REPLACE操作は、HTTP_FILTERおよびNETWORK_FILTERでのみ有効です。名前付きフィルターが見つからない場合、この操作は効果がありません。

EnvoyFilter.Patch.FilterClass

FilterClassは、コントロールプレーンによって暗黙的に挿入されたフィルターに対するフィルターチェーンのフィルター挿入ポイントを決定します。これは、ADD操作と組み合わせて使用されます。これらの操作は潜在的に不安定なフィルター名に依存しているため、INSERT_*操作よりもフィルターを追加するための推奨される挿入メカニズムです。フィルターチェーン内の別のフィルターの機能に依存しているか、影響を与える場合、フィルターの順序は重要です。フィルタークラス内では、フィルターは処理の順序で挿入されます。

名前説明
UNSPECIFIED

コントロールプレーンがフィルターを挿入する場所を決定します。フィルターが他のフィルターから独立している場合は、FilterClassを指定しないでください。

AUTHN

Istio認証フィルターの後にフィルターを挿入します。

AUTHZ

Istio認可フィルターの後にフィルターを挿入します。

STATS

Istio統計フィルターの前にフィルターを挿入します。

EnvoyFilter.ApplyTo

ApplyToは、Envoy構成のどこに指定されたパッチを適用する必要があるかを指定します。

名前説明
INVALID
LISTENER

パッチをリスナーに適用します。

FILTER_CHAIN

パッチをフィルターチェーンに適用します。

NETWORK_FILTER

パッチをネットワークフィルターチェーンに適用し、既存のフィルターを変更するか、新しいフィルターを追加します。

HTTP_FILTER

パッチをHTTP接続マネージャーのHTTPフィルターチェーンに適用し、既存のフィルターを変更するか、新しいフィルターを追加します。

ROUTE_CONFIGURATION

パッチをHTTP接続マネージャー内のルート構成(rds出力)に適用します。これは、仮想ホストには適用されません。現在、ルート構成オブジェクトではMERGE操作のみが許可されています。

VIRTUAL_HOST

ルート構成内の仮想ホストにパッチを適用します。

HTTP_ROUTE

ルート構成内のマッチした仮想ホスト内のルートオブジェクトにパッチを適用します。

CLUSTER

パッチをCDS出力のクラスターに適用します。新しいクラスターを追加するためにも使用されます。

EXTENSION_CONFIG

ECDS出力で拡張構成にパッチを適用するか、追加します。ECDSはHTTPフィルターでのみサポートされていることに注意してください。

BOOTSTRAP

非推奨。パッチをブートストラップ構成に適用します。

LISTENER_FILTER

パッチをリスナーフィルターに適用します。

EnvoyFilter.PatchContext

PatchContextは、トラフィックフローの方向とワークロードタイプに基づいて構成のクラスを選択します。

名前説明
ANY

サイドカーとゲートウェイの両方のすべてのリスナー/ルート/クラスター。

SIDECAR_INBOUND

サイドカーのインバウンドリスナー/ルート/クラスター。

SIDECAR_OUTBOUND

サイドカーのアウトバウンドリスナー/ルート/クラスター。

GATEWAY

ゲートウェイリスナー/ルート/クラスター。

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

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