【问题标题】:NGINX Ingress Controller's Load Balancer is hiding the real client IPNGINX Ingress Controller 负载均衡器隐藏了真实的客户端 IP
【发布时间】:2022-01-18 05:27:45
【问题描述】:

设置

我正在使用 K8s,并设置了一个小型单节点裸机集群。对于这个集群,我提取了 NGINX 入口控制器配置 from here,它来自 official getting started guide

进展

好的,所以拉这个设置了一堆东西,包括前面的 LoadBalancer。我喜欢这样。

对于我的应用程序(单个 pod,返回调用方 IP) 我创建了一堆东西来玩。我现在启用了 SSL 和另一个入口控制器,它指向我的应用程序的服务,然后指向部署的 pod。这一切都很完美,我可以用https浏览页面。见:

但是...

我的应用没有从客户端获取原始 IP。所有客户端请求最终都来自 10.42.0.99...这是来自describe 的控制器配置:

调试

我尝试了在线建议的50 solutions,但它们都不起作用(ConfigMaps、注释、代理模式等)。而且我进行了深入调试,到达 pod 的请求中没有 X-Forwarder-For 或任何类似的标头。以前我直接在 apache 上测试过同一个应用程序,也在 docker 设置中测试过,它没有任何问题。

还值得一提的是,我查看了入口控制器的 pod,我已经在其中看到了相同的内部 IP。我不知道如何进一步调试控制器的 pod。

如果有帮助,很乐意分享更多信息和配置。

2021 年 12 月 15 日更新

我想我知道问题出在哪里......我没有提到我是如何安装集群的,假设它无关紧要。现在我认为这是最重要的事情????

我设置了using K3S,它有its own LoadBalancer。并且通过调试,我现在看到我在 NGINX 中的所有请求都有负载均衡器的 pod 的 IP...

我仍然不知道如何让这个 Klipper LB 提供源 IP 地址。

2021 年 12 月 17 日更新

用 Klipper LB 开张 an issue

【问题讨论】:

    标签: docker nginx kubernetes controller


    【解决方案1】:

    确保您的 Nginx 入口配置映射已启用用户 IP real-ip-header: proxy_protocol 尝试将此行更新为配置映射。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        app.kubernetes.io/component: controller
      name: ingress-nginx-controller
      namespace: ingress-nginx
    data:
      compute-full-forwarded-for: "true"
      use-forwarded-headers: "false"
      real-ip-header: proxy_protocol
    

    如果这不起作用,您可以只将此配置作为注释注入您的入口配置并测试一次。

    nginx.ingress.kubernetes.io/configuration-snippet: |
          more_set_headers "X-Forwarded-For $http_x_forwarded_for";
    

    【讨论】:

    • 仍然通过这个获取负载均衡器的 IP。但我想我找到了问题,现在将其添加到“更新”部分的问题描述中。
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多