【问题标题】:x-forwarded-for headers lost when changing openshift route from http to https将 openshift 路由从 http 更改为 https 时,x-forwarded-for 标头丢失
【发布时间】:2021-06-02 23:56:01
【问题描述】:

在 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

有没有办法可以保留 https 请求的 http 标头?

【问题讨论】:

    标签: nginx http-headers openshift


    【解决方案1】:

    不在passthrough 模式下,你不能!
    直通意味着 TLS 流量解密,因此入口控制器(haproxy)不可能添加或修改标头字段。 请求转发仅在第 4 层 (tcp) 上完成。
    您需要切换到edgereencrypt 终止模式才能使用。

    【讨论】:

      【解决方案2】:

      是的,从 v4.6 开始,您应该能够做到这一点。 Doc here

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

      但是,当您使用类型为"passthrough" 的路由时,由于 HAProxy 不会“触摸”或以任何方式修改请求(即解密和/或重新加密)并将其“按原样”路由到端点,因此不会“ x-forwarded-for" 被添加或修改。

      它适用于 kind"edge"or"reencrypt" 的路由,具体取决于入口控制器上设置的参数

      因此,如果您的应用在“直通”模式下没有收到 "x-forwarded-for" 标头,那是因为请求中没有此类标头。要么您的浏览器直接访问 OCP 入口控制器(即 HAProxy),要么您在 OCP 前面的负载均衡器没有设置此标头

      【讨论】:

      • forwardedHeaderPolicy 似乎没有效果。使用edge 它可以按预期工作。使用passthrough,标头由于某种原因丢失。
      猜你喜欢
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2019-03-09
      相关资源
      最近更新 更多