在AKS部署的REST API中保留客户端IP:AKS层面需做哪些设置?
问题解答
是的,必须在AKS层面做针对性配置——默认情况下AKS负载均衡器会启用SNAT(源网络地址转换),导致你的REST API收到的请求头里的客户端IP被替换成集群节点的IP,而非真实客户端地址。
具体配置方案
1. 直接用LoadBalancer类型Service暴露API
如果你的API是通过LoadBalancer Service直接对外暴露,需要在Service的YAML配置中添加externalTrafficPolicy: Local字段。这个配置会让负载均衡器跳过SNAT,直接将请求转发到后端Pod所在的节点,Pod就能拿到真实的客户端IP:
apiVersion: v1 kind: Service metadata: name: your-api-service spec: type: LoadBalancer externalTrafficPolicy: Local # 关键配置 selector: app: your-api ports: - protocol: TCP port: 80 targetPort: 8080 # 替换为你的API监听端口
2. 通过Ingress Controller暴露API(以NGINX Ingress为例)
如果用Ingress来管理API的访问,需要两步配置:
- 首先修改Ingress Controller对应的Service,开启
externalTrafficPolicy: Local:
apiVersion: v1 kind: Service metadata: name: nginx-ingress-controller spec: type: LoadBalancer externalTrafficPolicy: Local # 关键配置 # 其他原有配置(如selector、ports等)保持不变
- 然后在你的API对应的Ingress资源中添加注解,开启真实IP传递:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-api-ingress annotations: nginx.ingress.kubernetes.io/use-forwarded-headers: "true" nginx.ingress.kubernetes.io/remote-header: "X-Forwarded-For" # 指定存储真实IP的请求头 spec: # 其他原有配置(如rules、tls等)保持不变
配置完成后,你的API可以从X-Forwarded-For请求头中获取到真实的客户端IP。
验证配置生效
部署完上述配置后,查看你的API日志,确认请求头中的客户端IP字段(或X-Forwarded-For)是否已经显示真实的客户端地址,而非AKS集群的IP。
内容的提问来源于stack exchange,提问作者Suresh Ganesan
相关产品推荐
相关产品推荐

