本来以为获取请求者的ip,直接从请求头获取“X-Forwarded-For”字段就可以了,没想到,获取的是一个K8S的容器地址。
原因:
负载均衡默认的externalTrafficPolicy配置为Cluster。此路由模式会隐藏真实客户IP,但是能实现Pod级别的负载均衡。
解决办法:
路由策略externalTrafficPolicy设置为Local;
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer
解决办法的缺点:
无法实现Pod级别的负载均衡,只能在Node级别实现负载均衡。
参考:
从service的externalTrafficPolicy到podAntiAffinity
preserving-the-client-source-ip