我目前正在将AWS EKS群集复制到Azure AKS。在我们的EKS中,我们使用外部Nginx和代理协议来识别客户端的真实的IP,并检查它是否在我们的Nginx中被列入白名单。
在AWS中,我们添加了Kubernetes服务注解aws-load-balancer-proxy-protocol
来支持Nginx proxy_protocol
指令。
现在这一天已经到来,我们希望在Azure AKS上运行我们的集群,我正在尝试执行相同的机制。
我看到AKS Load Balancer对IP进行了哈希处理,所以我从Nginx conf中删除了proxy_protocol
指令,我尝试了几种方法,我知道Azure Load Balancer不用作代理,但我确实在这里读到:AKS Load Balancer Standard
我尝试在Kubernetes服务级别使用loadBalancerSourceRanges
API将IP列入白名单,而不是在Nginx级别。
但我认为负载均衡器将IP发送到已经散列的集群(这是正确的术语吗?)和集群似乎忽略了loadBalancerSourceRanges
下的ips,并通过它们。
我现在被困在试图理解我缺乏知识的地方,我试图从两端(负载均衡器和kubernetes服务)处理它,他们似乎都不配合我。
考虑到我的失败,将客户端真实的IP地址传递给我的AKS集群的“正确”方法是什么?
2条答案
按热度按时间mzillmmw1#
从文档:https://learn.microsoft.com/en-us/azure/aks/ingress-basic#create-an-ingress-controller
如果您希望为集群中的容器请求启用客户端源IP保留,请在Helm install命令中添加
--set controller.service.externalTrafficPolicy=Local
。客户端源IP存储在X-Forwarded-For
下的请求头中。当使用启用了客户端源IP保留的入口控制器时,SSL直通将不起作用。更多信息也在这里:https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
您可以使用
real_ip
和geo
模块创建IP白名单配置。或者,loadBalancerSourceRanges应该允许您通过更新关联的NSG将任何客户端IP范围列入白名单。6rvt4ljy2#
部署我的traefik入口作为我自己的 Helm 部署的一部分。
values.yaml
kubectl logs daemonsets/-traefik -f