本來以為獲取請求者的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