Rete Kubernetes - Una guida completa ai concetti di rete in Kubernetes



Questo blog su Kubernetes Networking approfondirà i concetti coinvolti in Kubernetes come la comunicazione con pod, servizi e reti di ingresso.

Nel blog precedente su , devi avere una conoscenza di Kubernetes. In questo blog sulla rete Kubernetes, mi concentrerò principalmente sui concetti di rete coinvolti in Kubernetes.

In questo blog sulle reti Kubernetes, capirai i seguenti argomenti:





Cos'è Kubernetes?

Puoi definire Kubernetes come uno strumento di orchestrazione di container open source che fornisce una piattaforma portatile per automatizzare la distribuzione di applicazioni containerizzate.

Ora, chiunque lavori con Kubernetes deve avere una chiara comprensione di Kubernetes Cluster in quanto ciò ti aiuterà a comprendere Kubernetes Networking.



Kubernetes Cluster

La piattaforma Kubernetes offre la gestione dello stato desiderata, che consente l'esecuzione dei servizi cluster, la configurazione alimentata nell'infrastruttura. Mi spiego con un esempio.

Considera un file YAML che ha tutte le informazioni di configurazione che devono essere inserite nei servizi del cluster. Quindi, questo file viene inviato all'API dei servizi cluster, quindi spetterà ai servizi cluster capire come pianificare i pod nell'ambiente. Quindi, supponiamo che ci siano due immagini del contenitore per il pod 1 con tre repliche e un'immagine del contenitore per il pod 2 con due repliche, spetterà ai servizi del cluster allocare queste coppie pod-replica ai worker.

power bi vs tableau 2016

Cluster Kubernetes - Rete Kubernetes - Edureka



Fare riferimento al diagramma sopra. Ora, come puoi vedere, i servizi cluster hanno assegnato il primo worker con due coppie di repliche pod, il secondo worker con una singola coppia pod-replica e il terzo worker con due coppie di repliche pod. Ora, è il processo Kubelet che è responsabile della comunicazione dei servizi del cluster con i lavoratori.

Quindi, l'intera configurazione dei servizi di cluster e gli stessi lavoratori lo costituiscono Cluster Kubernetes !!

Come pensi che questi pod assegnati individualmente comunichino tra loro?

La risposta sta nella rete Kubernetes!

Iscriviti al nostro canale youtube per ricevere nuovi aggiornamenti ..!

Ci sono principalmente 4 problemi da risolvere con i concetti di rete.

  • Comunicazione da container a container
  • Comunicazione da pod a pod
  • Comunicazione dal pod al servizio
  • Comunicazione esterna al servizio

Ora, lascia che ti dica come vengono risolti i problemi di cui sopra con Kubernetes Networking.

Rete Kubernetes

La comunicazione tra pod, servizi e servizi esterni a quelli in un cluster introduce il concetto di rete Kubernetes.

Quindi, per una tua migliore comprensione, lasciami dividere i concetti nei seguenti.

  • Pod e comunicazione container
  • Servizi
  • Connessione esterna ai servizi tramite la rete di ingresso

Pod e comunicazione container

Prima di dirti come comunicano i pod, lascia che ti presenti cosa sono i pod?

Pod

I pod sono unità di base delle applicazioni Kubernetes, che consistono in uno o più contenitori allocati sullo stesso host per condividere uno stack di rete e altre risorse. Quindi, questo implica che tutti i contenitori in un pod possono raggiungere altri su un host locale.

Ora, lascia che ti spieghi come comunicano questi pod?

Esistono 2 tipi di comunicazione. Il comunicazione tra nodi e il comunicazione intra-nodo.

Quindi, iniziamo con la comunicazione intra-nodo, ma prima lascia che ti presenti i componenti della rete pod.

Intra-nodo sotto rete

La rete pod intra-nodo è fondamentalmente la comunicazione tra due diversi nodi sullo stesso pod. Lascia che ti spieghi con un esempio.

