nginx 使用azure aks获取客户端原始ip地址

w8ntj3qf  于 2023-05-28  发布在  Nginx
关注(0)|答案(2)|浏览(204)

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

mzillmmw

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_ipgeo模块创建IP白名单配置。或者,loadBalancerSourceRanges应该允许您通过更新关联的NSG将任何客户端IP范围列入白名单。

6rvt4ljy

6rvt4ljy2#

部署我的traefik入口作为我自己的 Helm 部署的一部分。
values.yaml

traefik:
  deployment:
    enabled: true
    kind: DaemonSet  # Deployment
    ingressClass:
      enabled: true
      isDefaultClass: true
  service:
    spec:
      externalTrafficPolicy: Local  # Preserve IP from LB to AKS
  logs:
    general:
      format: json
      level: INFO 
    access:
      enabled: true
      format: json
      fields:
        general:
          defaultmode: keep
        headers:
          defaultmode: keep

kubectl logs daemonsets/-traefik -f

相关问题