Envoy 過濾器

EnvoyFilter 提供一種機制來自訂 Istio Pilot 產生的 Envoy 設定。使用 EnvoyFilter 修改特定欄位的值、新增特定篩選器,甚至新增全新的監聽器、叢集等。必須謹慎使用此功能,因為不正確的設定可能會導致整個網格不穩定。與其他 Istio 網路物件不同,EnvoyFilter 是以累加方式套用。在特定命名空間中,一個給定的工作負載可以存在任意數量的 EnvoyFilter。這些 EnvoyFilter 的套用順序如下:設定 根命名空間 中的所有 EnvoyFilter,然後是工作負載命名空間中的所有符合的 EnvoyFilter。

注意 1:此 API 的某些方面與 Istio 網路子系統和 Envoy 的 XDS API 的內部實作緊密相關。雖然 EnvoyFilter API 本身會保持向後相容性,但應在 Istio Proxy 版本升級時仔細監控透過此機制提供的任何 Envoy 設定,以確保已移除已棄用的欄位並適當取代。

注意 2:當多個 EnvoyFilter 在給定命名空間中繫結到相同的工作負載時,所有修補程式將依建立時間順序依序處理。如果多個 EnvoyFilter 設定彼此衝突,則行為未定義。

注意 3:若要將 EnvoyFilter 資源套用至系統中的所有工作負載(Sidecar 和閘道),請在設定 根命名空間 中定義資源,而不要使用 workloadSelector。

以下範例在根命名空間中宣告一個名為 istio-config 的全域預設 EnvoyFilter 資源,該資源會在系統中所有 sidecar 上針對出站連接埠 9307 新增自訂通訊協定篩選器。此篩選器應在終止的 tcp_proxy 篩選器之前新增,才會生效。此外,它會為閘道和 sidecar 中的所有 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」的 reviews 服務 Pod 的服務連接埠 8080 上收到的所有入站 HTTP 呼叫啟用 Envoy 的 Lua 篩選器。Lua 篩選器會呼叫外部服務 internal.org.net:8888,該服務需要在 Envoy 中進行特殊的叢集定義。此叢集也會做為此設定的一部分新增至 sidecar。

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

以下範例會針對 istio-system 命名空間中 SNI 主機 app.example.com 的輸入閘道上的接聽程式,覆寫 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

以下範例會插入一個 attributegen 篩選器,該篩選器會產生 istio_operationId 屬性,供 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 作業。如果您不需要繼承欄位,則建議使用 REPLACE 而非 MERGE。

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

以下範例會針對所有入站 sidecar 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

用於選取應套用此修補程式組態的特定 Pod/VM 集合的準則。如果省略,此組態中的一組修補程式會套用至相同命名空間中的所有工作負載執行個體。如果 EnvoyFilter 存在於組態根命名空間中,則會套用至任何命名空間中所有適用的工作負載。

targetRefsPolicyTargetReference[]

選用。targetRefs 會指定應套用原則的資源清單。指定作為目標的資源將決定原則套用至哪些工作負載。

目前,支援下列資源附加類型

  • 在相同命名空間中,kind: Gateway 搭配 group: gateway.networking.k8s.io
  • 在相同命名空間中,kind: Service 搭配 ""。此類型僅支援航點。

如果未設定,則會根據選取器定義套用原則。選取器和 targetRefs 最多只能設定一個。

注意:如果您在 1.22 之前的 Istio 版本中使用多版本環境中的 targetRefs 欄位,強烈建議您透過 istio.io/rev 標籤將原則固定至執行 1.22 以上版本的版本。這是為了防止連線到較舊控制平面的 Proxy (不了解 targetRefs 欄位) 在升級過程中將原則錯誤解讀為命名空間範圍的原則。

注意:航點 Proxy 必須使用此欄位才能套用原則;selector 原則將會遭到忽略。

configPatchesEnvoyConfigObjectPatch[]

一個或多個具有比對條件的修補程式。

priorityint32

優先順序定義在內容中套用修補程式集的順序。當一個修補程式相依於另一個修補程式時,修補程式套用順序就很重要。API 提供兩種主要方式來排序修補程式。根命名空間中的修補程式集會先於工作負載命名空間中的修補程式集套用。修補程式集中的修補程式會依照它們在 configPatches 清單中出現的順序處理。

