过滤istio sidecar代理中的请求日志



我有一个azure前门位于aks集群的前面,该集群将istio和代理sidecars注入每个pod。

由于Azure前门端点的数量,Azure前门具有至少每秒命中请求一次的健康探测。应用程序收到的请求数量非常高,以至于我想放慢间隔时间,这会影响到失去前门的好处。

微软建议在dotnet中编写一个遥测初始化程序,以将请求标记为合成请求,然而这似乎是一个巨大的问题,我需要多个团队来购买。以及复制到多种语言

相反,我想使用特使过滤器来查看请求的标头,以及它是否与前门代理匹配"边缘健康探测";我想完全忽略它。

这将意味着我可以控制发送到应用程序见解的日志,可以推出一个解决方案,而不需要涉及开发人员。

我已经看过特使过滤器,但不能真正理解它是如何工作的。

这是可能的特使过滤器或有谁知道一个更好的方法?

谢谢凯文

您可以使用EnvoyFilter。本例识别入口网关上的报头,并简单地发送一个200响应,而不将其发送到工作负载:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: custom-ms-header
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: NETWORK_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.network.http_connection_manager
patch:
operation: INSERT_BEFORE
value:
name: custom.ms-header
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inlineCode: |
function envoy_on_request(request_handle)
val = request_handle:headers():get("some-header")
if (val and val ~= "some-value") then
request_handle:respond({[":status"] = "200"}, "ok")                        
end
end

或者,您可以应用它来匹配某些工作负载

[...]
namespace: my-namespace
spec:
workloadSelector:
labels:
istio: my-worklload
configPatches:
- applyTo: NETWORK_FILTER
match:
context: SIDECAR_INBOUND
listener:
filterChain:
[...]

但这要求您将其应用于每个工作负载。

我是否误解了这一点,但如果您想忽略请求,为什么不简单地关闭健康探测?

或者将探测的间隔从默认的30秒更改为255,从而减少请求,当然,默认的健康探测是HEAD请求,因此您可以轻松地将它们过滤掉。

相关内容

  • 没有找到相关文章

最新更新