在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)上完成。
您需要切换到edge
或reencrypt
终止模式才能正常工作。
是的,从v4.6开始,你应该能够做到这一点。医生在这里
为此,您必须使用httpHeaders.forwardedHeaderPolicy
参数配置入口控制器操作符
然而,当你使用类型为"passthrough"
的路由时,HAProxy不会"触摸"。或以任何方式修改请求(即解密和/或重新加密)并将其"原样"发送;对于端点,没有"x-forward -for">
它工作于"edge"
或"reencrypt"
类型的路由,取决于在入口控制器上设置的参数
所以,如果在"passthrough"模式你的应用程序没有收到"x-forwarded-for"
头,这是因为在请求上没有这样的头。要么你的浏览器直接击中OCP入口控制器(即HAProxy),要么你的负载平衡器在OCP前面没有设置这个头