kubernetes入口控制器未转发请求标头

时间:2019-12-12 13:00:56

标签: kubernetes kubernetes-ingress nginx-ingress

我正在研究kubernetes集群,面临的问题是:

从UI /浏览器中,我可以看到它正在发送一个名为“ request_id ”的请求标头,请参考图片:

enter image description here

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

基本上,ingress-nginx控制器删除其中包含“ _” 的所有请求标头。您可以找到讨论此问题的各种主题,例如

Why HTTP servers forbid underscores in HTTP header names

因此,我刚刚启用了入口控制器来传递此类请求标头。这可以通过在configmap“ nginx-configuration

中添加以下条目来完成
Validation Error

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