2016-06-28 8 views
0

ich vor kurzem begann mit kubernetes auf gcloud, es war ziemlich glatt so weit, aber ich kann nicht scheinen clients/user externe ip-adresse auf meiner app Mit Wildfly (JSF) würden alle Ideen geschätzt werden! ich meine pod mit dem folgenden Befehl aussetzen:Wie bekomme ich die Clients externe IP, ich benutze Gcloud/kubernetes

kubectl expose rc modcluster-replication-controller --name=modcluster --type="LoadBalancer"

  • 1 pod Wildfly Standalone-Modus
  • 1 pod laufen mod-Cluster
  • 1 pod läuft Postgres
  • 1 rc läuft mod läuft -cluster-replication controler
  • 1 aussetzen rc mod-cluster-replikation controler port 80
  • 1 gcloud Loadbalancer

Im Kubernetes, gcloud, modcluster Verwendung Wildfly basiert weg Ticket-monster Kubernetes

Antwort

4

Mein Vorschlag (wenn Ihre Anwendung HTTP/HTTPS an den Ports 80/443) ist zu nehmen Vorteil des Ingress-Controllers, der die -Dienste im Grunde als HTTP/HTTPs-Lastenausgleich ausgibt, der das X-Forwarded-For in die Pakete injiziert.

Dadurch wird die IP-Adresse der Quelle/des Clients angezeigt. Bitte beachten Sie die tutorial Details zu dem X-Forwarded-For-Feld zur Verfügung here

Beispielanruf, die ich gerade mit diesem Tutorial getestet: LB IP: 130.211.10.191

Tcpdump im Innern des Behälters:

$ tcpdump -n -l -w - | strings

Output: 
Host: 130.211.10.191 
Cache-Control: max-age=0 
Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (X11; CrOS x86_64 7978.74.0) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/50.0.2661.103 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 
If-None-Match: "574da256-264" 
If-Modified-Since: Tue, 31 May 2016 14:40:22 GMT 
X-Cloud-Trace-Context: 
6b36a7d93d60dc6921417796255466d5/14093000126457324029 
Via: 1.1 google 
X-Forwarded-For: 81.47.XXX.XXX, 130.211.10.191 # the IP starting with 
81. is my local IP 
X-Forwarded-Proto: http 
Connection: Keep-Alive 
JxHTTP/1.1 304 Not Modified 
+0

Gow i ganzen Ort gewesen war, google, Stackoverflow, gcloud docs, machte einige Änderungen Apache passen und es funktionierte dank Ihnen sehr, lesen Sie über ** Eintritt * * Aber war nicht sicher, wie es funktionierte, schnelle Frage, warum ist die IP in diesem Bereich von 130 erstellt ...? – PaulMB

+0

@PaulMB - kein besonderer Grund. In meinem Fall war es die IP-Adresse, die automatisch meinem Google HTTP/S LB zugewiesen wurde. Ich bin glücklich, dass meine Lösung für Sie funktioniert hat. Bitte markieren Sie die Antwort als "akzeptiert". Viel Glück mit Kubernetes - es ist ein tolles Produkt! –

0

K8S Version 1.7 (nur in 1.7.2 getestet) macht eine Brise dieses. Verwenden Sie einfach spec: externalTrafficPolicy: Local in Ihrem LoadBalancer-Dienst. Es wird Port 80 und 443 ohne irgendein Problem bedienen. Zum Beispiel:

apiVersion: v1 
kind: Service 
metadata: 
    name: myservice 
spec: 
    ports: 
    - port: 80 
    protocol: TCP 
    targetPort: 80 
    name: http 
    - port: 443 
    protocol: TCP 
    targetPort: 443 
    name: https 
    selector: 
    app: myapp 
    role: myrole 
    type: LoadBalancer 
    loadBalancerIP: 104.196.208.195 
    externalTrafficPolicy: Local 
0
kubectl describe svc servicename | grep 'LoadBalancer Ingress' 
+0

Bitte erläutern Sie den Code – user7294900