Per i servizi Kubernetes, sono disponibili varie configurazioni di porta distinte, tra cui porta, targetport e nodeport. Il servizio Kubernetes è accessibile tramite la porta scelta del cluster e altri pod possono comunicare con questo server utilizzando la porta configurata. Sul Targetport, il servizio invierà richieste e i pod le ascolteranno. Questa porta dovrà anche essere aperta per l'applicazione del container. Se il campo della porta non viene fornito, NodePort viene utilizzato per impostazione predefinita. Esamineremo come esporre le porte in Kubernetes in questo articolo. È necessario comprendere il pod e la distribuzione per seguire gli esercizi pratici su questo argomento.
Assicurati di aver installato kubectl. Avrai anche bisogno di un cluster Kubernetes, nonché lo strumento di riga di comando Kubectl configurato per connettersi con esso. Per iniziare, apri il cluster Minikube, che è installato sul tuo Ubuntu 20.04 LTS OS. Per eseguire Minikube, eseguire il comando Minikube Start sulla riga di comando.
Crea un file con il comando touch.
Il baccello.Il file Yaml viene creato, come mostrato nello screenshot di accompagnamento.
Ora crea un pod Nginx con le seguenti specifiche della porta del contenitore:
Di conseguenza, è possibile accedervi da qualsiasi nodo nel cluster. Esamina i nodi su cui opera il pod e usa i comandi seguenti per farlo.
Per vedere lo stato completo dei pod Kubernetes, è possibile eseguire il comando Get Pod come indicato di seguito.
Con il comando mostrato nello screenshot, è possibile controllare gli indirizzi IP dei pod.
Puoi ssh in qualsiasi nodo presente nel cluster e arricciare entrambi gli indirizzi IP. Vale la pena notare che i contenitori non usano la porta 80 sul nodo e non ci sono regole NAT specifiche per dirigere il traffico verso il pod. Ciò significa che è possibile eseguire molti baccelli NGINX sullo stesso nodo, ciascuno con la sua porta del contenitore e accedervi tramite IP da qualsiasi altro pod o nodo nel cluster. Le porte possono ancora essere esposte alle interfacce del nodo host, proprio come Docker, sebbene questo requisito sia notevolmente ridotto a causa del modello di networking.
Come creare un servizio?
Quindi, su uno spazio di indirizzi piatto, a livello cluster, abbiamo POD che eseguono Nginx. Potresti teoricamente comunicare direttamente con questi baccelli, ma cosa succede se uno di loro muore? Di conseguenza, i pod moriranno e la distribuzione ne genererà di nuovi con indirizzi IP alternativi. Il problema che un servizio risolve è questo.
Un servizio Kubernetes è un set logico di baccelli che fanno tutti lo stesso compito ed eseguono da qualche parte nel cluster. Quando viene creato un servizio, viene fornito un indirizzo IP specifico e questo indirizzo è fissato durante l'esistenza del servizio e non cambierà. I pod possono essere impostati per comunicare con il servizio, con la certezza che la comunicazione sarà bilanciata a un pod di un membro del servizio. Con Kubectl Expose, puoi creare un servizio per le tue due repliche NGINX:
Una serie di pod supporta un servizio. Gli endpoint forniscono l'accesso a questi pod. La selezione del servizio verrà valutata regolarmente, con i risultati pubblicati su un oggetto Endpoints chiamato MY-NINX. Se un pod muore, è separato dagli endpoint. Successivamente, viene sostituito con nuovi baccelli con lo stesso selettore.
Come accedere al servizio?
Le variabili di ambiente e i DN sono i due metodi di base per trovare un servizio in Kubernetes. Il primo richiede il componente aggiuntivo del cluster coredns, mentre il secondo no.
variabili ambientali
Il kubelet crea una raccolta di variabili di ambiente per ciascun servizio di corrente quando un pod inizia su un nodo. Di conseguenza, potrebbe esserci difficoltà nel processo di ordine. Esamina l'ambiente dei pod Nginx in esecuzione (il nome del tuo pod differirà) per capire perché:
$ Kubectl Exec My-Ninx-3800858182-JR4A2-PrintEnv | servizio grep
Vale la pena notare che il tuo servizio non è menzionato. Perché hai fatto le repliche prima del servizio, questo è il caso. Questo passaggio potrebbe abbassare l'intero servizio se non funzionasse. Distruggendo i due baccelli e aspettando che lo schieramento li ricrea, possiamo completare correttamente l'attività. Questa volta il servizio è presente prima delle repliche. Ciò ti fornirà la diffusione del servizio a livello di scheduler per i tuoi pod, nonché le variabili di ambiente appropriate:
DNS
Kubernetes ha un servizio addon cluster DNS che assegna automaticamente i nomi DNS ad altri servizi. Puoi vedere se è in esecuzione sul cluster eseguendo il seguente comando:
$ kubectl get servizi kube-dns --namespace = kube-system
Conclusione
In questo articolo, hai appreso che per i servizi di Kubernetes ci sono varie configurazioni di porta distinte, tra cui porta, targetport e nodeport. Inoltre, abbiamo incluso una descrizione completa di come esporre correttamente le porte in Kubernetes.