Rete Kubernetes: una guida completa per comprendere il modello di rete

Pubblicato: 2020-02-18

La gestione dei container è un aspetto vitale del networking. Con i mutevoli requisiti di traffico odierni, l'importanza di Kubernetes è decuplicata. E se sei interessato a conoscere il networking, dovrai prima familiarizzare con Kubernetes. Conoscere Kubernetes ti aiuterà a gestire in modo efficace la gestione dei container. Kubernetes è anche uno dei migliori strumenti DevOps sul mercato per il 2020.

Ma non preoccuparti perché, in questa guida dettagliata, parleremo della stessa cosa. Kubernetes è uno strumento di gestione dei container e in questo articolo imparerai perché viene utilizzato, quali sono i componenti della sua rete e come instradano il traffico.

Impara l'ingegneria del software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Immergiamoci.

Sommario

Cos'è Kubernetes?

Prima di iniziare a discutere di rete in Kubernetes, dobbiamo considerare i concetti di base di questo strumento. In questo modo, non incontrerai confusione più avanti nell'articolo e avrai una comprensione di base di tutto ciò che è menzionato qui.

Kubernetes è uno strumento di orchestrazione di container open source. Ti aiuta nella gestione dei container, che sono diventati l'aspetto più critico del networking in questi giorni. Kubernetes ha molte funzioni, tra cui il ridimensionamento dei contenitori, la distribuzione dei contenitori, la decalcificazione dei contenitori, ecc.

Mentre Docker aiuta i professionisti nella creazione di container, Kubernetes li aiuta nella gestione degli stessi. Ecco perché entrambi sono così importanti. Kubernetes esegue un sistema distribuito su un cluster. Comprendere la sua struttura e il suo networking ti consentirà di evitare errori e gestire i contenitori senza errori.

Perché viene utilizzato Kubernetes?

I requisiti di container delle aziende sono aumentati notevolmente negli ultimi anni. A meno che non siano troppo piccoli, non possono fare affidamento su uno o due contenitori. Avrebbero bisogno di un ampio set di contenitori per il bilanciamento del carico. Il requisito potrebbe essere di centinaia per mantenere un'elevata disponibilità e bilanciare il traffico.

Quando il traffico aumenterebbe, avrebbero bisogno di più container per gestire le richieste. Allo stesso modo, quando il traffico sarebbe inferiore, sarà necessario ridimensionare i contenitori. Gestire i container in base alla domanda può essere impegnativo, soprattutto se lo fai manualmente.

L'orchestrazione manuale dei contenitori può richiedere molto tempo e risorse, che sarebbero state facilmente spese altrove. L'automazione di questa attività rende le cose molto più semplici. Quindi non dovresti preoccuparti di ridimensionare e decalcificare i contenitori. Questo è ciò che fa Kubernetes. Leggi come creare progetti DevOps per principianti con l'aiuto di Kubernetes nel nostro articolo sui migliori progetti DevOps per principianti.

Automatizza l'orchestrazione e la gestione dei container. È molto popolare per la sua funzionalità. È un prodotto Google e le sue prestazioni aiutano notevolmente le organizzazioni ad automatizzare il ridimensionamento dei container.

Componenti di Kubernetes

Ora che sai cos'è Kubernetes e quali sono le sue funzioni, possiamo iniziare a discutere dei suoi molteplici componenti. Puoi capire il networking in questo strumento solo dopo aver acquisito familiarità con le sue diverse parti. Non c'è molto di cui preoccuparsi, tuttavia. Questo perché siamo qui per aiutarti. Di seguito una breve descrizione dei suoi vari componenti. Sebbene la descrizione sia concisa, dovrebbe essere sufficiente per darti un'idea generale.

Baccelli

Ricordi gli atomi in chimica, i più piccoli oggetti indipendenti della materia? Bene, i baccelli sono gli atomi di Kubernetes. Un Pod è un carico di lavoro in un cluster. Può contenere uno o più contenitori con stoccaggio. Ogni Pod ha un indirizzo IP univoco che funge da identità quando interagisce con altri componenti di Kubernetes. Tutti i contenitori di un pod sono programmati e posizionati all'interno della stessa macchina.

Controllori

I controller costruiscono i Kubernetes. I controller controllano lo stato del server API per assicurarsi che il suo stato corrente corrisponda allo stato che hai specificato. Se lo stato del server API cambia per qualche motivo, reagisce di conseguenza. I controller utilizzano un loop per controllare gli stati dei cluster e per confrontarli con gli stati richiesti. Può anche eseguire attività per modificare lo stato corrente nello stato necessario.

Nodi

Se i Pod sono gli atomi, i Nodi sono gli ingranaggi di Kubernetes. Gestiscono il cluster. Le macchine virtuali sono nodi accessibili nei cluster Kubernetes. Molte persone tendono a usare la parola "host" invece di "nodo". Abbiamo cercato di utilizzare il termine nodi in modo coerente in questo articolo.