優先順序的預設值為 0,範圍為 [min-int32, max-int32]。優先順序為負值的修補程式集會先於預設值處理。優先順序為正值的修補程式集會在預設值之後處理。

建議從 10 的倍數的優先順序值開始,以保留進一步插入的空間。

修補程式集會依照下列遞增的索引鍵順序排序:優先順序、建立時間、完整資源名稱。

EnvoyFilter.ProxyMatch

要比對的 Proxy 的一個或多個屬性。

欄位類型描述必要
proxyVersionstring

golang regex 格式 (RE2) 的規則運算式,可用來使用特定版本的 istio Proxy 來選取 Proxy。指定 Proxy 的 Istio 版本是從 Proxy 連線到 Pilot 時提供的節點中繼資料欄位 ISTIO_VERSION 取得。此值會以環境變數 (ISTIO_META_ISTIO_VERSION) 嵌入 Istio Proxy Docker 映像檔中。自訂 Proxy 實作應提供此中繼資料變數,才能利用 Istio 版本檢查選項。

metadatamap<string, string>

比對 Proxy 連線到 Istio Pilot 時提供的節點中繼資料。請注意,雖然 Envoy 的節點中繼資料類型為 Struct,但 Pilot 只會處理字串索引鍵值組。中繼資料中指定的所有索引鍵都必須與確切的值比對。如果遺失任何指定的索引鍵或值無法比對,則比對將會失敗。

EnvoyFilter.ClusterMatch

必須符合 ClusterMatch 中指定的條件,修補程式才能套用至叢集。

欄位類型描述必要
portNumberuint32

產生此叢集的服務連接埠。如果省略,則會套用至任何連接埠的叢集。注意:對於入站叢集,它是服務目標連接埠。

servicestring

此叢集的完整服務名稱。如果省略,則會套用至任何服務的叢集。對於透過服務項目定義的服務,服務名稱與服務項目中定義的主機相同。注意:對於入站叢集,此名稱會遭到忽略。

subsetstring

與服務相關聯的子集。如果省略,則會套用至服務的任何子集的叢集。

namestring

要比對的叢集的確切名稱。若要依名稱比對特定叢集 (例如內部產生的 Passthrough 叢集),請將 clusterMatch 中的所有欄位都留空,只保留名稱。

EnvoyFilter.RouteConfigurationMatch

必須符合 RouteConfigurationMatch 中指定的條件,修補程式才能套用至路由組態物件或路由組態中的特定虛擬主機。

欄位類型描述必要
portNumberuint32

產生此路由組態的服務連接埠號碼或閘道伺服器連接埠號碼。如果省略,則會套用至所有連接埠的路由組態。

portNamestring

僅適用於 GATEWAY 內容。產生此路由組態的閘道伺服器連接埠名稱。

gatewaystring

產生此路由組態的 Istio 閘道組態的命名空間/名稱。只有在內容為 GATEWAY 時才適用。應該採用 namespace/name 格式。請將此欄位與 portNumberportName 搭配使用,以準確選取閘道組態物件中特定 HTTPS 伺服器的 Envoy 路由組態。

vhostVirtualHostMatch

比對路由組態中的特定虛擬主機,並將修補程式套用至虛擬主機。

namestring

要比對的路由組態名稱。可用於依名稱比對特定的路由組態,例如所有 sidecar 內部產生的 http_proxy 路由組態。

EnvoyFilter.ListenerMatch

必須符合接聽程式比對中指定的條件,修補程式才能套用至所有篩選器鏈中的特定接聽程式,或是接聽程式內的特定篩選器鏈。

欄位類型描述必要
portNumberuint32

正在傳送/接收流量的服務連接埠/閘道連接埠。如果未指定,則會比對所有接聽程式。即使會為執行個體/Pod 連接埠產生入站接聽程式,也應該只使用服務連接埠來比對接聽程式。

filterChainFilterChainMatch

比對接聽程式中的特定篩選器鏈。如果指定,修補程式將會套用至篩選器鏈 (以及指定之特定篩選器),而不會套用至接聽程式中的其他篩選器鏈。

