2015-12-11 18 views
5

Utilizzo una configurazione cluster con più apiserver con un loadbalancer di fronte ad essi per l'accesso esterno, con un'installazione su bare metal.Come configurare il master_url di kube con più apiserver

Come menzionato nei documenti High Availability Kubernetes Clusters, vorrei utilizzare il loadbalancing interno utilizzando il servizio kubernetes all'interno del mio cluster. Questo funziona bene finora, ma non sono sicuro di quale sia il modo migliore per configurare lo kube-proxy. Ovviamente non può utilizzare l'IP del servizio, poiché esegue il proxy a questo in base ai dati del server di apis (master). Potrei usare l'IP di uno qualsiasi degli apiserver, ma ciò causerebbe la perdita dell'alta disponibilità. Quindi, l'unica opzione valida che vedo attualmente è di utilizzare il mio loadbalancer esterno, ma questo sembra in qualche modo sbagliato.

Qualcuno ha idee o buone pratiche?

risposta

1

Questa è una domanda piuttosto vecchia, ma come il problema persiste ... eccola qui.

C'è un bug nel client di Kubernetes, che non consente di utilizzare più di un IP/URL, in quanto raccoglierà sempre il primo IP/URL nell'elenco. Ciò influisce sul kube-proxy e anche su kubelet, lasciando un singolo punto di errore in quegli strumenti se non si utilizza un bilanciamento del carico (come avete fatto) in una configurazione multi-master. La soluzione probabilmente non è la soluzione più elegante di sempre, ma attualmente (penso) è la più semplice.

Un'altra soluzione (che preferisco, ma potrebbe non funzionare per tutti e non risolve tutti i problemi) è creare una voce DNS che aggirerà i vostri server API, ma come indicato in uno dei collegamenti seguenti , che risolve solo il bilanciamento del carico, e non l'HA.

Potete vedere il progresso di questa storia nei seguenti link:

Il Kube-proxy/problema kubelet: https://github.com/kubernetes/kubernetes/issues/18174
Il PR restclient: https://github.com/kubernetes/kubernetes/pull/30588
La soluzione "ufficiale": https://github.com/kubernetes/kubernetes/issues/18174#issuecomment-199381822

0

Penso che il modo in cui è destinato a essere istituito è che si dispone di un Kube-proxy su ciascun nodo master, in modo che ogni Kube-proxy punti al suo master sul 127.0.0.1/localhost

Il PodMaster contraenti stabilisca quale api-server dovrebbe girare, che a sua volta usa il proxy locale di quel master

+0

Per quanto riguarda il primo punto: sì, penso di si. Sto già eseguendo un proxy Kube su ciascun master, che punta al master locale. Il mio problema non è con il proxy kube su nodi master, ma su nodi worker. Quelli non hanno un maestro locale a cui connettersi. Il secondo punto è, afaik, sbagliato. Il podmaster è, secondo i documenti, utilizzato solo per decidere in quale istanza lo scheduler e il controller-manager vengono istanziati, mentre l'apiserver è in esecuzione su tutte le istanze master. –