2016-09-29 5 views
4

Mein Ziel ist es, meine Web-Anwendung (auf dem Kubernetes 1.4-Cluster bereitgestellt) die IP des Clients anzeigen zu lassen, der ursprünglich die HTTP-Anfrage gestellt hat. Da ich vorhabe, die Anwendung auf einem Bare-Metal-Cluster auszuführen, sind GCE und die in 1.4 eingeführte Serviceanmerkung service.alpha.kubernetes.io/external-traffic: OnlyLocal für mich nicht anwendbar.Erhalt der Remote-Client-IP mit Ingress

Auf der Suche nach Alternativen, habe ich this question gefunden, die einen Ingress vorschlägt, um mein Ziel zu erreichen. Also habe ich den Ingress und the NginX Ingress Controller eingerichtet. Die Bereitstellung verlief reibungslos und ich konnte mich über die Ingress-Adresse und den Port 80 mit meiner Web-App verbinden. In den Protokollen sehe ich jedoch immer noch cluster-interne IP-Adressen (ab 172.16.0.0/16) - und das bedeutet, dass der externe Client IPs werden nicht ordnungsgemäß über den Ingress übergeben. Können Sie mir bitte sagen, was ich zusätzlich zu den oben genannten konfigurieren muss, damit es funktioniert?

Meine Ingress' config:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: myWebApp 
spec: 
    backend: 
    serviceName: myWebApp 
    servicePort: 8080 

Antwort

3

Als Schicht 4 Proxy kann Nginx nicht die ursprüngliche Quell-IP-Adresse in der aktuellen IP-Pakete behalten. Sie können dies umgehen mit der Proxy protocol (der Link verweist auf die HAProxy-Dokumentation, aber Nginx unterstützt auch).

Damit dies jedoch funktioniert, muss der Upstream-Server (dh der Service myWebApp in Ihrem Fall) dieses Protokoll ebenfalls unterstützen. Wenn Ihre Upstream-Anwendung auch Nginx verwendet, können Sie die Proxy-Protokoll-Unterstützung in Ihrer Serverkonfiguration aktivieren, wie in der Dokumentation in the official documentation dokumentiert.

Nach dem Nginx Ingress Controller's documentation, kann diese Funktion im Ingress-Controller aktiviert werden, um eine Kubernetes ConfigMap mit:

apiVersion: v1 
kind: ConfigMap 
metadata: 
    name: nginx-ingress-controller 
data: 
    use-proxy-protocol: "true" 

den Namen des ConfigMap Geben Sie in Ihrem Ingress-Controller manifest, durch Hinzufügen der --nginx-configmap=<insert-configmap-name> Flagge auf den Befehl -line Argumente.

Verwandte Themen