问题现象
Ingress Pod中无法保留真实客户端IP,显示为节点IP或100.XX.XX.XX网段或其它地址。
问题原因
Ingress所使用的Service中externalTrafficPolicy设为了Cluster。 SLB上使用了七层代理。 使用了WAF接入或WAF透明接入服务。 解决方案
对于设置externalTrafficPolicy为Cluster,且前端使用了四层SLB的情况。 可以将externalTrafficPolicy改为Local。但可能会导致集群内部使用SLB IP访问Ingress不通,具体解决方案,请参见集群内访问集群LoadBalancer暴露的SLB地址不通。
对于使用了七层代理(七层SLB、WAF、透明WAF)的情况,可以按以下步骤解决: 确保使用的七层代理且开启了X-Forwarded-For请求头。 在Ingress Controller的ConfigMap中(默认为kube-system命名空间下的nginx-configuration)添加enable-real-ip: "true"。 观察日志,验证是否可以获取到源IP。 对于链路较长,存在多次转发的情况(例如在Ingress Controller前额外配置了反向代理服务),可以在开启enable-real-ip时通过观察日志中remote_addr的值,来确定真实IP是否是以X-Forwarded-For请求头传递到Ingress容器中。若不是,请在请求到达Ingress Controller之前利用X-Forwarded-For等方式携带客户端真实IP。 灰度规则不生效
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。