Istio Sidecar中Lua EnvoyFilter未追加响应头问题排查求助
问题原因
你的Lua EnvoyFilter没有生效,核心是三个配置错误:
- 命名空间不匹配:EnvoyFilter只会推送给同命名空间下匹配标签的工作负载,如果你的
app=gateway业务Pod不在gateway命名空间,配置根本不会下发。 - 使用了已废弃的v2 Envoy API:Istio 1.8之后完全移除了v2 API支持,你配置里的
envoy.config.filter.http.lua.v2.Lua是v2版本的类型定义,会被istiod直接丢弃,不会出现在Sidecar的configDump里。 - 过滤器名称写了旧版短名:新版本Istio里所有过滤器都要求用全限定名,你原来写的
envoy.http_connection_manager、envoy.router、envoy.lua都是旧版短名,匹配不到过滤器链的对应位置,patch会直接失败。
修复后的配置
直接替换成下面的配置即可,注意确认命名空间和Pod标签和你的实际环境一致:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: response-interceptor namespace: gateway spec: workloadSelector: labels: app: gateway configPatches: - applyTo: HTTP_FILTER match: context: SIDECAR_INBOUND listener: filterChain: filter: name: envoy.filters.network.http_connection_manager subFilter: name: envoy.filters.http.router patch: operation: INSERT_BEFORE value: name: envoy.filters.http.lua typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua" inlineCode: | function envoy_on_response(response_handle) response_handle:headers():add("X-Custom-Namespace", "worked") end
验证步骤
- 配置应用10秒后,执行
istioctl proxy-config listeners <你的业务Pod名> -n gateway | grep lua,有输出就代表过滤器已经成功注入到Sidecar。 - 直接调用业务接口,查看响应头就能看到
X-Custom-Namespace: worked字段。 - 如果还是不生效,直接查istiod的日志,搜
response-interceptor就能看到具体的报错原因,比如标签匹配不到、配置格式错误之类的。
内容的提问来源于stack exchange,提问作者Kush Trivedi
相关产品推荐
相关产品推荐

