3

Ich führe einen Gunicorn + Flaschendienst in einem Dockercontainer mit Google Container Engine. Ich richte den Cluster nach dem Tutorial unter http://kubernetes.io/docs/hellonode/Wie kann ich auf die Client-IP einer HTTP-Anfrage von Google Container Engine zugreifen?

Die Umgebungsvariable REMOTE_ADDR enthält immer eine interne Adresse im Kubernetes-Cluster. Was ich suchte, ist HTTP_X_FORWARDED_FOR, aber es fehlt in den Anfrage-Kopfzeilen. Ist es möglich, den Dienst so zu konfigurieren, dass die IP des externen Clients in den Anforderungen beibehalten wird?

Antwort

2

Ich nehme an, dass Sie Ihren Dienst einrichten, indem Sie den Servicetyp auf LoadBalancer setzen? Es ist eine bedauerliche Einschränkung der Art und Weise, wie eingehende Netzwerk-Last-ausgeglichene Pakete jetzt durch Kubernetes geleitet werden, dass die Client-IP verloren geht.

Statt der LoadBalancer Typ des Dienstes, der mit Ihnen könnte set up an Ingress object Ihren Service mit einem Google Cloud HTTP(s) Load Balancer zu integrieren, die die X-Forwarded-For-Header, um eingehende Anfragen werden hinzuzufügen.

+3

Sie wissen Sie, ob es irgendwelche neuen Lösungen für dieses spezielle Problem sind? – miah

3

Wenn jemand hier festsitzt, gibt es einen besseren Ansatz. Sie können die folgenden Anmerkungen verwenden je nach Kubernetes Version:

service.spec.externalTrafficPolicy: Local 

auf 1,7

oder

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

auf 1,5-1,6

bevor diese nicht

unterstützt wird

Quelle: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

beachten Sie, dass es Einschränkungen sind: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#caveats-and-limitations-when-preserving-source-ips

+1

Dies sollte die akzeptierte Antwort werden. –