【问题标题】:How to access client IP of an HTTP request from Google Container Engine?如何从 Google Container Engine 访问 HTTP 请求的客户端 IP?
【发布时间】:2016-07-27 16:02:27
【问题描述】:

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

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

【问题讨论】:

    标签: google-cloud-platform kubernetes google-kubernetes-engine


    【解决方案1】:

    如果有人对此感到困惑,那么有更好的方法。 您可以根据您的 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

    【讨论】:

      【解决方案2】:

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

      您可以使用set up an Ingress object 将您的服务与Google Cloud HTTP(s) Load Balancer 集成,而不是使用服务的LoadBalancer 类型,这会将X-Forwarded-For 标头添加到传入请求中。

      【讨论】:

      • 您知道是否有针对此特定问题的新解决方案吗?
      猜你喜欢
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2015-03-05
      • 2012-08-15
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多