如何从Google Container Engine访问HTTP请求的客户端IP?

Vik*_*Vik 3 google-cloud-platform kubernetes google-kubernetes-engine

我正在使用Google Container Engine在docker容器中运行gunicorn + flask服务.我按照http://kubernetes.io/docs/hellonode/上的教程设置了集群

REMOTE_ADDR环境变量总是包含Kubernetes集群中的一个内部地址.我正在寻找的是HTTP_X_FORWARDED_FOR但是请求标题中缺少它.是否可以将服务配置为在请求中保留外部客户端ip?

Arn*_*ret 9

如果有人坚持这一点,那就有更好的方法.您可以根据您的kubernetes版本使用以下注释:

service.spec.externalTrafficPolicy: Local 
Run Code Online (Sandbox Code Playgroud)

在1.7

要么

service.beta.kubernetes.io/external-traffic: OnlyLocal
Run Code Online (Sandbox Code Playgroud)

在1.5-1.6

在此之前不支持

来源:https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

请注意有一些警告:https: //kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#caveats-and-limitations-when-preserving-source-ips


Ale*_*son 3

我假设您通过将服务类型设置为LoadBalancer? 不幸的是,由于客户端 IP 丢失,传入网络负载平衡数据包通过 Kubernetes 路由的方式受到了限制。

LoadBalancer您可以设置一个Ingress对象来将您的服务与Google Cloud HTTP(s) 负载均衡器集成,而不是使用服务的类型,这会将 X-Forwarded-For 标头添加到传入请求中。

  • 您知道针对这个特定问题是否有任何新的解决方案? (3认同)