kuberentes 上的 nginx 入口看到节点 ip 地址而不是 public 互联网资源请求者

nginx ingress on kuberentes sees node ip address instead of the public internet resource requestor

我有一个 kubernetes 集群和一个 nginx ingress。我已经部署了一个入口以将流量从域 example.org 路由到特定容器。现在,我试图阻止所有不是来自列入白名单的 ip 范围的请求。因此,我用 nginx.ingress.kubernetes.io/whitelist-source-range 注释了创建的入口。但是,所有流量都被阻止,所以我查看了 nginx 的日志,我意识到实际上 nginx 看到的是内部节点 ip 地址,而不是请求者 public 互联网地址。

2022/05/06 11:39:26 [error] 10719#10719: *44013470 access forbidden by rule, client: 172.5.5.84, server: example.org, request: "GET /.svn/wc.db HTTP/1.1", host: "example.org"

我不确定究竟出了什么问题。当我删除白名单注释时,一切都按预期工作。

好的,所以本文档解决了问题 https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip

我不得不将 externalTrafficPolicy: Cluster 更改为 externalTrafficPolicy: Local