x-forwarded-for将openshift路由从HTTP更改为https时丢失的报头



在Openshift 4.6中,我部署了一个公开nginx服务的应用程序。当使用http时,我可以在nginx日志中看到$http_x_forwarded_for字段的IP。每当我切换到https,$http_x_forwarded_for头丢失(-)。

http的路由配置:

spec:
host: <my.host.com>
to:
kind: Service
name: my-nginx
weight: 100
port:
targetPort: 80-tcp
wildcardPolicy: None

https的路由配置:

spec:
host: <my.host.com>
to:
kind: Service
name: my-nginx
weight: 100
port:
targetPort: 443-tcp
tls:
termination: passthrough
wildcardPolicy: None

有一种方法,我可以保留http头的https请求?

不在passthrough模式下,您不能!
Passthrough意味着TLS流量没有解密,因此没有机会进入控制器(haproxy)能够添加或修改报头字段。请求转发只在第4层(tcp)上完成。
您需要切换到edgereencrypt终止模式才能正常工作。

是的,从v4.6开始,你应该能够做到这一点。医生在这里

为此,您必须使用httpHeaders.forwardedHeaderPolicy参数配置入口控制器操作符

然而,当你使用类型为"passthrough"的路由时,HAProxy不会"触摸"。或以任何方式修改请求(即解密和/或重新加密)并将其"原样"发送;对于端点,没有"x-forward -for">

它工作于"edge""reencrypt"类型的路由,取决于在入口控制器上设置的参数

所以,如果在"passthrough"模式你的应用程序没有收到"x-forwarded-for"头,这是因为在请求上没有这样的头。要么你的浏览器直接击中OCP入口控制器(即HAProxy),要么你的负载平衡器在OCP前面没有设置这个头

相关内容