簡體   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