2016-06-27 32 views
5

Ho installato minikube sulla mia macchina Ubuntu 16.04 e hanno iniziato un cluster, con un messaggiominikube: non è possibile collegare un servizio nginx distribuito a livello locale

"Kubernetes is available at https://192.168.99.100:443"

Avanti, ho schierato un servizio nginx con il seguente comando

> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose

> kubectl.sh get pods -o wide 
NAME      READY  STATUS RESTARTS AGE  NODE 
my-nginx-2494149703-8jnh4 1/1  Running 0   13m  127.0.0.1 
my-nginx-2494149703-q09be 1/1  Running 0   13m  127.0.0.1 

> kubectl.sh get services -o wide 
NAME   CLUSTER-IP EXTERNAL-IP PORT(S) AGE  SELECTOR 
kubernetes 10.0.0.1  <none>  443/TCP 14m  <none> 
my-nginx  10.0.0.83 <none>  80/TCP 13m  run=my-nginx 

> kubectl.sh get nodes -o wide 
NAME  STATUS AGE 
127.0.0.1 Ready  16m 

Domande:

1) Il nodo 127.0.0.1 è il mio computer di sviluppo locale? Questo mi ha confuso di più.

2) La seguente comprensione è corretta: il cluster (nodi, server API kubernetes) ha indirizzi IP interni in 10.0.0.x ei loro indirizzi IP esterni corrispondenti sono 192.168.99.x. I 2 pod avranno quindi IP nell'intervallo come 10.0.1.xe 10.0.2.x?

3) Perché l'IP esterno per i servizi non esiste? Nemmeno, per il servizio di kubernetes. Il 192.168.99.43 non è un IP esterno qui?

4) Ancora più importante, come posso connettermi al servizio nginx dal mio laptop?

risposta

9

1) Il nodo 127.0.0.1 è la macchina di sviluppo locale? Questo mi ha confuso di più con lo .

Quando un nodo si registra, fornire l'IP o il nome con cui registrarsi. Per impostazione predefinita, il nodo registra solo 127.0.0.1. Questo fa riferimento alla tua VM che esegue Linux, non alla tua macchina host.

2) è il mio seguente intesa corretto: Il cluster (nodi, kubernetes del server API) ha gli indirizzi IP interni in 10.0.0.x e loro corrispondenti indirizzi IP esterni sono 192.168.99.x. I 2 pod saranno quindi hanno IP nell'intervallo come 10.0.1.xe 10.0.2.x?

Sì, la rete 10.0.0.x è la rete overlay. 192.168.99.x sono i tuoi indirizzi "pubblici" che sono visibili al di fuori del cluster.

3) Perché l'IP esterno per i servizi non esiste? Nemmeno, per il servizio kubernetes. Il 192.168.99.43 non è un IP esterno qui?

L'IP esterno viene in genere utilizzato per l'ingresso del traffico tramite un IP specifico. Il servizio kubernetes utilizza un tipo di servizio clusterIP, il che significa che è visibile solo al cluster interno.

4) Ancora più importante, come posso connettermi al servizio nginx dal mio laptop ?

Il modo più semplice per visualizzare il servizio nginx è di farlo digitare NodePort, quindi distribuire il servizio. Dopodiché, descrivi il servizio per ottenere la porta che è stata assegnata (o dopo averla creata te lo dirà anche tu).Quindi colpisci l'IP della tua VM e fornisci il NodePort assegnato automaticamente.

e.g. http://192.168.99.100:30001

+4

Grazie Steve! Un altro modo per accedere al servizio (se non si desidera utilizzare un NodePort), è usare kubectl port-forward per accedere al pod sottostante. Ad esempio, è possibile eseguire: 'kubectl port-forward mypod 8080: 8080', per rendere il pod disponibile su http: // localhost: 8080 – dlorenc

+0

Grazie Steve. Per quanto riguarda la tua prima risposta, intendi dire che 127.0.0.1 è l'unica interfaccia nw del nodo (VM in questo caso) che i pod al suo interno possono comunicare, giusto? In secondo luogo, quando eseguo 'kubectl exec my-nginx-yczg9 - sh -c "ifconfig -a'", dà eth0 con alcuni IP come 172.17.0.4 Ora, a quanto ho capito, my-nginx-yczg9 è un pod e pod possono avere contenitori N. Quindi è corretto dire che 172.17.0.4:80 è un IP Pod (endpoint virtuale IP?), che verrà inoltrato al contenitore nginx appropriato in esecuzione all'interno del pod e che il contenitore avrà IP nella sottorete della finestra mobile all'interno? – soupybionics

+0

Grazie diorec, Come funziona il comando port forward qui? Si prega di correggermi se ho torto: Per quanto ne so, l'host locale host (host) della mia macchina (cioè 127.0.0.1:8080) funge da proxy per 192.168.99.100:30001? in cui il comando sarà kubectl port-forward mypod 8080: 30001 – soupybionics