[英]How can I get the real IP of a client when using an ELB in front of my Nginx Ingress?
我有以下设置:
Client -> AWS ELB -> Nginx Ingress -> Pod
在 ELB 日志中,我可以看到这些客户端的真实 IP。 ELB 将其作为X-Forwarded-For
header 值发送到我的 Ingress controller。
我需要在应用程序的 Ingress 中设置白名单源范围,但问题是它使用远程 IP 地址,而不是X-Forwarded-For
header 中的地址。
我可以在这里看到一些解决方案:
X-Forwarded-For
header 制作 Nginx controller 源范围白名单第一个对我来说并不理想。 我不想维护和支付另一个负载均衡器。 不知道第二个是否可行。 我认为第三个是可行的,但我不知道该怎么做。 我知道有一些相关的东西,那就是代理协议,但我看不到它是如何工作的,我不想在我的生产环境中添加我不理解的东西。
负载均衡器适用于我的 Kubernetes 环境中的多个应用程序,因此将这些 IP 添加到安全组中的白名单并不理想。
我该如何解决这个问题?
我的最后一个资源是使用 Cloudflare。 我想将尽可能多的配置保留在 Kubernetes 中,但如果不可能的话,我会为它保留 go。
编辑: 这并不能解决我的问题,我将 CIDR 列入白名单,而不是特定的 IP。
因此,如果您在 AWS 上,为什么要使用 Nginx Ingress controller?
您可以使用AWS 负载均衡器 Controller ,它将自动预置和/或管理 AWS ALB。
对于您的特定用例,您可以为 ALB 中的特定目标添加 WAF WebACL。 您可以手动执行此操作,或对 AWS 负载均衡器 Controller 使用alb.ingress.kubernetes.io/wafv2-acl-arn注释。
或者,您可以在单独的子网中运行单独的 ALB,并通过该 ALB 的安全组设置 IP 白名单。 然后确保单独的 ALB 仅用于那些需要它的入口。
同样,当使用 AWS 负载均衡器 Controller 而不是 Nginx 入口 Controller 时,这可以自动完成,无需额外维护。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.