envoyfilter资源
envoyfilter资源
直接配置网格中envoy的filter,使用envoy原生语法,以补丁/合并式合,配置到sidecar envoy上
istio并没有完全实现envoy的全部功能,所以有些额外的功能,需要用envoyfilter资源,配置envoy的各种过滤器
envoyfilter资源提供自定义sidecar envoy的配置接口,支持修改、添加字段,增加侦听器、集群等
未实现功能:
- 跨域集群网络构建:envoyfilter + se + gw
- 扩展认证
- 限速
- 访问日志等
配置生效方式
1个命名空间中允许1个workload(pod)关联多个envoyfilter资源。当有多个envoyfilter资源时,首先是root namespace(istiod运行的命名空间,这里的配置对所有命名空间都生效)的所有envoyfilter生效,再是当前workload命名空间中所有匹配到的envoyfilter资源
注:
- istio不同版本时,envoyfilter可能不具备向后兼容,所以升级时,需要仔细对比是否有弃用字段,替换字段
- 多个envoyfilter资源应用在1个workload时,根据创建时间顺序生效,若配置冲突无法判断
- 应谨慎使用,可能破坏网格稳定性
配置
kubectl explain

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
spec:
configPatches: #配置补丁
- applyTo: str #补丁应用的地方
#INVALID,
#LISTENER,侦听器
#FILTER_CHAIN,过滤器链
#NETWORK_FILTER
#HTTP_FILTER
#ROUTE_CONFIGURATION
#VIRTUAL_HOST
#HTTP_ROUTE
#CLUSTER
#EXTENSION_CONFIG
#BOOTSTRAP
match: #具体配置对象
listener: #侦听器相关配置
name: str
filterChain:
name: str
applicationProtocols: str
destinationPort: str
filter:
name: str
subFilter:
name: str
sni: str
transportProtocol: str
listenerFilter: str
portName: str
portNumber: int
routeConfiguration: #路由相关配置
name: str
vhost:
name: str
route:
name: str
action: str
gateway: str
portName: str
portNumber: int
cluster: #集群相关配置
name: str
portNumber: int
service: str
subset: str
context: str #补丁的上下文
#ANY,所有envoy都生效
#SIDECAR_INBOUND,sidecar入站侦听器上
#SIDECAR_OUTBOUND,sidecar出站侦听器上
#GATEWAY,网关envoy上生效
proxy: #istio proxy的版本,指定版本避免版本不兼容问题
metadata: {}
proxyVersion: str
patch: #补丁具体操作内容
filterClass: str #过滤器类型
#UNSPECIFIED
#AUTHN,认证相关filter
#AUTHZ,授权相关filter
#STATS,状态相关filter
operation: str #如何打补丁
#INVALID,标记为不合法
#MERGE,合并
#ADD,添加
#REMOVE,删除
#INSERT_BEFORE,前面插入
#INSERT_AFTER,后面插入
#INSERT_FIRST,首行插入
#REPLACE,替换
value: str #补丁配置段
priority: int #优先级
workloadSelector: #标签选择器,选择生效pod,空则生效所有
labels: {}
官方案例
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.config.filter.network.custom_protocol"
typed_config: ...
- 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

浙公网安备 33010602011771号