listenerFilterstring

比對特定的接聽程式篩選器。如果指定,修補程式將會套用至接聽程式篩選器。

namestring

依其名稱比對特定接聽程式。Pilot 產生的接聽程式通常會命名為 IP:Port。

EnvoyFilter.Patch

修補程式指定應該如何修改選取的物件。

欄位類型描述必要
operationOperation

決定應如何套用修補程式。

valueStruct

正在修補的物件的 JSON 組態。這會使用 proto 合併語意與路徑中的現有 proto 合併。

filterClassFilterClass

決定篩選器插入順序。

EnvoyFilter.EnvoyConfigObjectMatch

在將修補程式套用至指定 Proxy 的產生組態之前,必須符合的一個或多個比對條件。

欄位類型描述必要
contextPatchContext

要比對的特定組態產生內容。Istio Pilot 會在閘道、進入 sidecar 的入站流量和來自 sidecar 的出站流量的內容中產生 Envoy 組態。

proxyProxyMatch

比對與 Proxy 相關聯的屬性。

listenerListenerMatch (其中一個)

比對 Envoy 接聽程式屬性。

routeConfigurationRouteConfigurationMatch (其中一個)

比對 Envoy HTTP 路由組態屬性。

clusterClusterMatch (其中一個)

比對 Envoy 叢集屬性。

EnvoyFilter.EnvoyConfigObjectPatch

要對各種 Envoy 組態物件進行的變更。

欄位類型描述必要
applyToApplyTo

指定應該在 Envoy 組態中的哪個位置套用修補程式。比對預期會根據 applyTo 選取適當的物件。例如,具有 HTTP_FILTER 的 applyTo 預期會在接聽程式上具有比對條件,在 envoy.filters.network.http_connection_manager 上具有網路篩選器選取,並且具有相對於應執行插入的 HTTP 篩選器的子篩選器選取。同樣地,CLUSTER 上的 applyTo 應該在叢集上具有比對 (如果有的話),而不是在接聽程式上。

matchEnvoyConfigObjectMatch

比對接聽程式/路由組態/叢集。

patchPatch

要套用的修補程式和作業。

EnvoyFilter.RouteConfigurationMatch.RouteMatch

比對路由組態中虛擬主機內的特定路由。

欄位類型描述必要
namestring

預設產生的 Route 物件會命名為 default。使用虛擬服務產生的 Route 物件會採用虛擬服務的 HTTP 路由中使用的名稱。

actionAction

比對具有特定動作類型的路由。

EnvoyFilter.RouteConfigurationMatch.VirtualHostMatch

比對路由組態內的特定虛擬主機。

欄位類型描述必要
namestring

Istio 產生的 VirtualHosts 物件會命名為 host:port,其中 host 通常對應於 VirtualService 的 host 欄位或登錄中服務的主機名稱。

routeRouteMatch

比對虛擬主機內的特定路由。

EnvoyFilter.ListenerMatch.FilterChainMatch

對於具有多個篩選器鏈的接聽程式 (例如,具有允許 mTLS 的 sidecar 上的入站接聽程式、具有多個 SNI 比對的閘道接聽程式),篩選器鏈比對可用於選取要修補的特定篩選器鏈。

欄位類型描述必要
namestring

指派給篩選器鏈的名稱。

snistring

篩選器鏈的比對條件使用的 SNI 值。如果篩選器鏈沒有 sni 比對,此條件的評估結果會為 false。

transportProtocolstring

僅適用於 SIDECAR_INBOUND 內容。如果非空白,則為在判斷篩選器鏈比對時要考量的傳輸通訊協定。此值會與新連線的傳輸通訊協定進行比較,當 tls_inspector 接聽程式篩選器偵測到該通訊協定時。

接受的值包括

  • raw_buffer - 預設值,在未偵測到任何傳輸通訊協定時使用。
  • tls - 當 TLS 檢測器偵測到 TLS 通訊協定時設定。
applicationProtocolsstring

