首页 > 解决方案 > 为特定的路由或路径应用 EnvoyFilter

问题描述

我想在 Istio 中使用 EnvoyFilter 来指定特定路由或路径的行为。

例如,如果 Pod 有多个访问路径,例如 /foo 和 /bar,则拒绝访问 /foo 并返回状态 500,但允许访问 /bar。

我只知道如何使用workloadSelector 阻止对特定Pod 的所有访问,如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: block-all
spec:
  workloadSelector:
    labels:
      app: { some-pods-label }
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
            subFilter:
              name: "envoy.router"
    patch:
      operation: INSERT_BEFORE
      value:
       name: envoy.lua
       typed_config:
         "@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
         inlineCode: |
           function envoy_on_request(handle)
             handle:respond({[":status"] = "500"})
           end

有没有比在 lua 脚本中为所有路径编写条件语句更好的方法?

或者有没有办法使用 VirtualService 的元数据来确定是否应用 EnvoyFilter?

标签: istioenvoyproxy

解决方案


推荐阅读