Supponiamo che un pacchetto stia passando da pod1 a pod2.

  • Il pacchetto lascia la rete del Pod 1 su eth0 ed entra nella rete di root su veth0
  • Quindi, il pacchetto passa sul bridge Linux (cbr0) che scopre la destinazione utilizzando una richiesta ARP
  • Quindi, se veth1 ha l'IP, il bridge ora sa dove inoltrare il pacchetto.

Allo stesso modo, lasciate che vi parli della comunicazione pod tra i nodi.

Interessato a imparare Kubernetes?
Inter-nodo sotto la rete

Considera due nodi con vari spazi dei nomi di rete, interfacce di rete e un bridge Linux.

Ora, supponiamo che un pacchetto viaggi da pod1 a un pod4 che si trova su un nodo diverso.

  • Il pacchetto lascia la rete pod 1 ed entra nella rete root su veth0
  • Quindi il pacchetto passa al bridge Linux (cbr0) la cui responsabilità è di effettuare una richiesta ARP per trovare la destinazione.
  • Dopo che il bridge si rende conto che questo pod non ha l'indirizzo di destinazione, il pacchetto ritorna all'interfaccia di rete principale eth0.
  • Il pacchetto ora lascia il nodo 1 per trovare la sua destinazione sull'altro nodo ed entra nella tabella di instradamento che indirizza il pacchetto al nodo il cui blocco CIDR contiene il pod4.
  • Quindi, ora il pacchetto raggiunge il nodo2 e quindi il bridge prende il pacchetto che fa una richiesta ARP per scoprire che l'IP che appartiene a veth0.
  • Infine, il pacchetto attraversa la coppia di tubi e raggiunge il pod4.

Quindi, è così che i pod comunicano tra loro. Ora, andiamo avanti e vediamo come i servizi aiutano nella comunicazione dei pod.

Allora, cosa pensi siano i servizi?

Servizi

Fondamentalmente, i servizi sono un tipo di risorsa che configura un proxy per inoltrare le richieste a un insieme di pod, che riceverà traffico ed è determinato dal selettore. Una volta creato il servizio, gli viene assegnato un indirizzo IP che accetterà le richieste sulla porta.

Ora, ci sono vari tipi di servizi che ti danno la possibilità di esporre un servizio al di fuori del tuo indirizzo IP del cluster.

Tipi di servizi

Esistono principalmente 4 tipi di servizi.

ClusterIP: Questo è il tipo di servizio predefinito che espone il servizio su un IP interno al cluster rendendo il servizio raggiungibile solo all'interno del cluster.

NodePort: Questo espone il servizio sull'IP di ogni nodo su una porta statica. Dal ClusterIP il servizio, a cui verrà instradato il servizio NodePort, viene creato automaticamente. Possiamo contattare il servizio NodePort al di fuori del cluster.

LoadBalancer: Questo è il tipo di servizio che espone il servizio esternamente utilizzando il bilanciamento del carico di un provider di servizi cloud. Pertanto, i servizi NodePort e ClusterIP, a cui verrà instradato il bilanciamento del carico esterno, vengono creati automaticamente.

ExternalName : Questo tipo di servizio associa il servizio al contenuto di nomeesterno restituendo un CNAME registrare con il suo valore.

Quindi, ragazzi, tutto ruotava intorno ai servizi. Ora, ti starai chiedendo come si collegano i servizi esterni a queste reti, giusto?

Bene, questo è nientemeno che Rete in ingresso .

Rete in ingresso

Ebbene, la rete Ingress è il modo più potente di esporre i servizi in quanto è una raccolta di regole che consentono connessioni in entrata, che possono essere configurate per fornire servizi esternamente tramite URL raggiungibili. Quindi, fondamentalmente funge da punto di ingresso al cluster Kubernetes che gestisce l'accesso esterno ai servizi in un cluster.

Ora, lascia che ti spieghi il funzionamento di Ingress Network con un esempio.

