2016-04-20 12 views
1

Ich habe pod und seine Aufgabe ist es, die eingehenden Daten zu nehmen und auf das Host-Volume zu schreiben. Ich betreibe diese Kapsel in allen Minions.Kubernetes - wie man eine Anfrage an alle Schergen sendet?

Wenn ich nun den NodePort-Dienst für diese Pods einrichte, wird der Verkehr zu einem Pod auf einmal gehen.

Aber wie schicke ich Anfrage an alle diese Pods in verschiedenen Schergen? Wie kann ich hier den Lastausgleich umgehen? Ich möchte, dass diese Daten in allen Minions-Host-Volumes verfügbar sind.

Antwort

0

Sie müssen hostPort for the container definieren und jeden Pod auf jedem Knoten einzeln über die Host-IP adressieren.

Siehe Einschränkungen in der Best-Practice-Anleitung .

0

Ein Dienst verwendet einen Selektor, um die Liste der Pods zu identifizieren, für die ein Proxy verwendet werden soll (sofern sie sich im Bereit-Status befinden). Sie könnten einfach mit einer GET-Anforderung für die gleiche Liste der Hülsen fragen:

$ curl -G "$MASTER/api/v1/namespaces/$NAMESPACE/pods?labelSelector=$KEY=$VALUE" 

Und dann Ihre Anfrage manuell ip:port Endpunkte jedes der Schote senden. Wenn Sie in der Lage sein müssen, die Anforderung von außerhalb des Clusternetzwerks zu senden, können Sie einen Proxy-Pod erstellen (der über die Standardmethode dem externen Netzwerk ausgesetzt ist). Der Proxy-Pod könnte nach Pods mit Ihrem Label suchen (ähnlich wie oben) und alle empfangenen Anfragen an die Liste der fertigen Pods weiterleiten.

Ein ähnlicher Effekt könnte mit hostPort und Weiterleitung an Knoten erreicht werden, aber die Verwendung von hostPort wird abgeraten (siehe best practices).

0

Hier ist eine Methode, die so lange funktioniert, wie Sie die Anfragen von einem Container innerhalb des k8s-Netzwerks senden können (dies entspricht vielleicht nicht genau dem Wunsch des OPs, aber ich schätze, das kann für jemanden funktionieren, der das googelt).

Sie müssen die Pods irgendwie nachschlagen. Hier Ich finde alle Schoten im staging Namensraum mit der Bezeichnung app=hot-app:

kubectl get pods -l app=hot-app -n staging -o json | jq -r '.items[].status.podIP' 

dieses Beispiel verwendet das ehrfürchtige jq Werkzeug, um die resultierende json und ergreifen Sie die Schote ips zu analysieren, aber Sie können die json auf andere Weise analysieren einschließlich mit kubectl selbst.

gibt diese etwas wie folgt aus:

10.245.4.253 
10.245.21.143 

Sie den internen Port wie diese finden kann (zB nur einen Behälter hat, so eine eindeutige Port):

kubectl get pods -l app=hot-app -n staging -o json | jq -r '.items[].spec.containers[].ports[].containerPort' | sort | uniq 
8080 

dann bekommen Sie in einem Container in Ihrem K8S-Cluster mit Curl, kombinieren Sie die ips und Port von den vorherigen Befehlen, und schlagen Sie die Pods wie folgt:

curl 10.245.4.253:8080/hot-path 
curl 10.245.21.143:8080/hot-path 
Verwandte Themen