使用Azure Aks获取客户端原始IP地址

问题描述

我目前正在将AWS EKS群集复制到Azure AKS。 在我们的EKS中,我们使用带有代理协议的外部Nginx来识别客户端真实IP,并检查它是否在我们的Nginx中列入白名单。
为此,我们在AWS中添加了Kubernetes服务注释aws-load-balancer-proxy-protocol支持Nginx proxy_protocol指令。

现在已经到了一天,我们希望在Azure AKS上也运行群集,而我正在尝试执行相同的机制。
我看到AKS负载平衡器对IP进行哈希处理,因此我从Nginx conf中删除proxy_protocol指令,尝试了几件事,我知道Azure负载平衡器没有用作代理,但我确实在这里阅读: AKS Load Balancer Standard
我尝试使用loadBalancerSourceRanges API而不是Nginx级别在Kubernetes服务级别将IP列入白名单。

但是我认为负载均衡器将IP发送到已经经过哈希处理的集群(这是正确的术语吗?),并且集群似乎忽略了loadBalancerSourceRanges下的ip并将它们传递给了IP。

我现在一直想了解我缺乏的知识,我试图从两端(负载均衡器和kubernetes服务)来处理它,而他们似乎都不愿意与我合作。
鉴于我的失败,将客户端真实IP地址传递到我的AKS群集的“正确”方法是什么?

解决方法

从文档中:https://docs.microsoft.com/en-us/azure/aks/ingress-basic#create-an-ingress-controller

如果您想为请求启用客户端源IP保留 到集群中的容器,将--set controller.service.externalTrafficPolicy=Local添加到Helm安装中 命令。客户端源IP存储在下面的请求标头中 X-Forwarded-For。与客户端源一起使用入口控制器时 启用IP保留,SSL直通将不起作用。

此处还有更多信息:https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip

您可以使用real_ipgeo模块来创建IP白名单配置。另外,loadBalancerSourceRanges应该让您通过更新关联的NSG将所有客户端IP范围列入白名单。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...