【发布时间】:2021-07-14 14:15:37
【问题描述】:
我在 Kubernetes 集群中使用 Nginx 入口控制器。我在集群中有一个应用程序,可以通过 Internet 获得。现在我使用 Ingress Controller 访问应用程序,目的是显示一些自定义错误。
如果我访问应用程序(不是我自己编写的,因此我无法更改那里的内容),它会收到nginx-ingress-controller-pod 的 IP 地址。 nginx-ingress-controller-pod的日志显示远程地址不同。
我已经尝试过use-proxy-protocol 之类的东西,然后我就可以使用$remote_addr 并获得正确的IP。但正如我提到的,我无法更改我的应用程序,所以我必须“欺骗”入口控制器以使用 $remote_addr 作为他自己的。
如何配置入口,以便应用程序从远程 IP 而不是从nginx-ingress-controller-pod IP 获取请求?有没有办法做到这一点?
编辑:我正在使用带有 kubernetes v1.19.2 和 nginx 图表 ingress-nginx-3.29.0 的裸机 kubernetes 安装。
【问题讨论】:
-
你好@black_hawk,欢迎来到 StackOverflow。您是如何设置集群的?您使用的是裸机还是某些云提供商?你有 Kubernetes 和 nginx 哪个版本?请将您的错误添加到问题中。
-
嘿@MikołajGłodziak,我更新了这个问题,但我不能提供任何错误,因为没有。我只知道,我的应用程序拒绝入口控制器的 ip 并需要远程地址。例如:入口控制器的日志显示远程地址为
192.168.13.0,而我的应用程序获得了192.168.90.2的clientip,这是ingress-controller-pod 的ip。然后应用程序将此 ip 转发到另一个 pod/service,后者拒绝它,因为它不是192.168.13.0。我希望我能让这个问题可以理解。