如何在 Kubernetes Nginx Ingress Controller 中将 Nginx IP 附加到 X-Forwarded-For

How to append Nginx IP to X-Forwarded-For in Kubernetes Nginx Ingress Controller

我想知道“如何将 Nginx IP 附加到 X-Forwarded-For”

我在 Ingress 注释中添加了片段。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ing
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";

但是在nginx.conf中好像是双重设置。

    proxy_set_header X-Forwarded-For        $remote_addr;
...
    proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";

所以我的后端服务器会得到两个X-Forwarded-For

有人知道“如何禁用 Nginx Ingress Controller 生成的 proxy_set_header 部分”吗?

        proxy_set_header X-Request-ID           $req_id;
        proxy_set_header X-Real-IP              $remote_addr;

        proxy_set_header X-Forwarded-For        $remote_addr;

        proxy_set_header X-Forwarded-Host       $best_http_host;
        proxy_set_header X-Forwarded-Port       $pass_port;
        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

        proxy_set_header X-Scheme               $pass_access_scheme;

您的配置片段没有被加倍,实际上发生的是当您在集群中部署 NGINX 控制器时默认情况下已经设置了 proxy_set_header X-Forwarded-For $remote_addr;

要禁用此默认设置,您需要使用 custom template

通过这样做,您可以获得 nginx.conf 的 proxy_set_header X-Forwarded-For $remote_addr;,因此您可以使用您描述的注释根据需要进行设置。

已接受的答案对我无效。您只需要将下面的 annotation 添加到 ingress 对象;

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

用于测试;

❯ curl -I https://example.com/path/here

HTTP/1.1 200 OK
cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Sat, 13 Mar 2021 08:52:02 GMT
expires: 0
pragma: no-cache
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
X-Forwarded-For: 88.888.8.8
Connection: keep-alive

只有使用 Helm 的 who end up here, an alternative (perhaps cleaner) solution, if you're deploying ingress-nginx 控制器的人才能在 values.yml 中将 compute-full-forwarded-foruse-forwarded-headers 设置为 true。无需在 Ingress 中进行额外配置(如问题中的配置)。