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

时间:2020-08-23 13:35:24

标签: nginx azure-aks azure-load-balancer

我目前正在将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群集的“正确”方法是什么?

1 个答案:

答案 0 :(得分:2)

从文档中: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范围列入白名单。