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

How to access client IP of an HTTP request from Google Container Engine?

我是 运行 docker 容器中的 gunicorn+flask 服务,带有 Google 容器引擎。我按照 http://kubernetes.io/docs/hellonode/

上的教程设置集群

REMOTE_ADDR 环境变量始终包含 Kubernetes 集群中的内部地址。我要查找的是 HTTP_X_FORWARDED_FOR,但请求 headers 中缺少它。是否可以配置服务以在请求中保留外部客户端 ip?

我假设您通过将服务类型设置为 LoadBalancer 来设置您的服务?不幸的是,现在客户端 IP 丢失,传入 network-load-balanced 数据包通过 Kubernetes 路由的方式受到限制。

您可以 set up an Ingress object to integrate your service with a Google Cloud HTTP(s) Load Balancer 而不是使用服务的 LoadBalancer 类型,这会将 X-Forwarded-For header 添加到传入请求中。

如果有人被困在这个问题上,有更好的方法。 您可以根据您的 kubernetes 版本使用以下注释:

service.spec.externalTrafficPolicy: Local 

1.7

service.beta.kubernetes.io/external-traffic: OnlyLocal

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