EnvoyFilter
EnvoyFilter
提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 来修改某些字段的值,添加特定的过滤器,甚至添加全新的 listener、cluster 等。
这个功能必须谨慎使用,因为不正确的配置可能破坏整个网格的稳定性。
对于特定命名空间中的特定工作负载,可以存在任意数量的 EnvoyFilter。
这些 EnvoyFilter 的应用顺序如下:
配置根命名空间中的所有 EnvoyFilter,
其次是工作负载命名空间中的所有匹配 EnvoyFilter。
配置介绍
下面来看一个配置样例:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: lazyxds-egress-als
namespace: istio-system
spec:
workloadSelector:
labels:
app: istio-egressgateway-lazyxds
configPatches:
- applyTo: NETWORK_FILTER
match:
context: GATEWAY
listener:
filterChain:
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"
access_log:
- name: envoy.access_loggers.file
typed_config:
"@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
path: "/dev/stdout"
log_format:
text_format: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPON