我目前正在将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群集的“正确”方法是什么?
答案 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直通将不起作用。
您可以使用real_ip
和geo
模块来创建IP白名单配置。另外,loadBalancerSourceRanges应该让您通过更新关联的NSG将所有客户端IP范围列入白名单。