Server API

Il server API è il gateway per il datastore in Kubernetes. Ti consente di specificare lo stato desiderato per i cluster. Dovrai effettuare chiamate API se desideri modificare lo stato del tuo cluster Kubernetes e descrivere lo stato richiesto.

Poiché hai familiarità con i componenti della rete Kubernetes, possiamo iniziare con il suo modello di rete e come funziona.

Spiegazione della rete Kubernetes

La rete Kubernetes segue un modello specifico che presenta i seguenti vincoli:

  • I pod comunicano con tutti gli altri pod senza la traduzione dell'indirizzo di rete
  • I Nod possono comunicare con i Pod senza la traduzione dell'indirizzo di rete
  • L'IP di un Pod che altri Pod vedono per esso è lo stesso IP che vede da solo

A causa di queste restrizioni, Kubernetes ha solo poche sezioni di rete. Loro sono:

  • Trasferimenti da container a container
  • Trasferimenti da pod a pod
  • Dal pod al servizio di trasferimento
  • Internet ai trasferimenti di servizi

Da contenitore a contenitore

Potresti pensare che in rete, una macchina virtuale interagisca direttamente con un dispositivo Ethernet, ma c'è di più.

Se stai usando Linux, lo spazio dei nomi di rete ti fornirà uno stack di rete con i suoi dispositivi di rete, percorsi e regole per il firewall. Ogni processo in esecuzione in Linux comunicherebbe con questo spazio dei nomi di rete.

Un Pod possiede un gruppo di contenitori all'interno di uno spazio dei nomi di rete. Questi contenitori hanno lo stesso spazio porta e lo stesso indirizzo IP, che viene loro assegnato tramite lo spazio dei nomi di rete. Questi contenitori si trovano l'un l'altro tramite localhost perché si trovano nello stesso spazio dei nomi. Se le tue applicazioni si trovano all'interno di un pod, possono accedere anche ai volumi condivisi.

Da baccello a baccello

I pod comunicano tra loro tramite i loro indirizzi IP. Ogni Pod ha un indirizzo IP reale e distinto in Kubernetes. Sai già cosa sono i Pod, quindi non abbiamo bisogno di toccare questo argomento. Sappiamo che Kubernetes utilizza gli IP per facilitare la comunicazione tra i pod; discutiamo di come lo fa.

I pod comunicano attraverso i loro nodi. Ecco perché per comprendere la comunicazione da Pod a Pod, dovrai comprendere l'interazione tra i nodi.

  • Comunicazione tra nodi
  • Comunicazione intranodale

Discuteremo ciascuno di essi in dettaglio:

Comunicazione tra nodi

Quando i nodi si trovano in pod diversi, comunicheranno attraverso questo metodo. Possiamo comprendere questo metodo di comunicazione attraverso un semplice esempio. Supponiamo che ci siano quattro diverse reti di pod, ovvero pod 1, pod 2, pod 3 e così via. I pod 1 e 2 si trovano nella rete principale del nodo 1 e i pod 3 e 4 si trovano nella 2a rete.

Devi trasferire un pacchetto dal pod 1 al pod 4.

Il pacchetto deve prima lasciare la rete del pod 1 ed entrare nella rete principale tramite veth0. Passa attraverso il bridge Linux, che lo aiuta a trovare la sua destinazione. Poiché il nodo non ha un obiettivo all'interno del suo Pod, viene rimandato all'interfaccia eth0. Ora lascia il primo nodo per la tabella di instradamento. La tabella di instradamento instrada il pacchetto al nodo richiesto, che si trova in pod4. Il pacchetto raggiunge prima il nodo 2, quindi raggiunge il bridge, che lo dirige verso la sua destinazione.

Comunicazione intranodale

La comunicazione intranodo avviene quando i nodi si trovano nello stesso Pod. Possiamo spiegare la comunicazione tra nodi nello stesso modo in cui abbiamo spiegato la comunicazione tra nodi. In questi casi, il pacchetto viaggia dal primo Pod a eth0. Va nella rete principale tramite veth0. Quindi deve passare sul ponte, dopodiché va all'IP designato.

È così che i pod comunicano tra loro in Kubernetes. Passiamo alla sezione successiva.

Pod al servizio

Hai già visto nella sezione precedente come viene instradato il traffico tra gli indirizzi IP dei pod. Tuttavia, c'è un problema con gli indirizzi IP. Gli IP del pod possono scomparire e riapparire in base al ridimensionamento dei contenitori. Quindi, se i contenitori vengono ridimensionati, il numero di IP del pod aumenterà e viceversa è anche vero.

I servizi aiutano nella gestione di questa situazione. Ecco una breve spiegazione di quali servizi sono in Kubernetes, quindi non hai alcuna confusione.

Cosa sono i servizi a Kubernetes?