Abbiamo 2 nodi, con il pod e gli spazi dei nomi di rete di root con un bridge Linux. Oltre a questo, abbiamo anche un nuovo dispositivo ethernet virtuale chiamato flannel0 (plugin di rete) aggiunto alla rete principale.

Ora, vogliamo che il pacchetto passi da pod1 a pod 4.

  • Quindi, il pacchetto lascia la rete di pod1 su eth0 ed entra nella rete di root su veth0.
  • Quindi viene passato a cbr0, che effettua la richiesta ARP per trovare la destinazione e successivamente scopre che nessuno su questo nodo ha l'indirizzo IP di destinazione.
  • Quindi, il bridge invia il pacchetto a flannel0 poiché la tabella di instradamento del nodo è configurata con flannel0.
  • Ora, il demone flannel parla con il server API di Kubernetes per conoscere tutti gli IP dei pod e i rispettivi nodi per creare mappature per gli IP dei pod con gli IP dei nodi.
  • Il plug-in di rete avvolge questo pacchetto in un pacchetto UDP con intestazioni aggiuntive che cambiano gli IP di origine e di destinazione ai rispettivi nodi e invia questo pacchetto tramite eth0.
  • Ora, poiché la tabella delle rotte sa già come instradare il traffico tra i nodi, invia il pacchetto al nodo2 di destinazione.
  • Il pacchetto arriva a eth0 di node2 e torna a flannel0 per de-capsularlo e lo emette di nuovo nello spazio dei nomi della rete root.
  • Anche in questo caso, il pacchetto viene inoltrato al bridge Linux per effettuare una richiesta ARP per scoprire l'IP che appartiene a veth1.
  • Il pacchetto finalmente attraversa la rete di root e raggiunge il Pod4 di destinazione.

Quindi, è così che i servizi esterni sono collegati con l'aiuto di una rete in ingresso. Ora, mentre stavo parlando dei plugin di rete, lascia che ti presenti l'elenco dei plugin di rete popolari disponibili.

Ora che ti ho parlato così tanto di Kubernetes Networking, lascia che ti mostri un case study di vita reale.

Case Study: Wealth Wizard con Kubernetes Networking

Wealth Wizards è una piattaforma di pianificazione finanziaria online che combina pianificazione finanziaria e tecnologia software intelligente per fornire consulenza di esperti a un costo accessibile.

Sfide

Ora, era estremamente importante per l'azienda scoprire ed eliminare rapidamente le vulnerabilità del codice con la piena visibilità del proprio ambiente cloud, ma desiderava controllare il traffico attraverso restrizioni di accesso.

Pertanto, hanno utilizzato l'infrastruttura Kubernetes per gestire il provisioning e l'implementazione dei cluster con l'aiuto di strumenti per gestire la distribuzione e la configurazione dei microservizi nei cluster Kube.

Hanno anche utilizzato una funzionalità dei criteri di rete di Kubernetes per consentire loro di controllare il traffico attraverso le restrizioni di accesso.

Ora, il problema era che queste politiche sono orientate alle applicazioni e possono evolversi solo con le applicazioni, ma non c'era alcun componente per applicare queste politiche.

Quindi, l'unica soluzione che l'azienda è riuscita a trovare è stata quella di utilizzare un plug-in di rete, e quindi hanno iniziato a utilizzare Weave Net.

Soluzione

Questo plug-in di rete crea una rete virtuale che dispone di un controller dei criteri di rete per gestire e applicare le regole in Kubernetes. Non solo, ma collega anche i contenitori Docker su più host e consente il loro rilevamento automatico.

Supponiamo quindi di avere un carico di lavoro nel cluster e di voler interrompere la comunicazione con qualsiasi altro carico di lavoro nel cluster. È possibile ottenere ciò creando un criterio di rete che limita l'accesso e consente l'accesso solo tramite il controller di ingresso su una porta specifica.

