0

Ich bin eine Kubernetes Anwendung auf GKE ausgeführt wird, der auf dem Port HTTP-Anforderungen dient 80 und websocket auf Port 8080GCE: Beide TCP und HTTP Loadbalancer auf einer IP-

Nun muss HTTP Teil Client-IP wissen Adresse, also muss ich HTTP Load Balancer als Ingress-Service verwenden. Der Websocket-Teil muss dann den TCP-Lastenausgleich verwenden, da in den Dokumenten eindeutig angegeben ist, dass HTTP LB dies nicht unterstützt.

Ich habe sie beide arbeiten, aber auf verschiedenen IPs, und ich muss sie auf einem haben.

Ich würde erwarten, dass es so etwas wie iptables auf GCE gibt, also könnte ich Verkehr von Port 80 zu HTTP LB und von 8080 zu TCP LB weiterleiten, aber ich kann nichts dergleichen finden. Alles einschließlich der Weiterleitung erlaubt nur eins ihnen.

Ich glaube, ich eine Instanz mit nginx/HAProxy tut nur dies haben könnte, aber das scheint wie ein Overkill

jede Hilfe dankbar!

Antwort

1

Es gibt keine große Antwort auf dieses jetzt. Ingress-Objekte sind eigentlich nur im Moment HTTP, und wir unterstützen nicht wirklich mehrere Grade von Ingress in einem einzelnen Cluster (obwohl wir das wollen).

GCE's HTTP LB macht noch keine Websockets.

Dienstleistungen haben einen Fehler, dass sie die Client-IP verlieren (wir arbeiten daran). Selbst wenn wir das Problem lösen, können Sie GCEs L7-Balancer aufgrund des benötigten zusätzlichen Ports nicht verwenden.

Die beste Abhilfe, die ich mir vorstellen kann, und wurde von einer Anzahl von Benutzern verwendet, bis wir Quell-IP erhalten, ist dies:

Führen Sie Ihren eigenen haproxy oder nginx oder sogar Ihre eigene App als Daemonset auf einige oder alle Knoten (Label-gesteuert) mit HostPorts.

Führen Sie ein GCE Network LB (außerhalb von Kubernetes) aus, das auf die Knoten mit HostPorts zeigt.

Sobald wir die externen IPs ordnungsgemäß schützen können, können Sie diese wieder in einen einfachen Dienst umwandeln.

+0

Ich habe Daemonsets übersehen. Sieht aus wie ich brauche, danke – lobanovadik