我想在 Istio 中使用 EnvoyFilter 来指定特定路由或路径的行为。
例如,如果 Pod 有多个访问路径,如 /foo 和 /bar, 拒绝访问 /foo 并以状态 500 响应,但允许访问 /bar。
我只知道如何使用工作负载选择器阻止对特定 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?