我尝试在代理协议的谷歌容器上设置nginx入口(nodeport),以便真正的IP可以被转发到后端服务,但结束了与头破碎。
2017/02/05 13:48:52 [error] 18#18: *2 broken header: " ~ ]H k m[| I iv. {y Z 嵦v Ȭq 2Iu4P z; o$ s " + / , 0̨̩ /" while reading PROXY protocol, client: 10.50.0.1, server: 0.0.0.0:443
如果没有代理协议,事情运作良好。 根据https://blog.mythic-beasts.com/2016/05/09/proxy-protocol-nginx-broken-header/这是由于协议v2使用(二进制),但nginx只能说v1 。 任何build议?
GKE:使用kubernetes v1.6 + source ip默认保存,可以在x-real-ip
下的头文件中找到,而不需要设置任何额外的nginx配置。
AWS:通过将其添加到注释中,可以保留源IP
apiVersion: v1 kind: Service metadata: name: nginx-ingress namespace: nginx-ingress annotations: service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*' labels: app: nginx-ingress
签出此链接https://github.com/kubernetes/ingress/tree/master/examples/aws/nginx
刚刚遇到这个问题,我自己。 对我来说,我并不是一个负载均衡器(除了我的nginx入口),所以我实际上并不需要proxy-protocol
集。
但是,我得到127.0.0.1
作为客户端IP仍然。 诀窍是在我使用的nginx入口版本中存在一个错误(0.9.0-beta.5)。 更新我的容器图像到gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.8
修复了这个问题,我收到了正确的X-Forwarded-For
头。
请注意,更高的版本(在撰写本文时为beta.11)还有问题,所以我暂时停留在beta.8上。
如果您想查看可用的配置选项,请查看https://github.com/kubernetes/ingress/tree/master/controllers/nginx 。