Ora, con la sua distribuzione su ogni nodo Kubernetes, il plug-in gestisce il routing tra pod e ha accesso per manipolare le regole di IPtables. In termini semplici, ogni policy viene convertita in una raccolta di regole IPtables, coordinate e configurate su ogni macchina per tradurre i tag Kubernetes.

Bene, ora che hai approfondito così tanta teoria su Kubernetes Networking, lascia che ti mostri come si fa praticamente.

Mani su

Quindi, supponendo che tutti voi abbiate installato Kubernetes sui vostri sistemi, ho uno scenario da mostrare.

Supponi di voler memorizzare il nome del prodotto e l'ID del prodotto, per questo avrai bisogno di un'applicazione web. Fondamentalmente, hai bisogno di un contenitore per l'applicazione web e hai bisogno di un altro contenitore come MySQL per il back-end e quel contenitore MySQL dovrebbe essere collegato al contenitore dell'applicazione web.

Che ne dici di eseguire praticamente l'esempio sopra indicato.

Iniziamo!

Passo 1: Crea una cartella nella directory desiderata e cambia il percorso della directory di lavoro in quella cartella.

mkdir HandsOn cd HandsOn /

Passo 2: Ora crea file YAML di distribuzione, per l'applicazione web e il database MySQL.

Step3: Dopo aver creato i file di distribuzione, distribuire entrambe le applicazioni.

kubectl applica -f webapp.yml kubectl applica -f mysql.yml

Passaggio 3.1: Controlla entrambe le distribuzioni.

kubectl ottiene la distribuzione

Passaggio 4: Ora devi creare servizi per entrambe le applicazioni.

kubectl applica -f webservice.yml kubectl applica -f sqlservice.yml

Passaggio 4.1: Una volta creati i servizi, distribuire i servizi.

Passaggio 4.2: Controlla se i servizi sono stati creati o meno.

kubectl ottieni servizio

Passaggio 5: Ora controlla la configurazione dei pod in esecuzione.

kubectl ottieni pod

Passaggio 6: Vai nel contenitore all'interno del pod della webapp.

kubectl exec -it container_id bash nano var / www / html / index.php

Passaggio 6.1 : Ora, cambia il file $ servername da localhost al nome del servizio SQL che è ' webapp-sql1 'In questo caso, e $ password da A ' edureka '. Inoltre, inserisci tutti i dettagli del database richiesti e salva il tuo file index.php usando la scorciatoia da tastiera Ctrl + x e dopo quella stampa Y per salvare e premere accedere .

Passaggio 7: Ora vai nel contenitore MySQL presente nel pod.

kubectl lo esegue container_id bash

Passaggio 7.1: Ottieni l'accesso per utilizzare il contenitore MySQL.

mysql -u root -p edureka

Dove -u rappresenta l'utente e -p è la password della tua macchina.

Passaggio 7.2: Crea un database in MySQL che verrà utilizzato per ottenere dati dalla webapp.

CREA DATABASE ProductDetails

Passaggio 7.3: Usa il database creato.

USA Dettagli del prodotto

Passaggio 7.4: Crea una tabella in questo database in MySQL che verrà utilizzata per ottenere dati dalla webapp.

CREATE TABLE prodotti (product_name VARCHAR (10), product_id VARCHAR (11))

Passaggio 7.5: Ora, esci anche dal contenitore MySQL usando il comando Uscita .

Passaggio 8: Verificare il numero di porta su cui funziona l'applicazione Web.

kubectl ottiene servizi

Passaggio 8.1: Ora apri l'applicazione web sul numero di porta assegnato.

Passaggio 9: Dopo aver fatto clic su Invia query , vai al nodo in cui è in esecuzione il tuo servizio MySQL e poi vai all'interno del contenitore.

Questo ti mostrerà l'output di tutti i prodotti della lista, di cui hai compilato i dettagli.

Interessato a imparare Kubernetes?

Se hai trovato pertinente questo blog di rete Kubernetes, controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo.