kubernetes 入口控制器不转发请求 headers

kubernetes ingress controller not forwarding request headers

我在 kubernetes 集群上工作,面临的问题是:

从UI/browser,我可以看到它正在发送一个名为“request_id”的请求header,请参考图片:

但是在检查后端时它不可用。通过互联网搜索时,我可以看到人们正在谈论将以下条目添加到 Ingress object:

nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header request_id "$req_id";

但是它正在为此生成一个新值,而不是传递浏览器提交的值。

任何想法,这里可能缺少什么?

如果要将自定义 header 传递到后端,则需要使用这种注解:

nginx.ingress.kubernetes.io/configuration-snippet: |
  more_set_headers "Request-Id: $request_id

在您的配置中,您正在使用变量 $req_id,但您需要传递 UI/browser 发送的变量。

基本上,ingress-nginx-controller 会删除任何包含“_” 的请求 headers。您可以找到各种讨论此问题的话题,例如

Why HTTP servers forbid underscores in HTTP header names

所以,我只是启用入口控制器来传递这样的请求headers。这可以通过将以下条目添加到 configmap "nginx-configuration"

来完成
data:
  enable-underscores-in-headers: "true"

IMO,这是一个非常干净的解决方案,因为可能有许多应用程序可能会在请求中使用“_”headers。