在OVH托管Kubernetes集群中配置APISIX获取真实客户端IP
OVH Kubernetes集群中APISIX转发真实客户端IP的配置方案
要在OVH托管的K8s集群里让APISIX转发真实客户端IP,仅启用real-ip插件是不够的,需要配合OVH负载均衡特性、APISIX配置以及K8s Service设置,具体步骤如下:
1. 确认OVH负载均衡的IP传递特性
OVH的K8s托管负载均衡会将真实客户端IP注入到X-Forwarded-For请求头中,但APISIX需要明确信任OVH LB的IP段,才会解析该头部的真实IP。你需要先获取OVH集群负载均衡的子网(可通过OVH控制台或API查询)。
2. 配置APISIX的real-ip插件
real-ip插件是核心,但必须正确配置可信地址和IP来源:
- 路由级配置:在Ingress或APISIX Route注解中添加插件配置,示例:
替换annotations: k8s.apisix.apache.org/plugin-real-ip: '{"source": "X-Forwarded-For", "trusted_addresses": ["OVH_LB_SUBNET/24"]}'OVH_LB_SUBNET为实际的OVH负载均衡子网。 - 全局配置:如果需要所有路由都生效,可通过Helm的
values.yaml设置全局插件参数:apisix: config: plugin_attr: real-ip: source: "X-Forwarded-For" trusted_addresses: ["192.168.0.0/24"] # 替换为OVH LB子网
3. 配置APISIX Service的流量策略
为避免K8s的SNAT机制覆盖客户端IP,需将APISIX暴露给OVH LB的Service设置externalTrafficPolicy: Local,确保流量直接路由到节点上的APISIX Pod,不经过K8s节点转发。在Helm values.yaml中配置:
apisix: service: type: LoadBalancer externalTrafficPolicy: Local
4. 确保上游服务接收真实IP
如果需要将真实IP传递给后端上游服务,可配合proxy-rewrite插件,在路由注解中添加:
annotations: k8s.apisix.apache.org/plugin-proxy-rewrite: '{"headers": {"X-Real-IP": "$remote_addr"}}'
这样APISIX会将解析后的真实IP注入到X-Real-IP头,传递给上游服务。
验证配置
部署一个测试上游服务(如httpbin的/ip端点),通过APISIX路由访问该服务,检查返回的IP是否为你的真实客户端IP,而非OVH负载均衡的IP。
内容的提问来源于stack exchange,提问作者Antoine Dussarps
相关产品推荐
相关产品推荐

