2

我正在尝试在对特定工作负载的入站请求中添加特定的“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成功添加了两个值 - 可以从边车代理的日志中观察到,也可以通过登录工作负载手动观察。但是x-envoy-max-retries标题丢失了(并且没有被应用)。

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

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

4

0 回答 0