通过 EnvoyFilter 添加时,Istio 会去除标头

问题描述

我正在尝试在入站请求中向特定工作负载添加特定的“x-envoy...”标头。更准确地说,它是 x-envoy-max-retries 标头。

我是这样做的:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
Metadata:
  name: strip-filter
  namespace: default
spec:
  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.lua
        typed_config:
          '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
          inlineCode: |
            function envoy_on_request(request_handle)
              request_handle:headers():add("test-header","1")
              request_handle:headers():add("x-envoy-max-retries","0")
              request_handle:headers():add("test-header","2")
            end
  workloadSelector:
    labels:
      app: test-app

成功添加test-header 及其两个值 - 可以从 sidecar 代理的日志中观察到,也可以通过登录工作负载手动观察。但 x-envoy-max-retries 标头丢失(且未应用)。

我在进行内部调用(使用来自另一个工作负载的工作负载的完全限定名称)以及外部调用(通过 VirtualService)时观察到这一点。

任何想法如何解决这个问题?我不想使用 VirtualServices 及其重试属性来禁用重试,因此虚拟服务对我来说是行不通的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)