2015-12-11 5 views
5

Ich verwende ein Cluster-Setup mit mehreren Apisovers mit einem Loadbalancer vor ihnen für den externen Zugriff, mit einer Installation auf Bare-Metal.So konfigurieren Sie den kube-proxy master_url mit mehreren Apisierern

Wie erwähnt in der High Availability Kubernetes Clusters Dokumente, würde ich gerne interne Loadbalancing mit dem kubernetes Service in meinem Cluster verwenden. Das funktioniert soweit gut, aber ich bin mir nicht sicher, was ist der beste Weg, um die kube-proxy einzurichten. Es kann offensichtlich die Dienst-IP nicht verwenden, da es die Proxie zu dieser basierend auf den Daten von dem Apiserver (master) durchführt. Ich könnte die IP eines jeden der Apiserver verwenden, aber das würde die Hochverfügbarkeit verlieren. Die einzige praktikable Option, die ich derzeit sehe, ist die Verwendung meines externen Loadbalancers, aber das scheint irgendwie falsch zu sein.

Irgendwelche Ideen oder Best Practices?

Antwort

1

Das ist eine ziemlich alte Frage, aber da das Problem bestehen bleibt ... hier geht es.

Es gibt einen Fehler im Kubernetes-Restclient, der es nicht erlaubt, mehr als eine IP/URL zu verwenden, da er immer die erste IP/URL in der Liste aufnimmt. Dies wirkt sich auf Kube-Proxy und auch auf Kubelet aus und lässt einen einzelnen Fehlerpunkt in diesen Tools zurück, wenn Sie (wie Sie es taten) in einem Multi-Master-Setup keinen Load Balancer verwenden. Die Lösung ist wahrscheinlich nicht die eleganteste Lösung aller Zeiten, aber derzeit (denke ich) ist die leichtere Lösung.

Andere Lösung (die ich bevorzuge, aber möglicherweise nicht für alle arbeiten und es löst nicht alle Probleme) ist, einen DNS-Eintrag, der Roundrobin Ihre API-Server erstellen, aber wie in einem der folgenden Links hingewiesen , das löst nur den Lastenausgleich und nicht den HA.

Sie können den Fortschritt dieser Geschichte in den folgenden Links:

Die kube-Proxy/kubelet Ausgabe: https://github.com/kubernetes/kubernetes/issues/18174
Die restclient PR: https://github.com/kubernetes/kubernetes/pull/30588
Die "offizielle" Lösung: https://github.com/kubernetes/kubernetes/issues/18174#issuecomment-199381822

0

Ich denke, so, wie es gemeint ist, eingerichtet werden soll, ist, dass Sie einen kube-Proxy auf jedem Master-Knoten haben, so dass jeder kube-Proxy zeigt auf seinen Master auf 127.0.0.1/localhost

Die PodMaster bestimmt welcher api-server sollte laufen, der seinerseits den lokalen proxy dieses masters benutzt

+0

Bezüglich der erste Punkt: Ja, ich denke schon. Ich betreibe bereits einen Kube-Proxy auf jedem Master, der auf den lokalen Master verweist. Mein Problem ist nicht mit dem Kube-Proxy auf Master-Knoten, sondern auf Worker-Knoten. Diese haben keinen lokalen Master, mit dem sie sich verbinden können. Der zweite Punkt ist, afaik, falsch. Der Podmaster wird gemäß den Dokumenten nur verwendet, um zu entscheiden, wo der Scheduler und der Controller-Manager instanziiert werden, während der Apisover auf allen Master-Instanzen läuft. –