I servizi in Kubernetes configurano i proxy che devono trasferire le richieste a un gruppo di pod. Quei pod ottengono traffico e il selettore gestisce questa attività. Dopo la creazione di un servizio, riceve un indirizzo IP che gestisce le sue richieste. Esistono diversi tipi di servizi e dobbiamo discuterne prima di passare a Pod per la comunicazione del servizio.

Ci sono un totale di 4 tipi di servizi in Kubernetes. Loro sono:

  • ClusterIP
  • NodePort
  • Load Balancer
  • Nome esterno

ClusterIP è il tipo di servizio predefinito. In questo tipo, il servizio è accessibile solo nel cluster. In NodePort, il servizio è esposto all'IP di ogni nodo. NodePort instrada a un servizio ClusterIP poiché il sistema lo crea in anticipo. A differenza di ClusterIP, puoi contattare questo servizio all'esterno di un cluster.

LoadBalancer utilizza il servizio di bilanciamento del carico di un cloud per esporre il servizio a reti esterne. NodePort e ClusterIP vengono creati automaticamente per questo motivo e il servizio ExternalName lo trasferisce poiché riflette un record CNAME.

Ora che sai cosa sono i servizi e quanti tipi di servizi ci sono, discutiamo di come avviene la comunicazione da Pod a servizio.

Come funziona?

In questo scenario, il pacchetto lascia il Pod tramite eth0. Va al bridge tramite il dispositivo Ethernet da dove viene trasferito al percorso predefinito di eth0. Tuttavia, deve passare attraverso iptables prima di essere accettato su eth0. iptables determina la destinazione del pacchetto utilizzando le regole specificate che ha e invia il pacchetto al Pod richiesto. Una volta fatto ciò, il pacchetto passa all'IP reale di un pod anziché all'IP virtuale del servizio.

Esterno al servizio

I precedenti tre metodi di instradamento del traffico riguardavano solo Kubernetes. Ma in casi reali, è probabile che dovrai connettere la tua rete Kubernetes a una rete di terze parti per instradare il traffico. E questa sezione è più o meno la stessa.

Quando connesso a una rete esterna, Kubernetes può svolgere due funzioni:

  • Instradare il traffico da Internet alla sua rete
  • Instradare il traffico dalla sua rete a Internet

Il primo richiede una rete Ingress e il secondo richiede una rete Egress. Diamo un'occhiata a loro.

Ingresso

Instradare il tuo traffico da una rete pubblica al tuo sistema Kubernetes è molto complicato. Richiede il LoadBalancer e il Controller per gestire i pacchetti. Ecco un esempio di come funziona.

Innanzitutto, distribuirai un servizio e il tuo provider cloud creerà un nuovo sistema di bilanciamento del carico. Il servizio di bilanciamento del carico distribuirà il traffico tra le macchine virtuali all'interno del tuo cluster utilizzando la porta designata del tuo servizio. Qui, iptables trasferisce il traffico ricevuto dal sistema di bilanciamento del carico al Pod richiesto. Il Pod risponderà al client con il suo IP e conntrack aiuta a riscrivere gli IP nel modo giusto.

I bilanciatori di carico Layer-7 presenti nella rete sono in grado di segmentare il traffico in entrata in base a URL e percorsi. Questo è molto utile quando lavori con una rete Ingress.

Uscita

Quando indirizzi il traffico da un nodo della tua rete Kubernetes a Internet, dipende molto dalle configurazioni della tua rete da come funzionerebbe tutto. Discuteremo un esempio generale qui per toccare l'argomento.

Il pacchetto parte dallo spazio dei nomi del Pod e va allo spazio dei nomi radice attraverso il veth. Quindi va al bridge da dove viaggia al servizio predefinito perché l'IP a cui deve andare non è connesso al bridge. Passa attraverso iptables mentre va allo spazio dei nomi di root.

Leggi: Prerequisito per DevOps: non è quello che pensi che sia

Ora i gateway Internet accettano solo indirizzi IP che sono in connessione con macchine virtuali. E il pod sorgente della nostra tasca non è collegato a una VM. Quindi iptables esegue un NAT sorgente e cambia la sorgente del pacchetto. Ora raggiunge il gateway Internet dove passa attraverso un altro NAT e quindi entra nell'Internet pubblica (la sua destinazione).

E questo è tutto. Ora sai tutto sulla rete Kubernetes e sui suoi vari componenti.

Conclusione

Kubernetes è senza dubbio uno degli strumenti essenziali che dovresti imparare se sei interessato al networking. Coloro che non hanno familiarità con questo campo non saprebbero quanto sia vitale. Gestire i container e instradare il traffico in base a tali requisiti di traffico può aiutarti notevolmente. Abbiamo cercato di mantenere questa guida il più chiara possibile per aiutarti a capire tutto.

Se vuoi imparare e padroneggiare Kubernetes, DevOps e altro, dai un'occhiata al programma Executive PG di IIIT-B e upGrad nello sviluppo del software - Specializzazione nello sviluppo dello stack completo.

Prepararsi per una carriera del futuro

Richiedi la Laurea Magistrale in Informatica