2016-03-18 6 views
8

Kube-proxy ha un'opzione chiamata --proxy-mode, e secondo il messaggio di aiuto, questa opzione può essere userspace o iptables. (Vedi sotto)Che cosa significa modalità userspace nella modalità proxy di kube-proxy?

# kube-proxy -h 
Usage of kube-proxy: 
... 
     --proxy-mode="": Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided. Otherwise use the best-available proxy (currently userspace, but may change in future versions). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy. 
... 

non riesco a capire che cosa significa la modalità userspace significa qui.

Chiunque può dirmi qual è il principio di funzionamento quando il kube-proxy gira sotto la modalità userspace?

risposta

28

Lo spazio utente e l'iptables si riferiscono a ciò che effettivamente gestisce l'inoltro della connessione. In entrambi i casi, vengono installate le regole locali di iptables per intercettare le connessioni TCP in uscita che hanno un indirizzo IP di destinazione associato a un servizio.

Nella modalità spazio utente, la regola iptables inoltra a una porta locale dove un go binary (kube-proxy) sta ascoltando le connessioni. Il binario (in esecuzione in userspace) termina la connessione, stabilisce una nuova connessione a un back-end per il servizio, quindi inoltra le richieste al back-end e le risposte al processo locale. Un vantaggio della modalità spazio utente è che poiché le connessioni vengono create da un'applicazione, se la connessione viene rifiutata, l'applicazione può riprovare a un back-end diverso.

In modalità iptables, le regole iptables vengono installate per inoltrare direttamente i pacchetti destinati a un servizio a un back-end per il servizio. Questo è più efficiente dello spostamento dei pacchetti dal kernel al kube-proxy e quindi al kernel, quindi si ottiene un throughput più elevato e una latenza di coda migliore. Lo svantaggio principale è che è più difficile eseguire il debug, perché invece di un binario locale che scrive un log su /var/log/kube-proxy, è necessario esaminare i registri dalle regole di iptables di elaborazione del kernel.

In entrambi i casi sarà eseguito un binario proxy Kube sulla macchina. In modalità spazio utente si inserisce come proxy; in modalità iptables configurerà iptables piuttosto che le connessioni proxy in sé. Lo stesso binario funziona in entrambe le modalità e il comportamento viene commutato tramite un flag o impostando un'annotazione nel apiserver per il nodo.

+0

Grazie per la tua chiara spiegazione! – ax003d

+3

ax003d dovresti accettare la risposta se è soddisfacente. – smparkes

+0

@smparkes accettato. Grazie per il tuo ricordo! – ax003d