如何访问来自 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/
我是 运行 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/