我在Google Container Engine上运行Ruby on Rails应用程序(在Nginx模式下使用Passenger)。这些pod位于GCE网络负载平衡器后面。我的问题是如何从Rails应用程序内部访问外部Client IP
。
Github问题here似乎提供了一个解决方案,但我运行了建议:
for node in $(kubectl get nodes -o name | cut -f2 -d/); do
kubectl annotate node $node \
net.beta.kubernetes.io/proxy-mode=iptables;
gcloud compute ssh --zone=us-central1-b $node \
--command="sudo /etc/init.d/kube-proxy restart";
done
但我仍然获得了REMOTE_ADDR
的{{1}}标题。
关于如何访问真实10.140.0.1
(用于地理定位)的想法?
编辑:为了更清楚,我知道从Rails内部访问客户端IP的方法,但是所有这些解决方案都让我获得了内部Kubernetes IP,我相信GCE网络负载均衡器没有配置(或者或许无法发送真实的客户端IP。
答案 0 :(得分:2)
Google员工对another version问题的回答验证了我目前无法使用Google容器引擎网络负载均衡器进行的操作。
编辑(2017年5月31日):从Kubernetes v1.5及更高版本开始,这可以在GKE上使用beta注释service.beta.kubernetes.io/external-traffic
。在SO here上回答了这个问题。请注意,当我添加注释时,在现有节点上创建的运行状况检查 。重新创建LB并重新启动节点解决了这个问题。
答案 1 :(得分:0)
似乎这根本不是铁路问题,而是GCE之一。您可以尝试
的第一部分request.env["HTTP_X_FORWARDED_FOR"]
Getting Orgin IP From Load Balancer建议https://cloud.google.com/compute/docs/load-balancing/http/有文字
代理设置HTTP请求/响应头,如下所示:
Via: 1.1 google
(请求和回复)X-Forwarded-Proto: [http | https]
(仅限请求)X-Forwarded-For: <client IP(s)>, <global forwarding rule external IP>
(仅限请求) 可以是以逗号分隔的IP地址列表,具体取决于客户端所在的中介附加的X-Forwarded-For条目 穿越。该部分的第一个元素 显示原始地址。X-Cloud-Trace-Context: <trace-id>/<span-id>;<trace-options>
(仅限请求) Stackdriver Trace的参数。