2017-02-20 1 views
0

PHPアプリケーションで訪問者の実際のIPを取得する際に問題が発生しています。私はKubernetesをGoogle Container Engine(マスター:1.4.8、ノード:1.4.7)で実行しています。Kubernetesの背後にあるPHPアプリケーションの実際のIPをGCEで取得する

サービスの定義:

apiVersion: v1 
kind: Service 
metadata: 
    name: app-service 
spec: 
    type: LoadBalancer # spawning google loadbalancer 
    selector: 
     name: app # running simple php/nginx container 
    ports: 
     - port: 80 
      targetPort: 80 

どのようにそれは私のPHPアプリに渡されませんX-Forwarded-Forヘッダなどということができますか?私はちょうど10.0.1.1であるソースIP(php REMOTE_ADDR)を取得しています。 Google Cloudでは、サービスがのレイヤ4ロードバランサを使用していることがわかります。これは、実際の送信元IPが失われ、X-Forwarded-Forヘッダーが決して設定されないという問題である可能性がありますか?

誰かが私に何が起こっているのか説明することができれば、それは非常に役立つでしょう!私はCloudFlareの背後に私の全体のアプリケーションを入れているので、それは今CloudFlareのHTTPプロキシから指している

location ~ \.php$ { 
    fastcgi_pass php-upstream; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
    fastcgi_param DOCUMENT_ROOT $realpath_root; 
} 

EDIT :何その価値は、私は私のアプリのコンテナに次のnginxの設定を使用していますについては

- > GCEロード・バランサ。そして、どういうわけかX-Forwarded-Forヘッダーとすべてが存在します!私にとってはGCE Load Balancerの問題だと思われますが、どうやらそれらのヘッダーを設定できません。

答えて

1

新機能がadded to Kubernetes 1.5た:

により、この機能の実装に、ターゲットコンテナに見られるように、セッションの送信元IPは、クライアントの元のソースIPではありません。これはKubernetes v1.5のデフォルト動作です。しかし、v1.5以降、オプションのベータ機能が追加され、GCE/GKE環境用のクライアントソースIPが保持されます。この機能は、後続のリリースでは他のクラウドプロバイダ向けに段階的に導入されます。

詳細はavailable hereであり、タイプloadbalancerのサービスのための注釈を追加することに煮詰める:

$ kubectl annotate service loadbalancer service.beta.kubernetes.io/external-traffic=OnlyLocal 

これは、サービス・エンドポイントがノードで利用可能であるかどうかを確認するために、ノード上のヘルス・チェック・ポートを開きます。 。

この問題を他のクラスタに展開する方法の詳細については、kubernetes/featuresでこの機能を追跡できるようになっているようです。

注:質問は、あなたの答えのためにStackOverflow/Kubernetes-not-preserving-source-ip

+0

おかげに似ているようです。実際のソースIPには本当に関心がありませんが。正しい 'X-Forwarded-For'ヘッダー(ソース/ユーザーのIPを使用)を設定するには、ロード・バランサ/リバース・プロキシーが必要です。トピックで私の編集を参照してください、私は奇妙な何かを発見した。 –

関連する問題