繁体   English   中英

NGINX Ingress Controller 的负载均衡器隐藏了真正的客户端 IP

[英]NGINX Ingress Controller's Load Balancer is hiding the real client IP

设置

我正在玩 K8s,并建立了一个小型的单节点裸机集群。 对于这个集群,我从这里提取了 NGINX Ingress Controller 配置,它来自官方入门指南

进步

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

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

集群设置

但...

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

入口控制器配置

调试

我尝试了在线提出的50 种解决方案,但都没有奏效(ConfigMap、注释、代理模式等)。 而且我进行了深入调试,在到达 pod 的请求中没有X-Forwarder-For或任何类似的 header。 以前我直接在 apache 以及 docker 设置中测试了相同的应用程序,它没有任何问题。

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

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

更新 2021-12-15

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

使用 K3S设置它,它有自己的 LoadBalancer 通过调试,我现在看到我在 NGINX 中的所有请求都有负载均衡器 pod 的 IP ......

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

更新 2021-12-17

用 Klipper LB 打开了一个问题

确保您的 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";

@milosmns - 我一直在尝试的方法之一是不安装 servicelb (--no-deploy=servicelb) 并删除 traefik (--no-deploy=traefik)。

而是部署 haproxy 入口( https://forums.rancher.com/t/how-to-access-rancher-when-k3s-is-installed-with-no-deploy-servicelb/17941/3 )并启用代理协议。 当你这样做时,所有命中 haproxy 入口的请求都将被注入代理协议,无论它们如何路由,你都可以从任何地方获取它们。 您还可以让 haproxy 注入 X-Real-IP 标头。

重要的是 haproxy 应该在所有主节点上运行。 由于没有 servicelb,您的 haproxy 将始终获得正确的 ip 地址。

如果使用 GCP,只需将 externalTrafficPolicy 设置为“Local”

将此添加到入口 controller 服务 externalTrafficPolicy: Local

 service: externalTrafficPolicy: Local

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM