使用 Istio 的 (1.6.0) envoy lua 过滤器添加自定义响应头
2020-7-5 7:21:21
收藏:0
阅读:128
评论:2
我正在运行 Istio 1.6.0。 我想要为所有从我的服务发出的出站响应添加一些自定义标头。所以我尝试使用 envoyfilter 来实现。然而,我没有看到我的代理得到正确配置。
我正在尝试使用的 envoy 过滤器配置是
kind: EnvoyFilter
metadata:
name: lua-filter
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
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_response(response_handle)
response_handle:logInfo(" ========= XXXXX ========== ")
response_handle:headers():add("X-User-Header", "worked")
end
我确实在 istio-system 命名空间中运行着我的入口网关 pod
❯ kgp -l istio=ingressgateway -n istio-system
NAME READY STATUS RESTARTS AGE
ingress-gateway-b4b5cffc9-wz75r 1/1 Running 0 3d12h
ingress-gateway-b4b5cffc9-znx9b 1/1 Running 0 28h
我希望能在 curl 我的服务时看到 X-User-Header。
不幸的是,我没有看到任何自定义标头。
我尝试检查 istio-system 中 ingress-gateway pod 的 proxy-configs,但我根本没有看到 envoy.lua 被配置。
我不确定我是否在正确地进行调试。
istioctl proxy-config listener ingress-gateway-b4b5cffc9-wz75r.istio-system -n istio-system --port 443 -o json | grep "name"
"name": "0.0.0.0_443",
"name": "istio.stats",
"name": "envoy.tcp_proxy",
"name": "istio.stats",
"name": "envoy.tcp_proxy",
"name": "envoy.listener.tls_inspector",
请让我知道我错过了什么或者配置不正确。 任何关于如何进一步调试的建议也会非常有帮助。
非常感谢。
点赞
用户13821160
更新示例筛选器(修复警告,更新版本)截至 Lua v3 和 Istio v1.10.3:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: my-test-filter
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: HTTP_FILTER
match:
# 上下文省略以便适用于侧边车和网关
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
subFilter:
name: "envoy.filters.http.router"
patch:
operation: INSERT_BEFORE
value: # lua filter specification
name: envoy.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("my-oidc-endpoint", "http://localhost:8080/auth/realms/my-realm/.well-known/openid-configuration")
end
2021-07-20 21:18:36
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

根据我的 istio 集群版本 1.6.3 和 1.6.4 的检查,你的示例完全正常。请看下面来自我的集群的代码。
我使用 curl 进行了检查:
$ curl -s -I -X HEAD x.x.x.x/ HTTP/1.1 200 OK server: istio-envoy date: Mon, 06 Jul 2020 08:35:37 GMT content-type: text/html content-length: 13 last-modified: Thu, 02 Jul 2020 12:11:16 GMT etag: "5efdcee4-d" accept-ranges: bytes x-envoy-upstream-service-time: 2 x-user-header: worked并且
我使用 istio ingress-gateway pod 的 config_dump 进行了检查。
我在那里使用以下命令:
kubectl exec -ti istio-ingressgateway-78db9f457d-xfhl7 -n istio-system -- /bin/bash从 config_dump 得到的结果:
curl 0:15000/config_dump | grep X-User-Header % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 128k 0 128k 0 0 9162k 0 --:--:-- --:--:-- --:--:-- 9162k "inline_code": "function envoy_on_response(response_handle)\n response_handle:logInfo(\" ========= XXXXX ========== \")\n response_handle:headers():add(\"X-User-Header\", \"worked\")\nend\n"所以,正如您所看到的,它可以工作,请求已添加头,并且函数在 istio ingress gateway 中处于活动状态。
您是否可以尝试使用上述 curl 再次检查它,检查 istio ingress-gateway tcp_dump,然后让我知道它是否适用于您?