Pubblicato: 21 novembre 2023
Collaboratori: Stephanie susnjara, Ian smalley
Kubernetes Network fornisce l'infrastruttura di rete per consentire la comunicazione, la scalabilità, la sicurezza e l'accesso esterno per le applicazioni containerizzate. La rete è complessa e coinvolge la comunicazione tra tutti i componenti principali che risiedono all'interno (ad es. pod, nodi, container, servizi) e all'esterno (ad es. traffico esterno) di un cluster Kubernetes.
Questi componenti si basano su quattro diversi metodi di rete per comunicare:
1. Rete da container a container
2. Rete "pod-to-pod"
3. Collegamento in rete tra pod e servizi
4. Rete esterna al servizio
Per gli ingegneri di piattaforma e DevOps che cercano di rendere operativa la velocità di immissione sul mercato garantendo al contempo le prestazioni delle applicazioni.
Iscriviti alla newsletter IBM
Il nome Kubernetes deriva dal greco, che significa timoniere o pilota. Sulla base di Borg, la piattaforma interna di orchestrazione dei container di Google, Kubernetes è stata introdotta al pubblico come strumento open source nel 2014. Nello stesso anno, Google ha donato Kubernetes alla Cloud Native Computing Foundation (link esterno a ibm.com), l'hub di computing cloud-native, open source e indipendente dal fornitore. Da allora, Kubernetes è diventato lo strumento di orchestrazione dei container più utilizzato per eseguire workload basati su container in tutto il mondo.
Kubernetes, noto anche come "k8s" o "kube", è stato esplicitamente progettato per automatizzare la gestione dei container , l'unità software standard che racchiude il codice e tutte le sue dipendenze. Lo strumento di orchestrazione è molto apprezzato per l'esecuzione rapida e affidabile in qualsiasi ambiente infrastrutturale, sia esso on-premise, cloud privato, cloud pubblico o cloud ibrido.
A differenza di macchine virtuali (VM) che virtualizzano l'hardware fisico, i container virtualizzano il sistema operativo (come Linux o Windows). Ogni container contiene solo le librerie e le dipendenze dell'applicazione. Poiché i container condividono lo stesso kernel del sistema operativo dell'host, sono considerati leggeri, veloci e portatili.
Kubernetes e il suo ecosistema di servizi, supporto e strumenti sono diventati la base per la moderna infrastruttura cloud e la modernizzazione delle applicazioni. Tutti i principali provider di cloud, tra cui Amazon Web Services (AWS), Google, Microsoft, IBM e Red Hat, integrano Kubernetes all'interno delle loro piattaforme cloud per migliorare le funzionalità Platform-as-a-Service (PaaS) e Infrastructure-as-a-Service (IaaS).
I seguenti componenti fondamentali comprendono l'architettura Kubernetes:
Un cluster Kubernetes è un insieme di macchine fisiche o virtuali (nodi) che funzionano insieme per eseguire applicazioni containerizzate. I cluster costituiscono la base dell'architettura Kubernetes.
I nodi master rappresentano un singolo host di elaborazione, una macchina virtuale o fisica. Ospitano i componenti del piano di controllo Kubernetes e sono responsabili della pianificazione e dello scaling delle applicazioni. Gestendo tutte le risorse di calcolo, rete e storage in un cluster Kubernetes, il nodo master assicura che le applicazioni e i servizi containerizzati siano ugualmente implementati sui nodi dei lavoratori nel cluster.
I nodi del lavoratore sono responsabili dell'esecuzione dei container e dell'esecuzione di qualsiasi lavoro assegnato dal nodo principale. Ospitano anche container di applicazioni, raggruppati come pod.
I pod sono gruppi di uno o più container (come Linux o Docker) che condividono le stesse risorse di calcolo e la stessa rete. Si tratta di unità di distribuzione cluster che funzionano anche come unità di scalabilità. Ad esempio, se un container in un pod ha un volume di traffico elevato, Kubernetes può replicare tale pod ad altri nodi nel cluster. Kubernetes può anche chiudere i pod se il volume di traffico diminuisce.
I componenti aggiuntivi di Kubernetes includono quanto segue:
La rete di computer di base prevede il collegamento di due o più dispositivi informatici per condividere dati e scambiare risorse, tramite cavi (cablati) o WiFi.
Nella rete fisica, i server fisici sono connessi a apparecchiature di rete fisiche: switch, router e cavi Ethernet per connettersi a Internet.
Nelle reti virtuali, le reti definite dal software (SDN), componenti come i dispositivi Ethernet virtuali e le interfacce virtuali vengono installati su server bare metal o macchine virtuali per connettersi a Internet. La distribuzione di Kubernetes si basa sull'SDN per configurare e gestire la comunicazione di rete tra i cluster.
Prima di approfondire il networking Kubernetes, vale la pena rivedere i termini fondamentali sull'argomento:
Kubernetes è stato creato per eseguire sistemi ripartiti con un piano di rete distribuito su un cluster di computer. Oltre a fornire interconnettività tra i componenti, la rete cluster Kubernetes crea un ambiente in cui i dati possono spostarsi liberamente ed in modo efficiente attraverso la rete definita dal software.
Un'altra caratteristica distintiva della rete Kubernetes è la sua struttura di rete piatta, il che significa che tutti i componenti possono connettersi senza dipendere da un altro hardware. In Kubernetes, ogni pod in un cluster può comunicare con ogni altro pod, indipendentemente dal nodo su cui è in esecuzione. La rete piatta offre un modo efficiente per condividere le risorse ed eliminare la necessità di un'allocazione dinamica delle porte.
Nel complesso, la rete Kubernetes astrae la complessità, consentendo agli sviluppatori e agli operatori di concentrarsi sulla creazione e sulla manutenzione delle applicazioni piuttosto che sulla gestione di complesse configurazioni di rete.
Kubernetes fornisce un modello di rete che aiuta a risolvere le sfide dell'orchestrazione di applicazioni containerizzate in un ambiente distribuito. Il runtime del container su ciascun nodo implementa il modello di rete e aderisce alle seguenti regole:
Il modello di rete Kubernetes si applica a quattro tipi di base di comunicazione Kubernetes:
I container sono l'unità più piccola di una rete Kubernetes. Nelle configurazioni di rete di base, i container comunicano all'interno di un singolo pod tramite localhost. Questa comunicazione è possibile perché i container nello stesso pod condividono lo stesso spazio dei nomi di rete, che include risorse di rete come archiviazione, indirizzo IP e spazio di porta.
La comunicazione da pod a pod include la comunicazione tra pod sullo stesso nodo e la comunicazione tra pod su nodi diversi. Ogni pod in un cluster Kubernetes ha il proprio indirizzo IP univoco, consentendo la comunicazione diretta tra i pod indipendentemente dal nodo in cui risiedono. Inoltre, ogni cluster Kubernetes fornisce automaticamente un servizio DNS (domain name system service) oltre all'indirizzo IP del pod. Il servizio DNS in cui i nomi vengono assegnati a pod (e servizi) crea nomi facili e leggibili per gli amministratori, fornendo un meccanismo leggero per la ricerca del servizio.
Un servizio in Kubernetes è un'astrazione che definisce un insieme logico di pod e consente l'esposizione al traffico esterno, il bilanciamento del carico e il rilevamento del servizio a tali pod. I servizi facilitano la comunicazione sia dal pod al servizio che dall'esterno al servizio .
Secondo il modello di rete di Kubernetes, gli indirizzi IP del pod sono effimeri. Pertanto, se un pod si arresta o viene eliminato e viene creato un nuovo pod al suo posto, il nuovo pod riceverà probabilmente un nuovo indirizzo IP.
Nella comunicazione da pod a servizio, un ClusterIP è un tipo di servizio che fornisce un indirizzo IP virtuale stabile a un set di pod. Questo indirizzo IP interno è raggiungibile solo all'interno del cluster e può essere utilizzato per le comunicazioni interne tra pod e servizi.
Il kube-proxy, installato su ogni nodo in un cluster, mantiene le regole di rete sull'host e monitora le modifiche dei servizi e dei pod. Man mano che i pod vengono creati o distrutti, il kube-proxy aggiorna gli iptable (un programma di utilità utilizzato per creare regole sul firewall del kernel Linux per instradare il traffico) in modo da riflettere tale modifica in modo che il traffico inviato all'IP del servizio sia instradato correttamente.
Il networking da esterno a servizio si riferisce all'esposizione e all'accesso a servizi, come servizi esterni o database, dall'esterno del cluster Kubernetes.
Kubernetes fornisce diversi servizi per agevolare il traffico esterno in un cluster:
Le policy di rete Kubernetes sono un costrutto di applicazione che svolge un ruolo fondamentale nella rete Kubernetes. Questi criteri consentono agli amministratori e agli sviluppatori di definire regole che specificano il modo in cui i pod possono comunicare tra loro e con altri endpoint di rete. Le policy di rete vengono applicate utilizzando l'API Kubernetes Network Policies e sono costituite dai seguenti componenti di base:
Le policy di rete di Kubernetes aiutano a definire e gestire le policy di sicurezza definendo regole che controllano quali pod possono comunicare tra loro, impedendo così l'accesso non autorizzato e impedendo gli attacchi nocivi. Le policy di rete garantiscono inoltre l'isolamento tra pod e servizi in modo che solo tali pod o servizi possano comunicare con un insieme consentito di peer. Ad esempio, l'isolamento è fondamentale per le situazioni di multi-tenancy quando DevOps o altri team condividono lo stesso cluster Kubernetes, ma lavorano su progetti diversi.
Per le aziende con requisiti di conformità specifici, le policy di rete aiutano a specificare e applicare i controlli di accesso alla rete. Ciò aiuta a soddisfare gli standard normativi e garantisce che il cluster aderisca alle politiche dell'organizzazione.
L'interfaccia di rete container (CNI) è un'altra funzionalità essenziale legata alla rete Kubernetes. Creato e gestito dalla Cloud Native Computing Foundation e utilizzato da Kubernetes e altri runtime per container, tra cui RedHat OpenShift® e Apache Mesos, CNI è una specifica standardizzata e un insieme di API che definiscono come i plug-in di rete devono abilitare la rete dei container. I plug-in CNI possono assegnare indirizzi IP, creare spazi dei nomi di rete, configurare percorsi di rete e così via per abilitare la comunicazione pod-to-pod, sia all'interno dello stesso nodo che tra nodi.
Mentre Kubernetes fornisce un CNI predefinito, numerosi plug-in CNI di terze parti, tra cui Calico, Flannel e Weav—sono progettati per gestire la configurazione e la sicurezza negli ambienti di rete basati su container. Pur avendo caratteristiche e approcci diversi al networking, come le reti overlay o il routing diretto, tutti aderiscono alle specifiche CNI compatibili con Kubernetes.
Se desideri iniziare a lavorare con Kubernetes o incrementare le competenze esistenti con gli strumenti dell'ecosistema Kubernetes e Kubernetes, prova uno di questi tutorial.
Training interattivo per implementare e rendere operativo un cluster su IBM Cloud Kubernetes Service. Nessun download o configurazione richiesti.
Implementa cluster sicuri e ad elevata disponibilità in un'esperienza Kubernetes nativa.
Con Red Hat OpenShift on IBM Cloud, gli sviluppatori OpenShift hanno a disposizione un modo rapido e sicuro per containerizzare e implementare i carichi di lavoro aziendali nei cluster Kubernetes.
IBM Cloud Code Engine, piattaforma serverless completamente gestita, ti consente di eseguire il container, il codice dell'applicazione o il job batch su un runtime del container completamente gestito.
Acquisisci competenze su Kubernetes attraverso i corsi della certificazione IBM Cloud Professional Developer.
Gli studenti presentano la loro grafica con Red Hat OpenShift on IBM Cloud.
I container fanno parte di una strategia di cloud ibrido che ti consente di creare e gestire i carichi di lavoro ovunque ti trovi.
Kubernetes è una piattaforma di orchestrazione dei container per pianificare e automatizzare la distribuzione, la gestione e la scalabilità delle applicazioni containerizzate.
I container sono unità eseguibili di software in cui il codice dell'applicazione è impacchettato insieme alle sue librerie e dipendenze, in modi comuni, in modo che il codice possa essere eseguito ovunque.
L'orchestrazione di container automatizza e semplifica il provisioning, l'implementazione e la gestione delle applicazioni containerizzate.