僅適用於 sidecar。如果非空白,則為在判斷篩選器鏈比對時要考量的一組以逗號分隔的應用程式通訊協定。此值會與新連線的應用程式通訊協定進行比較,當 http_inspector 等接聽程式篩選器偵測到該通訊協定時。

接受的值包括:h2、http/1.1、http/1.0

filterFilterMatch

要套用修補程式的特定篩選器名稱。設定為 envoy.filters.network.http_connection_manager 可新增篩選器或將修補程式套用至 HTTP 連線管理員。

destinationPortuint32

篩選器鏈的匹配條件所使用的 destination_port 值。如果篩選器鏈沒有 destination_port 匹配,則此條件會評估為 false。

EnvoyFilter.ListenerMatch.FilterMatch

在篩選器鏈中匹配特定篩選器的條件。

欄位類型描述必要
namestring

要匹配的篩選器名稱。對於標準 Envoy 篩選器,應使用規範篩選器名稱。

subFilterSubFilterMatch

在此篩選器內要匹配的下一層篩選器。通常用於 HTTP 連線管理員篩選器和 Thrift 篩選器。

EnvoyFilter.ListenerMatch.SubFilterMatch

在另一個篩選器內匹配特定篩選器的條件。此欄位通常用於匹配 envoy.filters.network.http_connection_manager 網路篩選器內的 HTTP 篩選器。這也適用於 Thrift 篩選器。

欄位類型描述必要
namestring

要匹配的篩選器名稱。

EnvoyFilter.RouteConfigurationMatch.RouteMatch.Action

Action 指的是當 HTTP 路由匹配時,Envoy 採取的路由動作。

名稱描述
ANY

所有三個路由動作

ROUTE

將流量路由到叢集 / 加權叢集。

REDIRECT

重新導向請求。

DIRECT_RESPONSE

使用特定酬載直接回應請求。

EnvoyFilter.Patch.Operation

Operation 表示如何將修補程式套用至選定的組態。

名稱描述
INVALID
MERGE

使用 proto 合併語意,將提供的組態與產生的組態合併。如果您要完整指定組態,請改用 REPLACE

ADD

將提供的組態新增至現有清單(監聽器、叢集、虛擬主機、網路篩選器或 HTTP 篩選器)。當 applyTo 設定為 ROUTE_CONFIGURATIONHTTP_ROUTE 時,此操作將被忽略。

REMOVE

從清單中移除選取的物件(監聽器、叢集、虛擬主機、網路篩選器、路由或 HTTP 篩選器)。不需要指定值。當 applyTo 設定為 ROUTE_CONFIGURATIONHTTP_ROUTE 時,此操作將被忽略。

INSERT_BEFORE

對具名物件陣列執行插入操作。此操作通常僅在篩選器或路由的上下文中有用,其中元素的順序很重要。路由應根據最特定到最不特定的匹配條件排序,因為會選取第一個匹配的元素。對於叢集和虛擬主機,陣列中元素的順序並不重要。在選取的篩選器或子篩選器之前插入。如果未選取篩選器,則指定的篩選器將插入清單的最前面。

INSERT_AFTER

對具名物件陣列執行插入操作。此操作通常僅在篩選器或路由的上下文中有用,其中元素的順序很重要。路由應根據最特定到最不特定的匹配條件排序,因為會選取第一個匹配的元素。對於叢集和虛擬主機,陣列中元素的順序並不重要。在選取的篩選器或子篩選器之後插入。如果未選取篩選器,則指定的篩選器將插入清單的最後面。

INSERT_FIRST

對具名物件陣列執行插入操作。此操作通常僅在篩選器或路由的上下文中有用,其中元素的順序很重要。路由應根據最特定到最不特定的匹配條件排序,因為會選取第一個匹配的元素。對於叢集和虛擬主機,陣列中元素的順序並不重要。根據選取篩選器是否存在,插入清單中的第一個位置。當您希望篩選器根據「匹配子句」中指定的匹配條件位於清單中的第一個位置時,這特別有用。

REPLACE

以新內容取代具名篩選器的內容。REPLACE 操作僅對 HTTP_FILTERNETWORK_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

閘道監聽器/路由/叢集。

此資訊對您有幫助嗎?
您有任何改進建議嗎?

感謝您的回饋!