2016-07-14 298 views
5

Dalle kubernetes docs:Kubernetes: comunicazione del contenitore all'interno di un pod utilizzando nomi anziché "localhost"?

Le applicazioni in un baccello tutti utilizzano lo stesso spazio dei nomi di rete (stesso IP e spazio portuale), e può quindi “trovare” a vicenda e comunicare utilizzando localhost.

E 'possibile utilizzare alcuni nomi specifici contenitori, invece di locahost?

Ad esempio, con docker-compose up, si utilizza nome del servizio di comunicare. [docs]

Quindi, se il mio finestra mobile-compose.yml file di è

version: '2' 
services: 
    web: 
    build: . 
    ports: 
     - "8000:8000" 
    srv: 
    build: . 
    ports: 
     - "3000:3000" 

Poi accedo srv dall'interno web chiamando http://srv:3000/, nonhttp://localhost:3000

Come posso ottenere lo stesso comportamento in kubernetes? Qualche modo per specificare quale nome usare nella configurazione yaml dei pod?

risposta

9

localhost è solo un nome per il dispositivo di rete di loopback (di solito 127.0.0.1 per IPv4 e IPv6 per ::1). Questo di solito è specificato nel tuo file /etc/hosts.

Un pod ha il proprio IP, quindi ogni contenitore all'interno condivide quell'IP. Se questi contenitori devono essere indipendenti (cioè non devono essere collocati), dovrebbero essere ciascuno nel proprio contenitore. Quindi, è possibile definire uno service per ciascuno che consente le ricerche DNS come "$ SERVICENAME" dai pod nello stesso spazio dei nomi, o "$ SERVICENAME. $ NAMESPACE" dai pod in diversi spazi dei nomi.

+0

ma non posso cambiare in modo che il file/etc/hosts' ' di un pod manualmente poiché gli host possono andare e venire. Inoltre, dato che i contenitori appartengono insieme, non posso renderli un servizio. In qualche modo qui intorno? – Jatin

1

docker-compose distribuisce i singoli contenitori, collegandoli tra loro in modo che conoscano il nome e l'IP dell'altro.

a Pod in Kubernetes è simile, ma questo non è lo scopo di un Pod per contenere più servizi esterni e collegarli tra loro.

Un pod è per i contenitori che devono essere in esecuzione sullo stesso host e interagiscono solo tra loro. I contenitori comunicano internamente tramite localhost.

La maggior parte Pods è in realtà un singolo contenitore.

A Pod comunica con l'esterno utilizzando Services. In sostanza un Pod appare come se fosse solo un contenitore.

sotto il cofano, un Pod è almeno 2 contenitori: il contenitore pause gestisce l'IP del Pod e quindi il contenitore collegato. Ciò consente al contenitore di bloccarsi, riavviarsi e ricollegarsi nel pod senza modificare l'IP, consentendo di gestire i blocchi del contenitore senza coinvolgere lo scheduler e assicurandosi che il pod rimanga su un singolo nodo durante la sua durata, quindi il riavvio è veloce.

Se i contenitori che riprogrammata ogni volta si bloccano, che avrebbero potenzialmente finire su un host diverso, il routing dovrebbe essere aggiornato ecc ...