【发布时间】:2020-09-22 13:26:38
【问题描述】:
我有一个在本地裸机 Kubernetes 集群中运行的 ASP.NET Core webapi。没有外部负载均衡器,我使用的是 NGINX 入口。
我想获取用户的 IP 地址,并在 .NET 代码中使用 HttpContext.Connection.RemoteIpAddress。
不幸的是,这是获取 nginx 入口的 IP 地址(可能是给定命名空间的控制器)...
::ffff:10.244.1.85
执行反向 DNS 查找可将其解析为...
10-244-1-85.ingress-nginx.ingress-nginx.svc.cluster.local
经过一番谷歌搜索后,我尝试将externalTrafficPolicy: "Local" 添加到我的服务定义中,但这并没有什么不同。
这看起来应该是非常微不足道且相当普遍的要求。有什么想法吗?
【问题讨论】:
-
这个问题是否提供了有用的答案? stackoverflow.com/questions/39774846/…
-
不幸的是,这并没有什么不同。
-
可以发一下ingress的配置吗?
-
您是否检查过 Web 应用程序中的 HTTP 标头?典型的解决方案是在 Nginx 中设置 X-Forwarded-For 并在应用程序中使用它。如果缺少标头,则使用远程地址,如果存在,则使用标头中的值。
-
@ewramner 我没有检查标题。刚试了一下,header就在那里,但是设置为集群内部的“10.244.1.0”,而不是我机器的IP地址。
标签: nginx kubernetes nginx-ingress